Replica formule



  • Replica formule
    di loremarchesi data: 16/04/2013 18:19:18

    Salve a tutti. Premetto che sono completamente digiuno di VBA.
    Ho un foglio di Excel che scarica dati da un gestionale. Questi dati vengono copiati in un altro foglio che li elabora grazie a una decina di formule distribuite su altrettante colonne. I dati aumentano di giorno in giorno, e non posso diminuirne la mole, perché i dati mi servono tutti per ottenere il risultato voluto.
    Quindi avrei bisogno di un "trucco" (una macro, immagino) che ripeta queste formule fino all'ultima riga disponibile di Excel, in modo da essere certo che TUTTI i dati vengano elaborati.
    Grazie in anticipo a chi vorrà rispondere!


  • Doppio ciclo lento
    di pierof. (utente non iscritto) data: 16/04/2013 18:51:53

    Un saluto a tutti gli amici del forum,
    e scusate la mia poca dimestichezza per assemblare il codice.

    Avrei un problema con una macro che uso per ripristinare dei collegamenti ipertestuali a un elenco di nomi di clienti in una Cartella-A nel foglio(1) per collegare ai relativi fogli situati in un'altra Cartella-B, il cui Name è quasi lo stesso dei nomi dei clienti dell'elenco.

    La macro funziona ma dovendo ripristinare al momento una sessantina di collegamenti che in futuro aumenteranno con l'inserimento di nuovi clienti, al momento ci vogliono un paio di minuti affinchè la macro ripristini tutti i collegamenti.

    Se ci sono altri metodi alternativi per ottenere lo stesso risultato chiedo anticipatamente grazie a tutti quanti mi proporranno dei suggerimenti.

    Saluti Pierof.
     
    Sub RipristCollegMastrCli() 'avviare la macro da un foglio della cartella TabRiepCliSeir2013 
    Dim NomeFglMastr
    Dim cliente
    Dim UltimaRiga As Integer, r As Integer
    Dim ColBclienti As Range, ColGclienti As Range
    Dim UroG As String, CollMese As String, CliTab As String
    Dim d As Byte, SPAZIO As Byte
    Dim ModificatoNomeFglMastr As String, ModificatoNomeFglTabRiep As String
    Dim NomeFoglioAttivo As String, AnnoCorrente As String, CliMastr As String
    Dim MeseAttuale As String, CliSenzaSpazio As String
    Dim StringaFinaleMastrino
    Dim StringaFinaleTabella
    Windows("TabRiepCliSeir2013.xlsm").Activate
    With ActiveSheet 'un qualsiasi foglio mensile della cartella TabRiepCliSeir2013 
    AnnoCorrente = Sheets("mese").Range("E5").Value
    UltimaRiga = Range("B65000").End(xlUp).Row
    Set ColBclienti = Range(Cells(3, 2), Cells(UltimaRiga, 2))
    For Each cliente In ColBclienti
    r = cliente.Row
    
    For d = 1 To Len(cliente) 
    'sotto le istruz.se trovano in "cliente" un punto(.) o uno spazio vuoto(" ")lo sost.con(*)asterisco
    SPAZIO = InStr(cliente, " ") 'mi indica la posizione dello spazio nel nome "cliente"
    'se non trovo spazi assegno la variabile
    If SPAZIO = 0 Then
    ModificatoNomeFglTabRiep = cliente
    Else
    'sotto elimino la posizione di SPAZIO nel nome "cliente"
    CliSenzaSpazio = Mid(cliente, 1, SPAZIO - 1) & Mid(cliente, SPAZIO + 1)
    
    
    ModificatoNomeFglTabRiep = CliSenzaSpazio
    'If Mid$(cliente, d, 1) = "." Or Mid$(cliente, d, 1) = " " Then Mid$(cliente, d, 1) = "*" 
    End If
    Windows("MastrCliSeir.xlsm").Activate
    
    Sheets("APPOGGIO").Activate
    With Columns(7)
    UroG = Range("G65000").End(xlUp).Row
    Set ColGclienti = Range(Cells(2, 7), Cells(UroG, 7))
    
    For Each NomeFglMastr In ColGclienti
    CliMastr = NomeFglMastr
    
     For c = 1 To Len(NomeFglMastr) 
    'se si è trovato  un punto lo sostituiamo con(*)asterisco)
    If Mid$(NomeFglMastr, c, 1) = "." Then Mid$(NomeFglMastr, c, 1) = "*"  
    Next
    ModificatoNomeFglMastr = NomeFglMastr
    'Se il nome del cliente nell'elenco corrisponde a quello del nome del foglio dell'altra cartella
    If ModificatoNomeFglTabRiep & "*" Like ModificatoNomeFglMastr & "*" Then
    Windows("TabRiepCliSeir" & AnnoCorrente & ".xlsm").Activate
    MeseAttuale = Sheets("mese").[C1]
    Sheets(MeseAttuale).Activate
    Cells(r, 2).Select
    CliTab = Cells(r, 2).Value
    'inseriamo il colleg.ipertest.
        With Selection 
        .Hyperlinks.Add Anchor:=Selection, Address:= _
    "MastrCliSeir.xlsm", SubAddress:=CliMastr & "!A1", TextToDisplay:="" & cliente & ""
            .Font.Name = "Calibrì"
           .Font.Size = 11
        .Font.Underline = xlUnderlineStyleNone
    
    End With 'originale
    Cells(r, 3).Select
     ActiveCell.FormulaR1C1 = "=[MastrCliSeir.xlsm]" & CliMastr & "!R4C6"
    End If
    Next
    End With
    Next
    Next
    End With
    Set ColBclienti = Nothing
    Set ColGclienti = Nothing
    End Sub



  • di Vecchio Frac data: 16/04/2013 18:54:28

    @pierof
    Non continuare una discussione altrui con un argomento nuovo. Devi aprire una discussione nuova.

    @loremarchesi
    cit. " che ripeta queste formule fino all'ultima riga disponibile di Excel"
    ---> ma vuoi ricopiare solo le formule relative all'ultima riga inserita, giorno per giorno, o copiare tutte le formule una volta per sempre e non pensarci più?




  • Replica formule
    di loremarchesi data: 16/04/2013 19:51:33

    Tieni presente che le righe aggiunte sono molte ogni giorno. Per cui ho bisogno di estendere le formule in una sola mossa a tutte le righe vuote. Oppure, in alternativa, contare le righe "nuove" ogni giorno ed inserire un numero uguale di "trascinamenti di formula" (Questo se ritieni che il calcolo "a vuoto" di quasi un milione di righe possa appesantire il processo...)
    Grazie.



  • di pierof. (utente non iscritto) data: 16/04/2013 22:17:28

    Scusate dell'intromissione non sò come sia potuto succedere adesso ho aperto una nuva discussione , ma mi sà che l'ho inserita anche nella sezione sbagliata, chiedo venia, e comprensione dai mod.



  • di Vecchio Frac data: 17/04/2013 09:34:32

    @pierof
    ho visto che hai aperto una discussione nuova, bene così.

    @loremarchesi
    Tutto abbastanza vago, mi piacerebbe un esempietto con dati ovviamente fittizi ma illustrativo della situazione reale. Ovvero poche righe compilate.
    Copiare una formula fino a riempire la zona di dati non è impresa impossibile, si potrebbe farlo anche sovrascrivendo ogni giorno le formule già inserite se sono appunto formule calcolate e non valori consolidati.

    Per dirti, prova una cosa così
    [A2:D10] = "=SUM(A1:D1)"
    vengono inserite delle formule in automatico che vengono ricalcolate quando scrivi un valore in A1.
    I riferimenti relativi vengono mantenuti e adattati al range.
    Solo un'idea ma può adattarsi al tuo caso.






  • Replica formule
    di loremarchesi (utente non iscritto) data: 17/04/2013 10:40:39

    Ho allegato un esempio. Le colonne interessate dalle formule da replicare sono quelle dalla D A alla Z. Grazie!


  • REPLICA FORMULE
    di loremarchesi data: 23/04/2013 14:54:37

    Salve a tutti, non ho più sentito nessuno per cui ho pensato che il file non fosse stato caricato correttamente. L'ho ricaricato.
    Inoltre risulto essere un "utente non registrato", quando invece lo sono, e il mio nik è "loremarchesi"...
    Grazie.



  • di totygno71 data: 23/04/2013 15:26:14

    Nel file ci sono i riferimenti ad altri fogli o altri file... ma scusa se le formule son tutte uguali basta selezionare l'intera riga di formula (dalla D alla Z) e trascinarle fino in fondo... mi sembra banale, ma forse non è quello che intendi tu...


  • Replica formule
    di loremarchesi data: 23/04/2013 16:58:54

    Era banale in effetti! Così pensavo io finché non ho provato, ma Excel non riusciva a copiare le formule se non colonna per colonna. Dopo la tua risposta ho provato e... ok!!
    Grazie di tutto, seguirò le altre discussioni!



  • di totygno71 data: 23/04/2013 18:08:08

    Tranquillo... alle volte le soluzioni più scontate sono le difficili da individuare_
    A presto ^_^