Bonjour,
J'ai une macro avec boucle for each next que je viens de confectionner après beaucoup d'efforts (je suis débutante en VBA) et qui fonctionne bien.
Le seul problème est le suivant: lorsque j'exécute cette macro, les feuilles commencent à défiler une à une, ralentissant l'exécution des commandes et l'affichage des résultats. Je suis consciente que le code utilisé doit certainement être trop "lourd".
Le classeur est constitué de plusieurs feuilles, dont une feuille de synthèse "BD". Plusieurs feuilles sont nommées "service*": service administratif, achat, vente,etc. Les données de ces feuilles devaient être regroupées dans la feuille BD sous forme de tableau.
Ma question est la suivante: j'aimerais beaucoup que vous m'aidiez s'il vous plait à trouver une forme plus légère et plus rapide.
Je vous remercie d'avance pour votre temps et vos efforts
Le code est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 Sub MacroFINALEssai() ' Dim numLigneVideUn As Integer Dim ws As Worksheet Sheets("BD").Select Cells.Select Selection.ClearContents Range("A1").Select ActiveCell.FormulaR1C1 = "Nom Matériel" Range("B1").Select Sheets("Service Administration").Select Range("A600:A612").Select Selection.Copy Sheets("BD").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True Application.CutCopyMode = False For Each ws In ThisWorkbook.Worksheets If ws.Name Like "Service*" Then Sheets(ws.Name).Select Range("B1", Range("B1").End(xlToRight)).Select Selection.Copy Sheets("BD").Activate 'on trouve la dernière ligne vide de la colonne A et on enregistre le numéro de la ligne dans la variable numLigneVide numLigneVide = Range("A65536").End(xlUp).Row + 1 ActiveSheet.Cells(numLigneVide, 1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True Application.CutCopyMode = False Sheets(ws.Name).Select Range("B600:B612", Range("B600:B612").End(xlToRight)).Select Selection.Copy Sheets("BD").Activate 'on trouve la dernière ligne vide de la colonne B et on enregistre le numéro de la ligne dans la variable numLigneVide numLigneVide = Range("B65536").End(xlUp).Row + 1 ActiveSheet.Cells(numLigneVide, 2).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True Application.CutCopyMode = False Sheets(ws.Name).Select Range("B3").Select End If Next Sheets("Sommaire").Select End Sub
Partager