VBA MACRO: Estendere selezione a destra, copiare solo valori in basso

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
sputnik_r
00lunedì 14 maggio 2018 12:29
Buongiorno.

Ho questa macro che mi crea una nuova riga copiando le formule e poi mi lascia la selezione nella cella della 2à colonna:

Sub Inserisci_Righe()
'
' PROVA Macro
'


rig = ActiveCell.Row
Rows(rig).Select
Selection.Copy
Rows(rig + 1).Select
Selection.Insert Shift:=xlDown
Cells(rig - 0, 2).Select

End Sub


Proprio da quella cella vorrei estendere la selezione a destra di 6 celle, copiare solo i valori e la formattazione e non le formule e infine incollare il tutto nelle celle appena create subito sotto.


Grazie in anticipo per gli aiuti.


Avete consigli?
raffaele1953
00lunedì 14 maggio 2018 14:50
Dovrebbe essere..., però sarebbe meglio avere una riga master
Intendo, se la prima riga ci fosse solo la formattazione, copy ed inserisci quella riga. Dopo incolli i valori.... Sotto comunque vedi per 6 colonne + le due righe per la formattazione e dopo quella dei valori ed risparmi una riga VBA
vb
Sub Inserisci_Righe()
Dim rig As Long
rig = ActiveCell.Row
Range(Cells(rig, 1), Cells(rig, 6)).Copy
Range(Cells(rig + 1, 1), Cells(rig + 1, 6)).Insert Shift:=xlDown
Range(Cells(rig + 1, 1), Cells(rig + 1, 6)).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
Range(Cells(rig + 1, 1), Cells(rig + 1, 6)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub
sputnik_r
00lunedì 14 maggio 2018 17:05
Re:
raffaele1953, 14/05/2018 14.50:

Dovrebbe essere..., però sarebbe meglio avere una riga master
Intendo, se la prima riga ci fosse solo la formattazione, copy ed inserisci quella riga. Dopo incolli i valori.... Sotto comunque vedi per 6 colonne + le due righe per la formattazione e dopo quella dei valori ed risparmi una riga VBA
vb
Sub Inserisci_Righe()
Dim rig As Long
rig = ActiveCell.Row
Range(Cells(rig, 1), Cells(rig, 6)).Copy
Range(Cells(rig + 1, 1), Cells(rig + 1, 6)).Insert Shift:=xlDown
Range(Cells(rig + 1, 1), Cells(rig + 1, 6)).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
Range(Cells(rig + 1, 1), Cells(rig + 1, 6)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub




Ti ringrazio davvero, sento che ci siamo vicini ed è quasi perfetto ora sto provando ad apportare piccole modifiche per ottenere quello che voglio.


Purtroppo al momento mi sposta in basso solo quelle celle copiando la parte che mi interessa meno due celle a dx...ma non mi sposta in basso e copia tutte le altre formule sulla stessa riga che arrivano fino alla colonna U.


Ora provo a pasticciare un po'....

sputnik_r
00lunedì 14 maggio 2018 17:13
allego immagine per vedere di farmi capire meglio
il codice che ho postato nel 1° messaggio mi crea una nuova riga completa come serve a me, poi dovrebbe subentrare il tuo che copia la riga del calendario senza formule e lasciando tutto così.

Hai voglia di provare? Ci siamo quasi, io non credo di riuscirci am sento che siamo vicini...

grazie
sputnik_r
00lunedì 14 maggio 2018 17:23
Forse ci siamo...grazie a te.
Devo fare un po' di prove...ho cambiato solo quel 6 in 9 nelle varie righe e aggiunto il tuo codice...pare proprio sia perfetto.


Sub Inserisci_Righe()
'
' AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Macro
'


rig = ActiveCell.Row
Rows(rig).Select
Selection.Copy
Rows(rig + 1).Select
Selection.Insert Shift:=xlDown
Cells(rig - 0, 2).Select



'Dim rig As Long
rig = ActiveCell.Row
Range(Cells(rig, 1), Cells(rig, 9)).Copy
Range(Cells(rig + 1, 1), Cells(rig + 1, 9)).Insert Shift:=xlDown
Range(Cells(rig + 1, 1), Cells(rig + 1, 9)).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range(Cells(rig + 1, 1), Cells(rig + 1, 9)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
sputnik_r
00lunedì 14 maggio 2018 17:54
no...non ci siamo ancora...
adesso le formule hanno mantenuto i riferimenti alle celle di prima...invece devono far riferimento alla riga stessa a sinistra.

raffaele1953
00martedì 15 maggio 2018 00:00
Di norma si allega un files d'esempio senza dati sensibili.
Per quanto hai richiesto, ho fatto il possibile senza vedere nulla. Vedendo le foto hai ragione nell'inserire righe intere.
Il codice non cambia, invece di Range(Cells(rig, 1), Cells(rig, 6)).
Diventa Rows(rig).copy e dopo le altre due che copiano formattazione e dati
sputnik_r
00martedì 15 maggio 2018 06:56
Re:
raffaele1953, 15/05/2018 00.00:

Di norma si allega un files d'esempio senza dati sensibili.
Per quanto hai richiesto, ho fatto il possibile senza vedere nulla. Vedendo le foto hai ragione nell'inserire righe intere.
Il codice non cambia, invece di Range(Cells(rig, 1), Cells(rig, 6)).
Diventa Rows(rig).copy e dopo le altre due che copiano formattazione e dati





Buongiorno, in effetti hai ragione, ho provveduto.


Se provi a inserire righe direttamente da quel pulsante e in quella posizione, vedrai che la data a dx in data assenze non sarà più allineata con la data della colonna B ed è un problema perché le formule a DX considerano la data in questa colonna data assenze.. Io ora avrei risolto grossolanamente, mettendo l'istruzione alla fine che ripristina i riferimenti di quella colonna, dopo aver aggiunto le righe che possono essere anche 6/7 per ogni data...


Se hai un metodo migliore da inserire direttamente in quel codice che mi hai dato inizialmente, preferisco. Grazie.


raffaele1953
00martedì 15 maggio 2018 13:12
Il Tuo files pesa oltre 1mg. Non capisco cosa serva la colonna A?
Selezioni la colonna B. Formattazione condizionale =E(B1<>"";GIORNO.SETTIMANA(B1;2)=7)
Pertanto nel VBA, la riga della Formattazione non esiste più (inoltre VBA solo per le colonne A/Z)
vb
Sub Inserisci_Righe()
Dim rig As Long
rig = ActiveCell.Row
Range(Cells(rig, 1), Cells(rig, 26)).Copy
Range(Cells(rig + 1, 1), Cells(rig + 1, 26)).Insert Shift:=xlDown
Range(Cells(rig + 1, 1), Cells(rig + 1, 26)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

Ps. Tutto questo per dei turni, noto un particolare sulle colonne C/D/E/F, dopo aver assegnato i turni alla domenica=31-12-2017
Sulle righe sotto ci sono dei vari =cella(), mà non intravedo il senso logico sembrano messe a casaccio.
Oppure il Vostro fabbisogno, fà si che quando si cambia turno esiste una procedura giusta?
sputnik_r
00martedì 15 maggio 2018 15:33
Facciamo un 6/4 per 8 mesi ca. Poi quando si va in ferie una sq manca sempre e quindi lì si fa 6/2
2 mattini
2 pomeriggi
2 notti

Ciclo continuo.

Ma questo serve per le sostituzioni. .

In un giorno possono mancare 5/7 persone max per motivi diversi...un casotto...

Ogni tanto ci dimentichiamo qualcosa...


sputnik_r
00martedì 15 maggio 2018 15:34
Ti ringrazio tanto e appena posso... provo le tue soluzioni e ti faccio sapere.



sputnik_r
00martedì 15 maggio 2018 15:59
Re:
raffaele1953, 15/05/2018 13.12:

Il Tuo files pesa oltre 1mg. Non capisco cosa serva la colonna A?
Selezioni la colonna B. Formattazione condizionale =E(B1<>"";GIORNO.SETTIMANA(B1;2)=7)
Pertanto nel VBA, la riga della Formattazione non esiste più (inoltre VBA solo per le colonne A/Z)
vb
Sub Inserisci_Righe()
Dim rig As Long
rig = ActiveCell.Row
Range(Cells(rig, 1), Cells(rig, 26)).Copy
Range(Cells(rig + 1, 1), Cells(rig + 1, 26)).Insert Shift:=xlDown
Range(Cells(rig + 1, 1), Cells(rig + 1, 26)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

Ps. Tutto questo per dei turni, noto un particolare sulle colonne C/D/E/F, dopo aver assegnato i turni alla domenica=31-12-2017
Sulle righe sotto ci sono dei vari =cella(), mà non intravedo il senso logico sembrano messe a casaccio.
Oppure il Vostro fabbisogno, fà si che quando si cambia turno esiste una procedura giusta?




Ho mezz'ora..ora provo.

sputnik_r
00martedì 15 maggio 2018 16:08
Purtroppo non funziona...
avevo già provato io a includere più colonne a dx...

ma così facendo mi fa scalare le formule a dx che cos' facendo non funzionano più...

In ogni giorno immesso/aggiunto/duplicato viene immesso un nuovo assente per lo stesso giorno..

quelle formule calcolano:

1à se la data è passata rispetto oggi

2 se mancano meno di 4 gg (sostituzione urgente)

3 sostituzione da farsi tra più di 4 giorni "sostituzione da tenere a mente" per il futuro

Inoltre serve l'allarme solo se il sostituto non è ancora stato trovato.

E un diverso alert se è passato ma è rimasto scoperto..per sapere quanti scoperti in un mese/anno ecc


non essendo capace a includere tutte queste variabili in una sola formula/cella mi sono aggiustato con quell'espediente attribuendo dei numeri per ogni "VERO o FALSO" restituito dalla formula
sputnik_r
00martedì 15 maggio 2018 16:13
Re: Purtroppo non funziona...
sputnik_r, 15/05/2018 16.08:

avevo già provato io a includere più colonne a dx...

ma così facendo mi fa scalare le formule a dx che cos' facendo non funzionano più...

In ogni giorno immesso/aggiunto/duplicato viene immesso un nuovo assente per lo stesso giorno..

quelle formule calcolano:

1à se la data è passata rispetto oggi

2 se mancano meno di 4 gg (sostituzione urgente)

3 sostituzione da farsi tra più di 4 giorni "sostituzione da tenere a mente" per il futuro

Inoltre serve l'allarme solo se il sostituto non è ancora stato trovato.

E un diverso alert se è passato ma è rimasto scoperto..per sapere quanti scoperti in un mese/anno ecc


non essendo capace a includere tutte queste variabili in una sola formula/cella mi sono aggiustato con quell'espediente attribuendo dei numeri per ogni "VERO o FALSO" restituito dalla formula




immagine per capire a quali formule mi riferisco... lì ora compaiono dei numeri copiati..ok per calendario..ma non per formule...

sputnik_r
00martedì 15 maggio 2018 16:19
Praticamente io mi sono avvicinato di più con questa (tua modificata)ma...
...

è una roba che fa pietà e inoltre scommetto che ha un fottio di righe inutili...


devo ancora testarla bene...perché non ho avuto tempo ma mi sembra mi lasci il foglio come voglio io..

Avevo spostato colonne però...



Sub Inserisci_Righe()
'

Dim rig As Long
rig = ActiveCell.Row
Range(Cells(rig, 1), Cells(rig, 8)).Copy
Range(Cells(rig + 1, 1), Cells(rig + 1, 8)).Insert Shift:=xlDown
Range(Cells(rig + 1, 1), Cells(rig + 1, 8)).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range(Cells(rig + 1, 1), Cells(rig + 1, 8)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False



Range("I2").Select
Selection.Copy
Range("I5:I536").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWindow.ScrollRow = 518
ActiveWindow.ScrollRow = 507
ActiveWindow.ScrollRow = 503
ActiveWindow.ScrollRow = 492
ActiveWindow.ScrollRow = 474
ActiveWindow.ScrollRow = 459
ActiveWindow.ScrollRow = 445
ActiveWindow.ScrollRow = 423
ActiveWindow.ScrollRow = 404
ActiveWindow.ScrollRow = 382
ActiveWindow.ScrollRow = 360
ActiveWindow.ScrollRow = 342
ActiveWindow.ScrollRow = 320
ActiveWindow.ScrollRow = 302
ActiveWindow.ScrollRow = 280
ActiveWindow.ScrollRow = 232
ActiveWindow.ScrollRow = 214
ActiveWindow.ScrollRow = 189
ActiveWindow.ScrollRow = 163
ActiveWindow.ScrollRow = 137
ActiveWindow.ScrollRow = 90
ActiveWindow.ScrollRow = 64
ActiveWindow.ScrollRow = 46
ActiveWindow.ScrollRow = 9
ActiveWindow.ScrollRow = 2
Range("B2").Select

End Sub
raffaele1953
00martedì 15 maggio 2018 18:56
MSG_1>>>copiare solo i valori e la formattazione e non le formule
OK, fatto con selezione di 6 colonne

MSG_6>>>no...non ci siamo ancora...
OK, fatto con selezione delle colonne A/Z

MSG_13>>>ma così facendo mi fa scalare le formule a dx
Ridesideri le formule??? Che se non erro non ti servono (casomai solo Formattazione Condizionale)

MSG_14>>>AVVISI!!!
Formula che non hai inserito nell'allegato

Mi spieghi per quale motivo decidi d'aggiungere una riga?
L'allegato dimostra solo cosa sia una tabella. Prova aggiungere righe e nota cosa fà e nota quanto pesa...
Se poi perdi 5 minuti a spiegare per bene l'uso che desideri farne in italianesco, forse qualcuno Ti capisce e propone una soluzione.
Intendo passo-passo, ex mercoledì-07-03-2018 manca Roby, in K metti un paio di nomi e quando in L , avrai deciso il nome cosa dovrà succedere?
sputnik_r
00martedì 15 maggio 2018 20:24
Re:
raffaele1953, 15/05/2018 18.56:

MSG_1>>>copiare solo i valori e la formattazione e non le formule
OK, fatto con selezione di 6 colonne

MSG_6>>>no...non ci siamo ancora...
OK, fatto con selezione delle colonne A/Z

MSG_13>>>ma così facendo mi fa scalare le formule a dx
Ridesideri le formule??? Che se non erro non ti servono (casomai solo Formattazione Condizionale)

MSG_14>>>AVVISI!!!
Formula che non hai inserito nell'allegato

Mi spieghi per quale motivo decidi d'aggiungere una riga?
L'allegato dimostra solo cosa sia una tabella. Prova aggiungere righe e nota cosa fà e nota quanto pesa...
Se poi perdi 5 minuti a spiegare per bene l'uso che desideri farne in italianesco, forse qualcuno Ti capisce e propone una soluzione.
Intendo passo-passo, ex mercoledì-07-03-2018 manca Roby, in K metti un paio di nomi e quando in L , avrai deciso il nome cosa dovrà succedere?



Meglio di come lo spiego in questa immagine non so come spiegarlo... spero di essere riuscito a spiegarmi.



sputnik_r
00martedì 15 maggio 2018 20:30
Re: Re:
sputnik_r, 15/05/2018 20.24:



Meglio di come lo spiego in questa immagine non so come spiegarlo... spero di essere riuscito a spiegarmi.







Il file non lo avevo con me questo...ora eccolo, completo come da foto

raffaele1953
00martedì 15 maggio 2018 21:37
A spiegarsi meglio, si ottengono vantaggi sia io che Tu
Questa fà un piccolo controllo (sulle colonne J ed M, se non sono scritte non fà nulla)
Nel VBA ci sono alcune spiegazioni, se il controllo colonna M non lo vuoi, a destra c'è la riga solo per J. Prova se va bene
vb
Sub Inserisci_Righe()
Dim rig As Long
rig = ActiveCell.Row
'controllo se sono scritte
If Cells(rig, 10) <> "" And Cells(rig, 13) <> "" Then ' oppure If Cells(rig, 10) <> "" Then'non controlla M
Range(Cells(rig + 1, 1), Cells(rig + 1, 26)).Insert Shift:=xlDown
Range(Cells(rig, 1), Cells(rig, 2)).Copy 'solo la data, oppure anche i turni Range(Cells(rig, 1), Cells(rig, 8)).Copy
Cells(rig + 1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'ora le colonne N/T
Range(Cells(rig, 14), Cells(rig, 20)).Copy
Cells(rig + 1, 14).PasteSpecial 'comprese le formule
Else
MsgBox "non posso aggiungere"
End If
End Sub
sputnik_r
00martedì 15 maggio 2018 21:47
Grazie appena riesco lo provo domani. Buona serata.
sputnik_r
00mercoledì 16 maggio 2018 06:35
Re:
raffaele1953, 15/05/2018 21.37:

A spiegarsi meglio, si ottengono vantaggi sia io che Tu
Questa fà un piccolo controllo (sulle colonne J ed M, se non sono scritte non fà nulla)
Nel VBA ci sono alcune spiegazioni, se il controllo colonna M non lo vuoi, a destra c'è la riga solo per J. Prova se va bene
vb
Sub Inserisci_Righe()
Dim rig As Long
rig = ActiveCell.Row
'controllo se sono scritte
If Cells(rig, 10) <> "" And Cells(rig, 13) <> "" Then ' oppure If Cells(rig, 10) <> "" Then'non controlla M
Range(Cells(rig + 1, 1), Cells(rig + 1, 26)).Insert Shift:=xlDown
Range(Cells(rig, 1), Cells(rig, 2)).Copy 'solo la data, oppure anche i turni Range(Cells(rig, 1), Cells(rig, 8)).Copy
Cells(rig + 1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'ora le colonne N/T
Range(Cells(rig, 14), Cells(rig, 20)).Copy
Cells(rig + 1, 14).PasteSpecial 'comprese le formule
Else
MsgBox "non posso aggiungere"
End If
End Sub



Mi pare proprio quel che cercavo così fa esattamente quel che intendevo io, l'unica cosa, se possibile, che in j (cognome richiedente) sarebbe bello mi aggiungesse la cella vuota nella nuova riga visto che tanto il nominativo da scrivere sarebbe diverso..se possibile altrimenti grasso che cola anche così.

Grazie.


vb

Sub Inserisci_Righe()
Dim rig As Long
rig = ActiveCell.Row
'controllo se sono scritte
'If Cells(rig, 10) <> "" And Cells(rig, 13) <> "" Then

' oppure

If Cells(rig, 10) <> "" Then 'non controlla M

Range(Cells(rig + 1, 1), Cells(rig + 1, 26)).Insert Shift:=xlDown

'Range(Cells(rig, 1), Cells(rig, 2)).Copy 'solo la data

'oppure anche i turni
Range(Cells(rig, 1), Cells(rig, 10)).Copy
Cells(rig + 1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

'ora le colonne N/T
Range(Cells(rig, 14), Cells(rig, 20)).Copy
Cells(rig + 1, 14).PasteSpecial 'comprese le formule
Else
MsgBox "non posso aggiungere"
End If
End Sub

raffaele1953
00mercoledì 16 maggio 2018 12:14
'oppure anche i turni
Range(Cells(rig, 1), Cells(rig, 8)).Copy ...oppure... Range(Cells(rig, 1), Cells(rig, 9)).Copy
sputnik_r
00mercoledì 16 maggio 2018 13:53
Grazie Raffaele appena riesco provo...
sputnik_r
00mercoledì 16 maggio 2018 15:28
Re:
raffaele1953, 16/05/2018 12.14:

'oppure anche i turni
Range(Cells(rig, 1), Cells(rig, 8)).Copy ...oppure... Range(Cells(rig, 1), Cells(rig, 9)).Copy




No, facendo così con 9 dopo il 1° mi dice che non può aggiungere..
sputnik_r
00mercoledì 16 maggio 2018 16:43
ora che ho tempo...
ho utilizzato anche questa, non butto via nulla... [SM=x423026]


=E(B5<>"";GIORNO.SETTIMANA(B5;2)=7)


sputnik_r
00mercoledì 16 maggio 2018 16:46
ma..
secondo me dovremmo chiudere quel codice facendo tornare la selezione nella cella "inserisci richiedente" facendogli cancellare anche l'eventuale duplicato al suo interno...tanto dovremo partire da lì a compilare la nuova riga/richiedente.
sputnik_r
00mercoledì 16 maggio 2018 17:37
forse fino alla selezione ci sono arrivato..
così:

Cells(rig + 1, 10).Select

Ora manca solo che cancelli.
sputnik_r
00mercoledì 16 maggio 2018 17:51
Re: forse fino alla selezione ci sono arrivato..
sputnik_r, 16/05/2018 17.37:

così:

Cells(rig + 1, 10).Select

Ora manca solo che cancelli.




Ok, è perfetto... per ora un saluto e grazie. Mi sa che ci vediamo presto però.. con una nuova discussione.


Cells(rig + 1, 10).Select
Selection.ClearContents

raffaele1953
00mercoledì 16 maggio 2018 18:37
Non penso proprio. Sei troppo confusionario...e non Ti spieghi bene
Di norma Io metto un >>>testo scritto dall'utente
Non "Quoto" mai i messaggi e se perdi altri 5 minuti a rileggere "tutto" questo post.
Mi saprai dire, se un nuovo "Utente", ci capisce un qualcosa???

>>>Cells(rig + 1, 10).Select
>>>Selection.ClearContents
Se a Te va bene = OK, mà io ho già creato una riga senza nulla
sputnik_r
00giovedì 17 maggio 2018 00:08
Ora che funziona tutto ho un problema Raffaele.

Non funziona quando proteggo il foglio...

Domani posto file e foto.

Buona notte
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 18:52.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com