Doppio ciclo lento



  • Doppio ciclo lento
    di pierof. (utente non iscritto) data: 16/04/2013 22:05:25

    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: 17/04/2013 09:27:22

    Il listato è difficilmente leggibile, è meglio qualche indentazione in più.
    Ma tu vorresti riscrivere il codice da zero magari con un'altro approccio o ottimizzare il codice esistente?





  • di pierof. (utente non iscritto) data: 17/04/2013 18:24:30

    Vorrei ottimizzare, anche perchè correggere quel che ho scritto mi aiuterebbe a capire meglio dove sbaglio.....e poi sapessi quanto tempo ci ho passato finchè tutto girasse anche se lentamente.

    Se poi ritieni che sia meglio usare un'altra strada ....sono pronto a seguirti .....

    con stima pierof.



  • di Vecchio Frac data: 18/04/2013 09:24:47

    Non riesco a riprodurre bene lo scenario.
    Allega un file (zippato) con pochi dati di esempio (una decina di righe basteranno).





  • di pierof. (utente non iscritto) data: 20/04/2013 21:57:46

    Solo adesso vedo e da un'altra postazione pc.
    Fra qualche giorno potrò allegarti quello che chiedi,
    grazie e a presto pierof.