Condividi:        

Macro a contenuto variabile

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Re: Macro a contenuto variabile

Postdi Ricky0185 » 11/04/25 16:03

Sei un fenomeno, un alieno, però, come si dice "Attacche l'asene dova vò lu patrêne" le cose sono cambiate. Ora il controllo deve essere eseguito, se lo facciamo oggi 11 Aprile, da Gennaio 2024 all'11 Aprile del 2024 con da Gennaio 2025 all'11 Aprile 2025. Cioè occorre prima importare/scaricare 2 file, uno con i dati da Gennaio 2024 all'11 Aprile del 2024 ed uno con i dati dello stesso periodo ma del 2025. Ovvio che se faccio la verifica in giugno i periodi vanno da Gennaio all'XX Giugno sia del 2024 che del 2025.Non so se si può fare qualcosa con la tua UF, sarebbe ultraterreno, ovviamente una volta scaricati i due periodi che arrivano in csv. Io sto cercando di raggiungere il traguardo scaricandoli in una Dir, poi con macro unica vengono aperti+testo in colonna+Formattazioni varie+le solite 3 colonne con i risultati del confronto e relativa differenza. Sto incontrando qualche difficoltà, ma non ti voglio rompere gli zebedei adesso, magari dopo svariati tentativi.
Ciao SuperGuru
R
Ricky0185
Utente Senior
 
Post: 423
Iscritto il: 10/12/19 20:38

Sponsor
 

Re: Macro a contenuto variabile

Postdi Ricky0185 » 12/04/25 09:56

