Stellar Blade Un'esclusiva PS5 che sta facendo discutere per l'eccessiva bellezza della protagonista. Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

macro seleziona range molto lenta

  • Messaggi
  • OFFLINE
    john_cash
    Post: 471
    Registrato il: 28/05/2011
    Città: MILANO
    Età: 43
    Utente Senior
    excel 2000/2007
    00 01/08/2022 16:31
    Ciao a tutti.
    Nel workbook allegato ci sono 2 macro

    una macro per stampare le celle
    Sub stampa_tutte_righe_attive_stampa_input()

    una macro per selezionare l'intervallo
    Sub DoppiaMacro_1()


    Se prima faccio click sul pulsante 1, la macro Sub Double Macro_1 () è veloce
    se prima faccio click sul pulsante 2 e poi sul pulsante 1 la macro Sub DoppioMacro_1() è lenta

    Perchè?

    un aiuto?
    grazie
    ---------------
    excel 2007
  • OFFLINE
    rollis13
    Post: 1.247
    Registrato il: 16/08/2015
    Città: CORDENONS
    Età: 67
    Utente Veteran
    Excel 2016-32bit Win11
    00 01/08/2022 17:03
    Mah, a parte il fatto che la macro: Double Macro_1 non l'ho trovata, ho cliccato i pulsanti in tutte le combinazioni di sequenza ma la velocità mi è sembrata sempre la stessa.
    [Modificato da rollis13 01/08/2022 18:35]

    ______________________________________________________________
    C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
  • OFFLINE
    john_cash
    Post: 471
    Registrato il: 28/05/2011
    Città: MILANO
    Età: 43
    Utente Senior
    excel 2000/2007
    00 01/08/2022 17:09
    La macro Sub DoppiaMacro_1 è questa abbinata con doppio click a
    Sub seleziona_per_mail_1()
    Sub togli_seleziona_per_mail_1
    che sono nel workbook allegato

    
    Dim Controllo As Boolean
    
    Sub DoppiaMacro_1()
    'doppia macro 1/2 click foglio mailstampa
    
    Dim avviso As String
    
       If Controllo = True Then
    
          'Call seleziona_per_mail
          Call togli_seleziona_per_mail_1
                  
          Controllo = False
    
       Else
    
          'Call togli_seleziona_per_mail
          Call seleziona_per_mail_1
                  
          Controllo = True
    
       End If
    
     End Sub
    
    
    
    
    Sub seleziona_per_mail_1() '<<< ok
    'foglio mail
    
    
    Application.ScreenUpdating = False
    
    
    Dim Selezione As Range, R As Range, R2 As Range, rng As Range
    Dim avviso As String
    Dim I As Long
    
     ActiveSheet.Unprotect "987654"
    
     'If Range("X1") = "" Then
     
     
     If Range("A5") = "" Then
    avviso = MsgBox("non c'è niente da selezionare!", vbExclamation + vbOKOnly + vbDefaultButton2, "AVVISO")
     If avviso = vbOK Then
    Exit Sub
     End If
     End If
      
        Set rng = Range("A3:Q84")
        For I = rng.Rows.Count To 1 Step -1
            If WorksheetFunction.CountA(rng.Rows(I)) = 0 Then
                rng.Rows(I).EntireRow.Hidden = True
            End If
        Next I
        
          
        With Sheets("foglio1").Range("A3:Q84") '<== sostituisci il nome del foglio, oppure usa ActiveSheet
            For Each R In .Rows
                For Each R2 In R.Cells
                    If R2 <> "" Then
                        If Selezione Is Nothing Then
                            Set Selezione = R
                        Else
                            Set Selezione = Uni0n(R, Selezione)
                        End If
                        Exit For
                    End If
                Next R2
            Next R
        End With
        If Not Selezione Is Nothing Then Selezione.Select
        Set Selezione = Nothing
        
        'Range("X1") = 1
           
    'ActiveSheet.Protect "987654"
    ActiveSheet.Protect Password:="987654", DrawingObjects:=True, Contents:=True, Scenarios:=True _
            , AllowFormattingCells:=False, AllowInsertingHyperlinks:=False, AllowFiltering:=True
            
        Selection.Copy
             
    
    Application.ScreenUpdating = False
    
     
    End Sub
    
    
               
               
    
               
    
    Sub togli_seleziona_per_mail_1() '<<< ok
    'foglio mail
    
    Dim Selezione As Range, R As Range, R2 As Range, rng As Range
    
    Dim I As Long
    
    ActiveSheet.Unprotect "987654"
    Application.ScreenUpdating = False
    
          Set rng = Range("A3:Q84")
        For I = rng.Rows.Count To 1 Step -1
            If WorksheetFunction.CountA(rng.Rows(I)) = 0 Then
                rng.Rows(I).EntireRow.Hidden = False
            End If
        Next I
         
      'Range("X1") = ""
      
    ActiveSheet.Protect "987654"
     Application.CutCopyMode = False
    
    'End If
    
    Application.ScreenUpdating = True
    
    Range("A5").Select
    
    End Sub
    
    


    mah, forse lento a caussa di excel 2007?
    [Modificato da john_cash 01/08/2022 17:11]
    ---------------
    excel 2007
  • OFFLINE
    tanimon
    Post: 1.523
    Registrato il: 27/06/2011
    Utente Veteran
    excel 2007
    00 01/08/2022 18:04
    Re:
    rollis13, 01/08/2022 17:03:

    Mah, a parte il fatto che la macro: Double Macro_1 non l'ho travata, ho cliccato i pulsanti in tutte le combinazioni di sequenza ma la velocità mi è sembrata sempre la stessa.



    sono d'accordissimo!


    premessa:

    1
    Set nome_variabile = Nothing
    lo devi applicare a TUTTE le variabili oggetto e non solo a quelle di cui ti ricordi

    2
    crea un file nuovo con nome diverso e con estensione ".xlsm"
    dal file vecchio, copia nel file nuovo il foglio su cui devi lavorare
    aggiungi la prima macro e verificane la velocità (usa il cronometro del cellulare 😁😁😁)
    aggiungi la seconda macro e verificane la velocità (usa lo stesso strumento citato sopra 😁😁😁)

    Buon lavoro
    ciao
    Frank







    Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
    Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
  • OFFLINE
    tanimon
    Post: 1.524
    Registrato il: 27/06/2011
    Utente Veteran
    excel 2007
    00 01/08/2022 18:35
    ciao, ma ci sei o stai facendo altro??!?!?!?

    fai domande e non rispondi...????

    Va beh,
    intanto che tu ti possa degnare di dare un riscontro, ho già notato che non è una tua prerogativa farlo in tempi rapidi,

    io ho un problema più importante e vado a prepararmi la cena!

    Buona serata

    Frank








    Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
    Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
  • OFFLINE
    john_cash
    Post: 472
    Registrato il: 28/05/2011
    Città: MILANO
    Età: 43
    Utente Senior
    excel 2000/2007
    00 01/08/2022 19:25
    Scusatemi, non sono sempre attaccato al forum.
    Comunque ho risolto in questo modo aggiungendo nelle macro
    Sub seleziona_per_mail_1() '<<< ok
    Sub togli_seleziona_per_mail_1() '<<< ok

    all'inizio
    
       Application.ScreenUpdating = False
     
      'Application.DisplayStatusBar = False
       Application.Calculation = xlCalculationManual
       'Application.EnableEvents = False
       ActiveSheet.DisplayPageBreaks = False
    


    e alla fine

      'Application.DisplayStatusBar = True
    Application.Calculation = xlCalculationAutomatic
    'Application.EnableEvents = True
    ActiveSheet.DisplayPageBreaks = True
    
    
     Selection.Copy
     
    
    Application.ScreenUpdating = True
    
    


    allego workbook aggiornato.
    Clicca pulsante 1 per stampare le righe
    Clicca pulsante 2 per selezionare / clicca pulsante 2 per togliere la selezione
    Ora è veloce.
    Con le 2 aggiunte nelle macro va bene o possono dare problemi?
    Grazie

    [Modificato da john_cash 01/08/2022 19:27]
    ---------------
    excel 2007
  • OFFLINE
    tanimon
    Post: 1.525
    Registrato il: 27/06/2011
    Utente Veteran
    excel 2007
    00 01/08/2022 20:00
    Re:
    john_cash, 01/08/2022 19:25:


    Con le 2 aggiunte nelle macro va bene o possono dare problemi?
    Grazie



    il file lo è tuo e tu lo utilizzi.
    Se non dà problemi a te, non ne darà di certo a noi....











    Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
    Excel 2007 forse anche 2013 ... 2021 ... 365 e future...