| | Post: 90 | Registrato il: 03/05/2016
| Città: MILANO | Età: 50 | Utente Junior | Excel 2011 | | OFFLINE |
|
24/02/2020 16:35 | |
Ciao a tutti, avrei bisogno di un aiuto
avrei la necessità di una macro che copi in modo dinamico il numero di righe al click su una
cella della colonna B
esempio al click sulla cella B10 venga copiato il range partendo dalla cella C10 fino alla
colonna J e il numero di righe fino alla prima riga vuota trovata
in questo esempio sarebbe dalla C10 alla J13
e al clic di una cella qualsiasi in colonna L incolli il range copiato in precedenza
Grazie
saluti Simone
|
|
| | Post: 3.740 | Registrato il: 03/04/2013
| Utente Master | Excel 2000 - 2013 | | OFFLINE | |
|
24/02/2020 18:59 | |
Buona sera, Simone;
direi che potresti dare uno sguardo a questo Codice VBA:
Sub Test()
Dim NRc As Long, Rcd As Long
Dim x As Integer, y As Integer, k As Integer, z As Integer
NRc = Range("C" & Rows.Count).End(xlUp).Row
Rcd = Range("M" & Rows.Count).End(xlUp).Row + 1
If Rcd < 6 Then Rcd = 6
Range(Cells(1, 12), Cells(Rcd, 20)).ClearContents
Rcd = Range("M" & Rows.Count).End(xlUp).Row + 1
If Rcd < 6 Then Rcd = 6
z = 1
For k = z To NRc
z = k
If Cells(k, 2).Value <> "" Then
y = ActiveCell.Row
For x = ActiveCell.Row To ActiveCell.Row + 50
z = z + 1
If Cells(z, 3).Value = "" Then
Exit For
z = z + 1
End If
Next x
Range(Cells(k, 2), Cells(z - 1, 11)).Copy Cells(Rcd, 12)
z = z + 1
Rcd = Range("M" & Rows.Count).End(xlUp).Row + 1
End If
Next k
End Sub
Poi, se il risulato è soddisfacente, possiamo vedere di legare il Codice ad un Evento.
Giuseppe
Windows XP - Excel 2000
Windows 10 - Excel 2013 |
| | Post: 90 | Registrato il: 03/05/2016
| Città: MILANO | Età: 50 | Utente Junior | Excel 2011 | | OFFLINE |
|
24/02/2020 19:46 | |
Grazie mille Giuseppe per il tuo intervento chiedo però scusa perchè non mi sono spiegato bene
quello che vorrei ottenere è che la macro alla selezione di una qualsiasi cella della colonna “B” ( selection Change o double click) selezioni (copy) le celle a lato a quella selezionata fino alla colonna “J” e mentre quelle sottostanti fino che incontri la prima riga vuota .
e che di seguito possa decidere liberamente su quale cella della colonna “ L” al click incolli la selezioni copiata in
precedenza
grazie Simone [Modificato da melaverde74 24/02/2020 19:58] |
| | Post: 3.741 | Registrato il: 03/04/2013
| Utente Master | Excel 2000 - 2013 | | OFFLINE | |
|
24/02/2020 20:59 | |
Buona sera, Simone; grazie del tuo riscontro.
Mi era abbastanza chiara la tua richiesta.
Domani vedo cosa riesco a proporti ma auspico avrai soluzioni interessanti proposte da altri Utenti.
Buona serata.
Giuseppe
Windows XP - Excel 2000
Windows 10 - Excel 2013 |
|
25/02/2020 01:46 | |
|
| | Post: 91 | Registrato il: 03/05/2016
| Città: MILANO | Età: 50 | Utente Junior | Excel 2011 | | OFFLINE |
|
25/02/2020 09:24 | |
ti ringrazio abcdef per la soluzione proposta
di principio potrebbe anche funzionare ma ho notato che sono obbligato a inserire nella colonna del click “C” dei valori su ogni cella della stessa colonna per definire il range di righe da copiare e questo mi creerebbe qualche problema per questo vorrei chiedere se possibile una variante se dovessi inserire una coppia di numeri uguali sulla colonna “A “ sarebbe possibile tramite codice identificare i 2 numeri uguali per determinare il range da copiare partendo dal click sulla colonna “C”?
Riallego il file con spiegazione
ringrazio e saluto
Simone |
| | Post: 2.254 | Registrato il: 21/03/2008
| Città: LOCATE VARESINO | Età: 76 | Utente Veteran | 2007 / 13 | | OFFLINE | |
|
25/02/2020 10:15 | |
ciao
da inserire nel modulo del foglio
Option Explicit
Dim CelleRange As Range
Private Sub worksheet_beforedoubleclick(ByVal target As Range, cancel As Boolean)
If Intersect(target, Range("B1:B1000,L1:L1000")) Is Nothing Then Exit Sub
Dim Nriga As Integer
If target.Column = 2 Then
For Nriga = target.Row To 1000
If Cells(Nriga, 3) = "" Then Exit For
Next
Set CelleRange = Range("C" & target.Row & ":J" & Nriga - 1)
Else
If CelleRange Is Nothing Then
MsgBox "Nessuna selezione"
Exit Sub
End If
CelleRange.Copy Destination:=Cells(target.Row, target.Column + 1)
Set CelleRange = Nothing
End If
End Sub
dimenticato serve il doppio click sulle celle di colonna B e L
[Modificato da locatevaresino 25/02/2020 10:17] Ciao da locate
excel 2007 / 13 |
| | Post: 92 | Registrato il: 03/05/2016
| Città: MILANO | Età: 50 | Utente Junior | Excel 2011 | | OFFLINE |
|
25/02/2020 10:29 | |
Grazie locate per la versione proposta ma riscontro sempre lo stesso problema che mi obbliga a inserire dei valori in questo caso in colonna "c" per poter determinare il range da copiare
mentre se si potesse realizzare come da ultimo file allegato sarei libero di inserire anche dei valori sparsi nel range da copiare
|
| | Post: 2.256 | Registrato il: 21/03/2008
| Città: LOCATE VARESINO | Età: 76 | Utente Veteran | 2007 / 13 | | OFFLINE | |
|
25/02/2020 11:00 | |
ciao
basta aggiungere delle variabili e fare due modifiche
non ho capito se la colonna C va riportata ho no, io ho riportato anche questa
Option Explicit
Dim CelleRange As Range
Private Sub worksheet_beforedoubleclick(ByVal target As Range, cancel As Boolean)
If Intersect(target, Range("C1:C1000,M1:M1000")) Is Nothing Then Exit Sub
Dim Nriga As Integer, FineRange As Integer
Dim valrange As Variant
If target.Column = 3 Then
valrange = Cells(target.Row, 1)
For Nriga = target.Row To 1000
If Cells(Nriga, 1) = valrange Then FineRange = Nriga
Next
Set CelleRange = Range("C" & target.Row & ":J" & FineRange)
Else
If CelleRange Is Nothing Then
MsgBox "Nessuna selezione"
Exit Sub
End If
CelleRange.Copy Destination:=Cells(target.Row, target.Column)
Set CelleRange = Nothing
End If
End Sub
penso che i riferimenti in colonna A tu li metta
Ciao da locate
excel 2007 / 13 |
| | Post: 93 | Registrato il: 03/05/2016
| Città: MILANO | Età: 50 | Utente Junior | Excel 2011 | | OFFLINE |
|
25/02/2020 12:28 | |
GRAZIE MILLE LOCATE
la macro funziona molto bene :-) avrei un ‘ ultimissima domanda se mi è permesso
se volessi copiare e incollare partendo dalla stessa colonna riservando le prime 100 righe per l’incolla e dalla 100 in avanti per la copia
esempio copiare al click sulla cella C120 e incollare al click sulla cella C19
ho provato a smanettare un po sui range della macro ma non ci sono riuscito :-(
una cosa che sarebbe per me utile ma solo se possibile ....che aggiunga nell' incolla anche il numero di righe copiate ( comunque per me è più prioritario risolvere la richiesta sopra indicata )
graziesissimo
Simone
[Modificato da melaverde74 25/02/2020 12:42] |
| | Post: 2.257 | Registrato il: 21/03/2008
| Città: LOCATE VARESINO | Età: 76 | Utente Veteran | 2007 / 13 | | OFFLINE | |
|
25/02/2020 12:56 | |
ciao
basta aggiungere un controllo ad un if
Option Explicit
Dim CelleRange As Range
Private Sub worksheet_beforedoubleclick(ByVal target As Range, cancel As Boolean)
If Intersect(target, Range("C1:C1000,M1:M1000")) Is Nothing Then Exit Sub
Dim Nriga As Integer, FineRange As Integer
Dim valrange As Variant
If target.Row > 100 And target.Column = 3 Then
valrange = Cells(target.Row, 1)
For Nriga = target.Row To 1000
If Cells(Nriga, 1) = valrange Then FineRange = Nriga
Next
Set CelleRange = Range("C" & target.Row & ":J" & FineRange)
Else
If CelleRange Is Nothing Then
MsgBox "Nessuna selezione"
Exit Sub
End If
CelleRange.Copy Destination:=Cells(target.Row, target.Column)
Set CelleRange = Nothing
End If
End Sub
in questo modo copia solo da riga 100 in giu' e riporta da riga 1 a 99 anche in colonna C
se vuoi annullare la colonna M basta che togli il riferimento alla colonna M
If Intersect(target, Range("C1:C1000")) Is Nothing Then Exit Sub
Ciao da locate
excel 2007 / 13 |
|
25/02/2020 13:07 | |
Visto lo sviluppo del post, non serve più (lo allego per altri utenti)
L'unica cosa che non capisco, non è meglio un semplice copia\incolla?
Comunque due esempi Foglio1 con bottone e foglio2 simile a quello precedente |
| | Post: 94 | Registrato il: 03/05/2016
| Città: MILANO | Età: 50 | Utente Junior | Excel 2011 | | OFFLINE |
|
25/02/2020 17:45 | |
Ringrazio tutti per gli interventi e soprattuto Locate per la valida soluzione.
Ho provato tutto il pomeriggio per vedere se riuscivo ad inserire in contemporanea anche le righe aggiungendo questo codice
CelleRange.Copy
Cells(target.Row, target.Column).Insert Shift:=xlDown
al posto di questo
CelleRange.Copy Destination:=Cells(target.Row, target.Column)
funziona ma solo in parte, perchè aggiunge le righe solo sul range copiato e non su tutta la larghezza del foglio. Qualcuno saprebbe dirmi dove sbaglio?
Ancora grazie di cuore a tutti per l’aiuto
Simone |
| | Post: 2.260 | Registrato il: 21/03/2008
| Città: LOCATE VARESINO | Età: 76 | Utente Veteran | 2007 / 13 | | OFFLINE | |
|
26/02/2020 00:00 | |
ciao
non ho capito questa istruzione per il tuo file a cosa serve
Cells(target.Row, target.Column).Insert Shift:=xlDown
cosa deve fare in sostanza quando tu incolli il range() copiato in precedenza???????
prova a vedere cosa fa l'istruzione ( Insert ) con help di VBA
Ciao da locate
excel 2007 / 13 |
| | Post: 95 | Registrato il: 03/05/2016
| Città: MILANO | Età: 50 | Utente Junior | Excel 2011 | | OFFLINE |
|
26/02/2020 09:10 | |
ciao Locate
In sostanza l’istruzione sarebbe servita per inserire un nuovo range appena copiato tra 2 range già presenti e incollati in precedenza , al momento dovrei prima inserire manualmente il numero di righe necessario per potere incollare il nuovo range, senza andrebbe a sovrapporsi a quello sottostante .Ancora meglio sarebbe se potessi dedicare il foglio 1 completo con solo funzione copia e il foglio 2 copleto solo con funzione incolla
saluti
Simone [Modificato da melaverde74 26/02/2020 10:01] |
| | Post: 2.261 | Registrato il: 21/03/2008
| Città: LOCATE VARESINO | Età: 76 | Utente Veteran | 2007 / 13 | | OFFLINE | |
|
26/02/2020 12:14 | |
ciao
per fare questo lavoro il file e le sub() vanno ristrutturate in diverso modo
per primo dobbiamo dichiarare variabili Public in un Modulo
secondo dobbiamo inserire nel foglio1 la sub() che seleziona
e nel foglio2 la sub che inserisce righe e incolla il range() selezionato
questi sempre riferito a Colonna C:C sia in foglio1 che foglio2
ti consiglio di studiarti i vari procedimenti
ti allego il file
[Modificato da locatevaresino 26/02/2020 12:15] Ciao da locate
excel 2007 / 13 |
| | Post: 96 | Registrato il: 03/05/2016
| Città: MILANO | Età: 50 | Utente Junior | Excel 2011 | | OFFLINE |
|
26/02/2020 12:55 | |
GRAZIE LOCATE É PERFETTA !!!
ora come da tuo consiglio cercherò di studiarmi il codice
Saluti
Simone |
|
|