Grazie Gerardo! 😀 Finalmente riesco a riprendere l'esercizio😅 Per sovrappiù ho aggiunto dopo la riga dell'Array questo ciclo per formattare le intestazioni: With ws.Range("A1:C1") .Interior.ColorIndex = 5 .Font.ColorIndex = 2 .Font.Bold = True End With e poi, dato che ho suddiviso le cifre del numero telefonico così xxx xxx xx xx nel foglio Database ho sfruttato il tuo ciclo For Next aggiungendo qiesta riga: .Cells(uRiga, i).NumberFormatLocal = cella.Offset(0, i -1).NumberFormatLocal per farmi restituire lo stesso formato anche negli altri fogli. A presto!
Ottimo come esercizio pratico per prendere esperienza con Vba, ma per risolvere molto più velocemente il problema consiglio a tutti di usare una Pivot, inserire in campo che si vuole come "condizione" nel filtro principale e poi andare nelle opzioni e poi andare a fare suddividere in base al filtro. Sì avranno tanti fogli excel quante sono i valori della condizione indicata.
Veramente istruttivo, mi sono appena iscritto, e ne approfitto. Eseguendo il codice, i numeri di telefono vengono inseriti in formato esponenziale (Pippo Milano 3,4E+09), nonostante tutte le celle di ogni foglio sono state settate in formato testo. Grazie
Complimenti Gerardo come sempre sei un grande!!!! Una volta creati i nuovi fogli si potrebbero esportare in PDF e inviare in un archivio dedicato e/o farli anche stampare direttamente 😉😉
Ottimo come sempre, si potrebbe implementare con una buona gestione degli errori ad esempio: cosa fare se c'è un nome nuovo per il quale non era stato previsto il foglio relativo? 😉
Ciao Cucù stessa osservazione fatta da Enzo (rubik72) qui sotto nei messaggi , forse farò un video per correggere l'errore oppure faro in modo che i fogli vengono generati dalla lista cosi non si dovrà correggere
Grande Gerardo, comunque secondo me si potrebbe rendere dinamica anche il numero di colonne. Gia nel post scorso avevo intuito più o meno che cosa facesse il tuo script. Ps si potrebbero creare fogli dinamicamente in base a i nomi della prima colonna, che cosa dici?
Ciao Elio, grazie per la tua condivisione, esatto si potrebbero creare dei foglio dinamicamente, comunque per quanto riguarda il numero di colonne lo reso dinmico con il ciclo For i 1 to 3 Next forse ti è sfuggito, un saluto
@@gerardozuccala intendevo for i =1 to ultimacolonna, ho provato a tradurla in javascript per i fogli google. Comunque sei un grande, grazie per i tuoi video sono stimolanti
@@gerardozuccala Esatto Gerardo .... Ecco qui una routine per creare i fogli necessari avendo all'inizio il solo Foglio1 con il database dei NOMI nella prima colonna: Sub GeneraFogli() Dim uRiga As Integer Dim Clic As Byte Dim Nome As String Dim n As Integer Dim ws As Worksheet Dim NuovoFoglio As Worksheet Application.ScreenUpdating = False uRiga = Sheets(1).[A999999].End(xlUp).Row For n = 2 To uRiga Clic = 0 Nome = Sheets(1).Cells(n, 1)
For Each ws In Worksheets If ws.Name = Nome Then Clic = 1 End If Next
If Clic = 0 Then Set NuovoFoglio = Worksheets.Add NuovoFoglio.Name = Nome Sheets(Nome).Move After:=Sheets(Sheets.Count) End If Next Foglio1.Activate Foglio1.Range("A1").Select Application.ScreenUpdating = True End Sub
Già che ci siamo mettiamo anche una SUB per Eliminare i Fogli ... così ci prende la SCIMMIA ed eseguiamo l'esercizio a ripetizione .... vero Gerardo??? Sub EliminaFogli() Dim uRiga As Integer Dim Nome As String Dim n As Integer Dim ws As Worksheet Application.ScreenUpdating = False uRiga = Sheets(1).[A999999].End(xlUp).Row For n = 2 To uRiga
Nome = Sheets(1).Cells(n, 1)
For Each ws In Worksheets If ws.Name = Nome Then Application.DisplayAlerts = False Sheets(Nome).Activate Sheets(Nome).Delete Application.DisplayAlerts = True End If Next
Next Foglio1.Activate Foglio1.Range("A1").Select Application.ScreenUpdating = False End Sub
Si potrebbe trovare un modo per evitare che vengano eliminati ogni volta i dati delle tabelle? Ad esempio facendo eliminare i dati già trascritti dalla tabella principale? Se sì come si può fare? Grazie mille e ottimo video
Sig. Gerardo buona sera. Ho provato a duplicare il codice del video #VBA 51 e tutto funziona bene se scrivo il codice in questa maniera dove A79 è l’ultima cella popolata. Mi potrebbe per favore spiegare come rendere dinamico questo riferimento mano mano che si popola il DB? Grazie For Each cella In Foglio1.Range("A2:A79") uRiga = Sheets(cella.Value).Range("A999999").End(xlUp).Row + 1
@@gerardozuccala non uno in particolare! Volevo chiederti solo se sai perché risulta vuota la parte sottostante il video che contiene la data di pubblicazione e i link posti in descrizione In ogni caso grazie
Grande Gerardo. Io integrerei la routine con la gestione degli errori, nel caso in cui il Foglio non esista (es. Nome=Paperino - Città=Firenze - Telefono=333123456 errore Debug 'il Foglio non esiste')
grazie Enzio per la tua preziosa condivisione, non avevo pensato, oltretutto come. puoi leggere qui sotto ci sono altri commenti che volti a migliorare ed implementare il codice, un saluto
Sub SPLITTA() Dim cella As Range Dim uRiga As Long Dim i As Byte For Each cella In Foglio1.Range("A3:A4") uRiga = Sheets(cella.Value).Range("A999999").End(xlUp).Row + 1 With Sheets(cella.Value) For i = 1 To 5 .Cells(uRiga, i) = cella.Offset(0, i - 1).Value Next i End With Next cella End Sub perchè mi da errore run time 9 uRiga = Sheets(cella.Value).Range("A999999").End(xlUp).Row + 1
tutto quello che farà in vba sarà
sempre bene accetto grazie Francesco
Un boccone alla volta ci permette di crescere nella comprensione del VBA. Grazie sig. Gerardo.
Grazie Gerardo! 😀
Finalmente riesco a riprendere l'esercizio😅
Per sovrappiù ho aggiunto dopo la riga dell'Array questo ciclo per formattare le intestazioni:
With ws.Range("A1:C1")
.Interior.ColorIndex = 5
.Font.ColorIndex = 2
.Font.Bold = True
End With
e poi, dato che ho suddiviso le cifre del numero telefonico così xxx xxx xx xx nel foglio Database ho sfruttato il tuo ciclo For Next aggiungendo qiesta riga:
.Cells(uRiga, i).NumberFormatLocal = cella.Offset(0, i -1).NumberFormatLocal
per farmi restituire lo stesso formato anche negli altri fogli.
A presto!
Fantastico!!! complimenti e grazie per la condivisione, un saluto
Sei davvero un maestro!
Ottimo come esercizio pratico per prendere esperienza con Vba, ma per risolvere molto più velocemente il problema consiglio a tutti di usare una Pivot, inserire in campo che si vuole come "condizione" nel filtro principale e poi andare nelle opzioni e poi andare a fare suddividere in base al filtro. Sì avranno tanti fogli excel quante sono i valori della condizione indicata.
Like+++
Grande Gerardo.
Video interessante come sempre
Ottimo video Gerardo .... il VBA è semplicemente fantastico.
Ciao Salvo, grazie mi fa piacere che ti è piaciuto, un saluto
Veramente istruttivo, mi sono appena iscritto, e ne approfitto. Eseguendo il codice, i numeri di telefono vengono inseriti in formato esponenziale (Pippo Milano 3,4E+09), nonostante tutte le celle di ogni foglio sono state settate in formato testo. Grazie
Complimenti Gerardo come sempre sei un grande!!!!
Una volta creati i nuovi fogli si potrebbero esportare in PDF e inviare in un archivio dedicato e/o farli anche stampare direttamente 😉😉
ciao Vittorio, non ci ho mai provato ma credo proprio di sì, credo che sono giusto in paio di righe di codice da aggiungere, un saluto
@@gerardozuccala spero che un giorno ci metti mano e scrivi le righe.
Comunque sempre grazie per l'immenso lavoro che fai....😀😀
Complimenti.....
grandissimo gerardo
Gherardo, quando ci porterai la funzione LAMBDA? sembra interessante!
Riga = Sheets("DataBase").Cells(Rows.Count, 1).End(xlUp).Row
For Each cella In Foglio1.Range("A2:A" & Riga)
Ottimo come sempre, si potrebbe implementare con una buona gestione degli errori ad esempio: cosa fare se c'è un nome nuovo per il quale non era stato previsto il foglio relativo? 😉
Ciao Cucù stessa osservazione fatta da Enzo (rubik72) qui sotto nei messaggi , forse farò un video per correggere l'errore oppure faro in modo che i fogli vengono generati dalla lista cosi non si dovrà correggere
👍
Grande Gerardo, comunque secondo me si potrebbe rendere dinamica anche il numero di colonne. Gia nel post scorso avevo intuito più o meno che cosa facesse il tuo script. Ps si potrebbero creare fogli dinamicamente in base a i nomi della prima colonna, che cosa dici?
Ciao Elio, grazie per la tua condivisione, esatto si potrebbero creare dei foglio dinamicamente, comunque per quanto riguarda il numero di colonne lo reso dinmico con il ciclo For i 1 to 3 Next forse ti è sfuggito, un saluto
@@gerardozuccala intendevo for i =1 to ultimacolonna, ho provato a tradurla in javascript per i fogli google. Comunque sei un grande, grazie per i tuoi video sono stimolanti
@@gerardozuccala Esatto Gerardo .... Ecco qui una routine per creare i fogli necessari avendo all'inizio il solo Foglio1 con il database dei NOMI nella prima colonna:
Sub GeneraFogli()
Dim uRiga As Integer
Dim Clic As Byte
Dim Nome As String
Dim n As Integer
Dim ws As Worksheet
Dim NuovoFoglio As Worksheet
Application.ScreenUpdating = False
uRiga = Sheets(1).[A999999].End(xlUp).Row
For n = 2 To uRiga
Clic = 0
Nome = Sheets(1).Cells(n, 1)
For Each ws In Worksheets
If ws.Name = Nome Then
Clic = 1
End If
Next
If Clic = 0 Then
Set NuovoFoglio = Worksheets.Add
NuovoFoglio.Name = Nome
Sheets(Nome).Move After:=Sheets(Sheets.Count)
End If
Next
Foglio1.Activate
Foglio1.Range("A1").Select
Application.ScreenUpdating = True
End Sub
Già che ci siamo mettiamo anche una SUB per Eliminare i Fogli ... così ci prende la SCIMMIA ed eseguiamo l'esercizio a ripetizione .... vero Gerardo???
Sub EliminaFogli()
Dim uRiga As Integer
Dim Nome As String
Dim n As Integer
Dim ws As Worksheet
Application.ScreenUpdating = False
uRiga = Sheets(1).[A999999].End(xlUp).Row
For n = 2 To uRiga
Nome = Sheets(1).Cells(n, 1)
For Each ws In Worksheets
If ws.Name = Nome Then
Application.DisplayAlerts = False
Sheets(Nome).Activate
Sheets(Nome).Delete
Application.DisplayAlerts = True
End If
Next
Next
Foglio1.Activate
Foglio1.Range("A1").Select
Application.ScreenUpdating = False
End Sub
Perché le regole non rimangono salvate una volta chiuso il file?
Si potrebbe trovare un modo per evitare che vengano eliminati ogni volta i dati delle tabelle? Ad esempio facendo eliminare i dati già trascritti dalla tabella principale? Se sì come si può fare? Grazie mille e ottimo video
Sig. Gerardo buona sera.
Ho provato a duplicare il codice del video #VBA 51 e tutto funziona bene se scrivo il codice in questa maniera dove A79 è l’ultima cella popolata.
Mi potrebbe per favore spiegare come rendere dinamico questo riferimento mano mano che si popola il DB? Grazie
For Each cella In Foglio1.Range("A2:A79")
uRiga = Sheets(cella.Value).Range("A999999").End(xlUp).Row + 1
Help
Da circa due settimane,o piu, sotto i video non vedo i link che poni in descrizione e così di tutti i canali Non capisco perché !
Ciao, Quale link ti serve?
@@gerardozuccala non uno in particolare! Volevo chiederti solo se sai perché risulta vuota la parte sottostante il video che contiene la data di pubblicazione e i link posti in descrizione
In ogni caso grazie
Grande Gerardo. Io integrerei la routine con la gestione degli errori, nel caso in cui il Foglio non esista (es. Nome=Paperino - Città=Firenze - Telefono=333123456 errore Debug 'il Foglio non esiste')
grazie Enzio per la tua preziosa condivisione, non avevo pensato, oltretutto come. puoi leggere qui sotto ci sono altri commenti che volti a migliorare ed implementare il codice, un saluto
È un vero peccato non poter più assistere alle tue “lezioni”. Hai definitivamente abbandonato questo tuo impegno o ti rivedremo?
Le chiedo scusa, credo di aver risolto cosi
Sub SPLITTA()
Dim cella As Range
Dim uRiga As Long
Dim i As Byte
For Each cella In Foglio1.Range("A3:A4")
uRiga = Sheets(cella.Value).Range("A999999").End(xlUp).Row + 1
With Sheets(cella.Value)
For i = 1 To 5
.Cells(uRiga, i) = cella.Offset(0, i - 1).Value
Next i
End With
Next cella
End Sub
perchè mi da errore run time 9 uRiga = Sheets(cella.Value).Range("A999999").End(xlUp).Row + 1