Macro pour un seul classeur
alice176
-
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 ^^
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:
- Macro pour un seul classeur
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Imprimer un classeur excel sur mac - Guide
- Son dans un seul écouteur avec fil ✓ - Forum Casque et écouteurs
3 réponses
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
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
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
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
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
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...
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...
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.
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.
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 :
et en fin de macro, avant End Sub :
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.....
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.....