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 ^^

A voir également:

3 réponses

eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
Bonjour,

Que veux-tu que l'on teste sans fichier ni code ?
eric
0
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
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
alice176
 
oups dsl je ne savais pas. Je ferai attention la prochaine fois.
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
pas de souci.
Bonne continuation avec Éric que je salue au passage.

Bonne journée
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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
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
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
Ter repetita...
Sans fichier de travail c'est tout ce qu'on peut en dire
0
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
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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