Ed eccomi, come al solito, a chiederti un consiglio. Come dicevo, scarico in una cartella i due files del periodo 1 Gennaio all’11 Aprile sia del 2024 che del 2025. Poi attivo la macro che in un sol colpo li apre ambedue e poi separatamente li formatto, larghezza colonne, colori, etc. il tutto registrando le operazioni (che poi aggiungo alla macro dell'apertura). A questo punto li unisco in unico foglio per poi avere le tre colonne dei raffronti e della differenze (anche qui aggiungo le istruzioni alla macro). Qui il problema: attivando un qualsiasi filtro su uno dei due riepiloghi 2024 o 2025 riportati su unico foglio, per un venditore piuttosto che per un brand, un riepilogo
Immagine
risulta corretto mentre l’altro no, ovviamente non corrispondendo le righe. Ho provato tutte le divisioni foglio suggerite, ma niente da fare. Inoltre il totale in testa alle colonne non viene aggiornato, ma questo poco importa, a me servono i dati del raffronto anche nascondendo le colonne intermedie per poter entrare nello schermo.
Allora ho diviso i due riepiloghi in due fogli, tutte le operazioni su ciascun foglio come sopra, così da poter filtrare a piacimento ciascun foglio con lo stesso nome o stessa brand. Ma per la comparazione e differenza ho dovuto aprire un terzo foglio con collegamenti ipertestuali. Il tutto raccolto con un'unica macro, che però dopo aver aperto i due files ed aver compilato correttamente il primo foglio si ferma immobile senza nessun messaggio, dimenticandosi del secondo foglio e di quello della comparazione, che è poi quello che mi serve.
Ma se hai altri suggerimenti o soluzioni tipo la UF od altro ……
Ti saluto e Buon WE
R
Ricky0185
Utente Senior
 
Post: 423
Iscritto il: 10/12/19 20:38

Re: Macro a contenuto variabile

Postdi Ricky0185 » 12/04/25 10:34

Dimenticavo la macro che spacchetta i 2 files scaricati in una cartella apposita. Va inserita in un nuovo file e lanciata da li
Codice: Seleziona tutto
Sub Copia_piu_file_da_cartella()
    Dim fDialog As FileDialog
    Dim i As Integer
    Dim uR As Long
    Dim uR1 As Long
    Dim WK As Workbook
    Dim WK1 As Workbook
    Dim sh As Worksheet
    Dim sh1 As Worksheet
    Dim fs As Object
    Dim Fold As Object
    Dim Nomefile As Object
    Dim cartella As Variant
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
    MsgBox "Scegli la cartella con i files!", vbInformation, "AVVISO"
    With fDialog
        .Show
        On Error GoTo esci
        cartella = .SelectedItems(1)
    End With
    Set WK = ThisWorkbook
    Set sh = WK.Worksheets(1)
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set Fold = fs.getfolder(cartella)
    Set cartella = Fold.Files
    For Each Nomefile In cartella
        Set WK1 = Workbooks.Open(Nomefile)
        Set sh1 = WK1.Worksheets(1)
       '----------------'
       sh1.Activate
       0Call Macro1
       '----------------'
       'WK1.Close SaveChanges:=False
        'WK1.Close SaveChanges:=True
    Next
    WK.Save
    MsgBox "Fatto!", vbInformation, "NOTIFICA"
    Set fs = Nothing
    Set cartella = Nothing
    Set Fold = Nothing
esci:
    Set fDialog = Nothing
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub
Ricky0185
Utente Senior
 
Post: 423
Iscritto il: 10/12/19 20:38

Re: Macro a contenuto variabile

Postdi Anthony47 » 12/04/25 12:06

Su messaggio di ieri:
La mia userform elenca i periodi disponibili e lascia all’utente la scelta di cosa comparare rispetto a cosa, senza questionare sulle scelte fatte.

Hai fatto bene a importare i due csv su fogli separati, dove puoi filtrare quello che ti serve.
Probabilmente hai fatto male a “collegare” il terzo foglio ai primi due. Secondo me sul terzo foglio devi “copiare” i dati degli altri due.
Allo scopo potrebbe tornarti utile creare una macro di “Worksheet_Activate” inserita sul modulo vba del terzo foglio, che quando scatta (cioe’ quando quel foglio viene attivato”) popola Foglio3 copiandovi i dati da Foglio1/2
Non conoscendo in dettaglio la struttura dei dati e l’obiettivo delle indagini non so dare suggerimenti su come garantire che i dati di Foglio1 e Foglio2 vengano presentati correttamente su Foglio3
Avatar utente
Anthony47
Moderatore
 
Post: 19666
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro a contenuto variabile

Postdi Ricky0185 » 12/04/25 12:29

Ti è sfuggito che nel post delle 8.56 ci sono i 2 file scaricabili cliccando sulle date. Verngono spacchettati ed aperti con la macro del mio post precdente. A questa macro poi aggiungo, ricavate da registrazione, le istruzioni per la formattazione, copia su foglio unico dei 2 file, etc, etc.
Ricky0185
Utente Senior
 
Post: 423
Iscritto il: 10/12/19 20:38

Re: Macro a contenuto variabile

Postdi Anthony47 » 13/04/25 15:37

La Sub Copia_piu_file_da_cartella che hai pubblicato si limita ad “aprire” i file csv, poi una “Macro1” dovrebbe fare un altro lavoro che non so quale è.
L’ultimo layout su cui avevo lavorato e’ quello contenuto nel tuo file “parziale.xls”, non so se e’ ancora attuale.

In questa discussione secondo me hai detto poco di come sono i dati (quelli di partenza mi sembrano dei csv disorganizzati, cioè non organizzati né per Sede né per Agente) e di che cosa vuoi fare. Le mia ultima proposta (quella con la Userform), ma anche quella prima che lavorava con formule presuppongono dei dati allineati coerentemente in riga (una Sede? Un Agente? Altro?), ma partendo da quei csv ci dovrebbe essere dietro un lavoro pesante di filtro e allineamento di cui non hai mai parlato.

Forse e’ il caso di chiudere questa discussione (non stiamo piu’ parlando infatti di una “Macro a contenuto variabile”) e ripartire daccapo: quali sono i dati di partenza, che cosa vuoi calcolare, elenco delle cose già risolte.
Avatar utente
Anthony47
Moderatore
 
Post: 19666
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro a contenuto variabile

Postdi Ricky0185 » 16/04/25 21:20

Buonasera, darei 1 fantastiliardo per interpretare le istruzioni del file che con una userform ti permette di confrontare i dati di due colonne con intestazioni di date diverse, ma soprattutto per non rompere ulteriormente gli zebedei di Anthony. In sostanza spuntando sulla sinistra della UF il periodo più remoto, oltre a non accettare la scelta, compare l’avviso
Immagine
Dalle prove fatte sembrerebbe che l’area di ricerca sia limitata in termini di righe poiché già con fogli di 600 righe compare l’avviso ed il debug evidenzia
Immagine
Per chiarire, sulla UF
Immagine
quando il file è composto da 600 o più righe non viene accettata la spunta sulle prime due caselle in basso a sinistra (date più remote). I file sono composti normalmente da 800-1400 righe e con l’andar del tempo le righe sono destinate ad aumentare (speriamo).
Come sempre ringrazio per l’aiuto, con la promessa che, una volta risolto quest'ostacolo, non stresserò più con questo argomento.
Un saluto
R
Ricky0185
Utente Senior
 
Post: 423
Iscritto il: 10/12/19 20:38

Re: Macro a contenuto variabile

Postdi Anthony47 » 16/04/25 23:31

L'oggetto ListBox ha un difetto che Microsoft non vuole risolvere: spesso e volentieri l'ultimo item in elenco non viene visualizzato (si capisce che c'e', perche' la scrollbar non e' arrivata in fondo, ma non si riesce a farlo visualizzare)
La saggezza popolana dice che lavorando su IntegralHeight e su TextAlign si riesce a ottenere il risultato; ma evidentemente non e' sempre vero.
Per tagliare la testa al toro, pertanto ho modificato il codice della UserForm_Initialize per aggiungere una ulteriore voce vuota all'elenco, così alla peggio e' questa voce vuota che non viene visualizzata.
Viste inoltre le tue lamentele ho aggiunto lauti commenti al codice della UserForm_Initialize, e ho aggiunto qualche linea utile al debug; il nuovo codice:
Codice: Seleziona tutto
Private Sub UserForm_Initialize()
Dim LaCol As Long, HLUbound As Long, I As Long
Dim InRange As Boolean, mySplit, cCell, bH As Long
'
Debug.Print "Init-0"
LaCol = Cells(1, Columns.Count).End(xlToLeft).Column    'Ultima colonna usata
bH = 15
ReDim HList(1 To 1)                             'HList conterra' i vari yyyy-mm che si troveranno
For I = LaCol To 1 Step -1                      'Scansiona le colonne di riga 1
    cCell = Cells(1, I).Value
    mySplit = Split(cCell & "0-0", "-", , vbTextCompare)    'Divide aaaa-bb
    If Len(mySplit(0)) > 2 Then                     '1° parte > 2 crt?
        If IsNumeric(mySplit(0)) Then                   'Sì; 1° parte e' un numero?
            If InRange = False Then Debug.Print "Init-IR=" & I & "--" & cCell
            InRange = True                                'Sì, inizia (o continua) "intervallo buono"
            HLUbound = HLUbound + 1
            ReDim Preserve HList(1 To HLUbound)           'si "Allunga" HList
            HList(HLUbound) = cCell                       'Scrive in HList l'intestaz corrente in HList
        Else
            If InRange = True Then                      'No...
                Debug.Print "Init-ERa=" & I & "--" & cCell
                InRange = False                           '...se InRange=True lo mette False
            End If
        End If
    Else
        'se 1° parte 2 crt o meno allora...
        If InRange = True Then                  '...se InRange=True lo mette False
            Debug.Print "Init-ERb=" & I & "--" & cCell
            InRange = False
        End If
    End If
    If InRange = False And HLUbound > 0 Then Exit For   'se terminato l'intervallo delle date, esci dal ciclo
Next I
ReDim Preserve HList(1 To HLUbound + 1)                 '+++ SI AGGIUNGE 1 ITEM VUOTO IN CODA
Debug.Print "UFI", HLUbound & " elementi trovati"
'Si passa a compilare i List Box con HList:
If HLUbound > 2 Then                'Ci sono piu' di 2 elementi?
    'Popolo LB1 & LB2
    Me.LB1.List = HList
    Me.LB2.List = HList
    '"allungo" la parte visibile dei Listbox
    If HLUbound > 5 Then
        Me.LB1.Height = bH * 5
        Me.LB2.Height = bH * 5
        DoEvents: DoEvents
    Else
        Me.LB1.Height = bH * HLUbound
        Me.LB1.IntegralHeight = True
        Me.LB2.Height = bH * HLUbound
        Me.LB2.IntegralHeight = True
        Me.LB2.TextAlign = fmTextAlignCenter
        Me.LB2.TextAlign = fmTextAlignLeft
    End If
Else
    MsgBox ("Non ci sono sufficienti elementi per un confronto" & vbCrLf & _
        "Processo abortito")
    Unload (Me)
End If
'Adatto l'altezza della form:
Me.Height = bH + Me.LB1.Top + LB1.Height + bH * 3
'Me.CB1.Top = Me.LB1.Top + Me.LB1.Height + bH / 2
Debug.Print "Init End"
DoEvents: DoEvents
End Sub

La riga con commento '+++ SI AGGIUNGE 1 ITEM VUOTO IN CODA e' quella che dovrebbe rimediare alla randomica possibilita' che l'ultima voce non sia visualizzata (al massimo sara' una riga vuota)
Le istruzioni Debug.Print registrano all'interno della Finestra Immediata del vba i progressi della UserForm_Initialize, ma al momento non dovrebbero servirci
I commenti alla Sub Confronta sono rimandati alla prossima puntata...

Quanto all'errore Tipo non corrispondente, ispeziona le righe per controllare se qualche cella invece di contenere dati numerici contenga invece stringhe di testo; ti potra' aiutare leggere il valore di K (se va in errore all'interno del loop For K=2 to lNames /Next K), che ti dice in quale riga hai l'errore (se non sai come leggere il valore di K guarda qui: viewtopic.php?f=26&t=103893&p=647677#p647677)
Avatar utente
Anthony47
Moderatore
 
Post: 19666
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro a contenuto variabile

Postdi Ricky0185 » 17/04/25 06:46

Mannaggia, l'ho già messa nella barra di avvio veloce.
La guerra continua, ma con la UF mi hai suggerito una soluzione che mai mi sarebbe passata per la testa e te ne sono grato. All'ora di pranzo applicherò i tuoi suggerimenti e ti saprò dire.
Al momento e solo...... ti ringrazio e saluto.
R
Ricky0185
Utente Senior
 
Post: 423
Iscritto il: 10/12/19 20:38

Re: Macro a contenuto variabile

Postdi Anthony47 » 17/04/25 09:46

Lieto che hai trovato utili spunti
In questo esercizio mi rimane un certo dubbio: nei confronti immagino che dovrai confrontare i numeri dei vari Agenti nei periodi prescelti, come hai fatto per garantire questo allineamento nel momento in cui importi i dati da piu' file?
Avatar utente
Anthony47
Moderatore
 
Post: 19666
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro a contenuto variabile

Postdi Ricky0185 » 17/04/25 10:01

Non ce l'ho fatta a resistere fino all'una. Sostituita la macro con quella suggerita da te, ancora stesso problema, cioè cliccando sull'ultima o penultima (con la vecchia macro) o penultima e terzultima (con la nuova macro) in basso a sinistra....stessa musica. Ho riaperto il FILE con la vecchia macro , naturalmente stesso problema, ed allora ho cominciato ad eliminare righe 50 alla volta ed arrivato a 400 righe il problema è scomparso. Fatta la prova con altro file di 1300 righe ed a 400 righe scompare il problema
Cosa può essere?
Inoltre, già che ci sei, vorrei che nelle 2 caselle di riepilogo, dopo Somma l'anno fosse a capo.
Grazie
Ricky0185
Utente Senior
 
Post: 423
Iscritto il: 10/12/19 20:38

Re: Macro a contenuto variabile

Postdi Anthony47 » 17/04/25 10:44

Per Somma+a-capo modifica all’iterno della Sub Confronta le due istruzioni marcate << MMM
Codice: Seleziona tutto
lNames = Cells(Rows.Count, "A").End(xlUp).Row
ReDim ColVal(1 To lNames, 1 To 3)
ColVal(1, 1) = "Somma: " & Chr(10)        '<< MMMM
ColVal(1, 2) = "Somma: " & Chr(10)        '<< MMMM
ColVal(1, 3) = "Differenza"
'onVal(1) = 0: onVal(2) = 0


Sostituita la macro con quella suggerita da te, ancora stesso problema, cioè cliccando sull'ultima o penultima (con la vecchia macro) o penultima e terzultima (con la nuova macro) in basso a sinistra....stessa musica
Puoi descrivere quale e’ la musica?
Perche’ io, partendo dal file che hai pubblicato ieri e duplicando i dati XX volte ho creato un file con 15mila righe e, attivata la form, l’elaborazione procede come si deve pubblicando dati apparentemente validi; insomma, solo good vibes
Avatar utente
Anthony47
Moderatore
 
Post: 19666
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro a contenuto variabile

Postdi Ricky0185 » 17/04/25 13:00

Ho riaperto il FILE con la vecchia macro

Prova su quello pubblicato questa mattina nel post precedente al tuo, dimezzato a solo 600 e rotti righe, provato sia con la tua macro V2 originale che con quella delle 22,31 di ieri sera. In ambedue spuntando uno dei primi due quadratini a sinistra si manifesta l'errore. Almeno sul mio pc, W11+Exc21. Se a te non si manifesta l'errore, allora è colpa del file o del pc.
Per l'"a capo" ok, tranne che dopo la data lascia un "&", cioè "Totale -a capo- 2025-01 & "
Ricky0185
Utente Senior
 
Post: 423
Iscritto il: 10/12/19 20:38

Re: Macro a contenuto variabile

Postdi Anthony47 » 17/04/25 14:23

Anthony ha scritto:Quanto all'errore Tipo non corrispondente, ispeziona le righe per controllare se qualche cella invece di contenere dati numerici contenga invece stringhe di testo; ti potra' aiutare leggere il valore di K (se va in errore all'interno del loop For K=2 to lNames /Next K), che ti dice in quale riga hai l'errore (se non sai come leggere il valore di K guarda qui: viewtopic.php?f=26&t=103893&p=647677#p647677)
Si, pero' se non leggi quel che scrivo... :evil:
Guarda riga 454...
Avatar utente
Anthony47
Moderatore
 
Post: 19666
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro a contenuto variabile

Postdi Ricky0185 » 17/04/25 16:14

Mi cospargo il capo di cenere. Ora funziona alla grande grazie al fantastiliardo pagato.
In questo esercizio mi rimane un certo dubbio: nei confronti immagino che dovrai confrontare i numeri dei vari Agenti nei periodi prescelti, come hai fatto per garantire questo allineamento nel momento in cui importi i dati da piu' file?

L'importazione avviene per nome attività (colonna Sede), di solito vado a controllare quelle che dai versamenti in banca risultano carenti rispetto ai periodi trascorsi oppure sommando la relativa riga intera (con scelta del periodo da verificare). Da li vedo quale agente l'ha in carico ed intervengo sull'agente con incitazioni e/o sull'attività con opera di convincimento o promozione. Ovviamente le due macro mi risparmiano un mucchio di tempo e scarsa possibilità di errori e per questo ti sono infinitamente grato.
Considero quindi l'argomento (finalmente) chiuso e RISOLTO.
Resterebbe solo come poter scaricare dal sito dai 30 ai 240 files in un colpo, ma per questo occorerebbe accedervi. Suggerimenti? Oltre naturalmente a quelli che hai già indicato in altro post, ma che trattano download diretto di tabelle o pagine. Qui si tratta di una pagina dove fare tre scelte (periodo, nome, filtro e importazione) su una lista di soggetti (attività o agenti) di cui in altre parti del sito c'è tutto, titolare, telefono, email, indirizzo, banca e conto, versamenti, etc.
Ti saluto augurandoti una Buona Pasqua insieme a tutta la famiglia.
R
Ricky0185
Utente Senior
 
Post: 423
Iscritto il: 10/12/19 20:38

Re: Macro a contenuto variabile

Postdi Anthony47 » 17/04/25 19:10

Resterebbe solo come poter scaricare dal sito dai 30 ai 240 files in un colpo, ma per questo occorrerebbe accedervi. Suggerimenti?
L'uso dell'ambiente Selenium probabilmente consentirebbe di farlo, ma come dici "per sviluppare la soluzione" bisogna accedere al sito per esaminarne il codice htm e interagire con gli elementi esposti, e immagino che ci siano svariati motivi perche' io non vi possa accedere.
Prova a guardare le varie discussioni sul tema, cercando su google con la stringa
Codice: Seleziona tutto
selenium site:pc-facile.com
magari ne vieni fuori da solo.
Nei casi in cui il sito richiede il login, senza cercare di riempire account name e password automaticamente, il in genere metto uno stop sul codice della macro (o meglio: un messagebox, che interrompe la macro) lasciando all'utente il compito di completare il login, finito il quale on Ok su messagebox determina la ripresa del codice
Avatar utente
Anthony47
Moderatore
 
Post: 19666
Iscritto il: 21/03/06 16:03
Località: Ivrea

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "Macro a contenuto variabile":


Chi c’è in linea

Visitano il forum: Nessuno e 32 ospiti

cron