Macro pour un seul classeur

alice176 -  
 alice176 -
Bonjour,

J'ai créé une macro dans un classeur, mais quand j'ai plusieurs classeurs d'ouvert, celle-ci est beaucoup plus longue...
Ma macro est simple, elle reprend des données dans tous les onglets du dit classeur et écrit ces données dans une feuille de ce même classeur.
Elle fonctionne très bien quand il n'y a que ce classeur d'ouvert mais dès qu'il y en a un autre, elle est 15 fois plus longue, comme si elle cherchait des données dans l'autre classeur.

Please Help me ^^

3 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Que veux-tu que l'on teste sans fichier ni code ?
    eric
    0
  2. alice176
     
    Je ne pensais pas qu'il était nécessaire de voir mon code...

    Sub synthese()
    
    
    Dim Wb As Workbook
    Dim Ws As Worksheet
    Dim Cellule As Range
    Dim Nbligne As Integer
    Dim Tab1() As String
    Dim test As String
    Dim test1 As String
    Dim I As Integer
    
    
    Application.ScreenUpdating = False
    
    x = 0
    ReDim Tab1(10, x)
    
    'Défiltrer tous les onglets
    On Error Resume Next
    For Each sh In Sheets
        sh.ShowAllData
    Next sh
    
    Windows("Master SuiviIP ARA vdef.xlsm").Activate
    For Each Ws In ThisWorkbook
    
    
    If Ws.Name <> "admin" And Ws.Name <> "Synthèse OC" And Ws.Name <> "Synthèse" And Ws.Name <> "Template" Then
    
        Ws.Activate
        Range("B3").Select
        Range(Selection, Selection.End(xlDown)).Select
        Nbligne = Selection.Rows.Count
        
        Range("N3", "N" & Nbligne + 3).Select
       
        
        For Each Cellule In Selection
        
             If Cellule.Value = ActiveSheet.Name Then
                    x = x + 1
                    ReDim Preserve Tab1(10, x)
                    Tab1(1, x) = Cellule.Offset(0, -12) 'DA
                    Tab1(2, x) = Cellule.Offset(0, -9) 'MNG
                    Tab1(3, x) = Cellule.Offset(0, -11) 'Consultant
                    Tab1(4, x) = Cellule.Offset(0, -5) 'Client
                    Tab1(5, x) = Cellule.Value 'Semaine démarrage
                    Tab1(6, x) = Cellule.Offset(0, 1) 'OC
                    Tab1(7, x) = Cellule.Offset(0, 6) 'Embauche
                    Tab1(8, x) = Cellule.Offset(0, 7) 'type embauche
                    Tab1(9, x) = Cellule.Offset(0, 9) 'Semaine sortie
                    Tab1(10, x) = Cellule.Offset(0, 10) 'Cause sortie
                    
                
            End If
        Next Cellule
    End If
    
    Next Ws
    
    
    Worksheets("Synthèse").Activate
    
    J = 0
    For I = x To 0 Step -1
    J = J + 1
    Cells(2 + J, 2) = Tab1(1, I)
    Cells(2 + J, 3) = Tab1(2, I)
    Cells(2 + J, 4) = Tab1(3, I)
    Cells(2 + J, 5) = Tab1(4, I)
    Cells(2 + J, 6) = Tab1(5, I)
    Cells(2 + J, 7) = Tab1(6, I)
    Cells(2 + J, 8) = Tab1(7, I)
    Cells(2 + J, 9) = Tab1(8, I)
    Cells(2 + J, 10) = Tab1(9, I)
    Cells(2 + J, 11) = Tab1(10, I)
    
    
    Next I
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bonjour,

      Lorsque vous placez du code sur notre forum, merci d'utiliser les balises code à votre disposition.
      Le mode d'emploi (au cas ou) est ICI.

      Cordialement,
      Pijaku
      0
    2. alice176
       
      oups dsl je ne savais pas. Je ferai attention la prochaine fois.
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      pas de souci.
      Bonne continuation avec Éric que je salue au passage.

      Bonne journée
      0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Tu as mis tout le code ?
    Je n'y vois rien qui pourrait influencer si tu as plusieurs classeurs d'ouverts.
    Tu n'as pas de fonctions personnalisées ?
    Par contre tu peux rendre ton code beaucoup plus rapide en évitant tous les .select inutiles, et en écrivant les données par bloc quand c'est possible plutôt que cellule par cellule.
    Sans fichier de travail c'est tout ce qu'on peut en dire.

    eric
    0
    1. alice176
       
      Oui j'ai mis tout le code ! :(
      Et quand je lance la macro elle prend environ 30 secs et dès qu'il y a un autre classeur ouvert elle est supra longue... Je ne comprend vraiment pas pourquoi.

      Je suppose que je peux la rendre plus rapide mais je suis débutante donc je ne sais pas comment faire je t'avoue...
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Ter repetita...
      Sans fichier de travail c'est tout ce qu'on peut en dire
      0
    3. alice176
       
      Ter repetita ?
      Je ne peux pas mettre le fichier ce sont des données sensibles... mais la macro est entièrement là.
      C'est assez simple, tu as un onglet pour chaque semaine avec le même tableau qui a toujours la même mise en forme.
      Dans ces tableaux, il y a d'inscrit le nom de personnes avec leur semaine d'entrée par exemple.
      Ma macro permet de prendre les lignes où la semaine inscrite dans le tableau correspond à la semaine de l'onglet et de l'inscrire dans une nouvelle feuille pour avoir une liste des entrées effectives des personnes.
      C'est tout.
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      sans classeur exemple, il sera extrêmement difficile de te répondre, sauf en tâtonnant...

      Essaie toutefois de mettre, en début de ta macro :
      Application.Calculation = xlCalculationManual


      et en fin de macro, avant End Sub :
      Application.Calculation = xlCalculationAutomatic


      Ceci devrait empêcher Excel de procéder aux calculs automatiques sur les autres classeurs durant le temps d'exécution de ta macro.
      A vérifier toutefois que cela fonctionne sur tous les classeurs ouverts.....
      0
    5. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      C'est tout
      Ben voyons, mais je n'ai pas plus de courage que toi à le faire.
      Tu me vois éplucher ta macro pour savoir que dans telle cellule je dois y trouver ça ?
      Allez, c'est bon, je n'insiste plus et j'abandonne.
      Bon courage
      eric
      0