Microsoft 365 Utiliser la même macro dans des feuilles différentes

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Perceval973

XLDnaute Nouveau
Bonjour à tous

J'ai un classeur qui contient des feuilles lundi, mardi, mercredi, jeudi, vendredi
Ces feuilles sont alimentées par mes opérateurs
Chaque jour (J) je fais des analyses sur J-1 et j'ai besoin de dérouler une macro qui fait du nettoyage et du tri
Mercredi dernier j'ai créé une macro grâce a la fonction "Enregistrer une macro". Cette macro est enregistrée dans "Personnal.XLSB"
Mon problème est que si je lance la macro sur la feuille mercredi, je peux ensuite l'utiliser dans n'importe quelle feuille.
En revanche si je commence par lancer la macro dans une autre feuille que mercredi elle plante

Merci pour votre aide
Perceval
 
Solution
Nous avons tous étaient novices. Sans fichier, difficile de t'aider. Tu pourrais monter un fichier avec des données bidons.

Cependant, tu nous ceci:

Mais ensuite, tu dis:

Alors cette feuille se nomme "mercredi" ou "Mercredi L1"

Ce que tu n'as pas compris, est de nous expliquez ce tu veux faire. En lisant, le code généré par l'enregistreur de ma macro. on n'arrive plus à suivre. Par exemple cette ligne de code: ActiveWindow.SmallScroll Down:=223 , tu es arrivé où vers le bas (tu as ciblé quoi?).

edit: quand tu seras prêt à nous aider pour t'aider. Reviens
Voici une macro qui fonctionne (pour ceux qui viendront par la suite...)


Sub Nettoyage_Synthese_Lx_MFC()
With ActiveSheet
If .Name Like "* L#" Then...
C'est ça ton explication???
Bonjour à tous

Je suis novice en macrologie

Je récupère un classeur dont je ne suis ni le créateur ni le propriétaire. Ce classeur est alimenté par une quinzaine de personnes

Ce classeur contient plusieurs feuilles dont "lundi" "mardi" "mercredi" "jeudi" "vendredi" "samedi" "dimanche"

Chaque jour j'ai besoin de filtrer trois colonnes parmi onze colonnes existantes. Ensuite je les trie du plus petit au plus grand dans la colonne A. Enfin, je mets les doublons en surbrillance selon la colonne A

Ne maitrisant pas VBA j'ai utilisé l'enregistreur de macro. Je l'ai utilisé depuis la feuille appelée "Mercredi L1"

Voici mon problème : Si je lance ma macro en commençant par mercredi, puis les autres jours tout se déroule normalement

Si je lance la macro depuis un autre jour elle plante à la ligne ".Apply"

Si je recopie ma macro en remplaçant partout "mercredi L1" par un autre jour de la semaine, je peux la lancer dans la feuille correspondante, mais je ne trouve pas cela très propre... Sauriez-vous m'aider à n'avoir qu'une seule macro qui fonctionne avec toutes les feuilles ?

Ci dessous, la macro créée avec l'enregistreur de macro...

Merci d'avance pour votre aide

Sub Nettoyage_Synthese_Mercredi_L1()
'
' Nettoyage_Synthese Macro_Mercredi_L1
'
Range("A1").Select
Application.ScreenUpdating = False
Cells.Select
Selection.UnMerge
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Cells.Select
Selection.EntireColumn.Hidden = False
Range("A:A,C:C,E:E,F:F,G:G,H:H,I:I,K:K,L:L,M:M,N:N,O:O,P😛,Q:Q,R:R,S:S,T:T"). _
Select
Range("T1").Activate
Selection.Delete Shift:=xlToLeft
Columns("A:A").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$A$414").AutoFilter Field:=1, Criteria1:="=Poste", _
Operator:=xlOr, Criteria2:="="
ActiveWindow.SmallScroll Down:=223
Cells.Select
Selection.Delete Shift:=xlUp
ActiveWorkbook.Worksheets("Mercredi L1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Mercredi L1").Sort.SortFields.Add2 Key:=Range( _
"A1:A414"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Mercredi L1").Sort
.SetRange Range("A1:U414")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Columns("A:A").Select
Selection.FormatConditions.AddUniqueValues
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
Selection.FormatConditions(1).DupeUnique = xlDuplicate
With Selection.FormatConditions(1).Font
.Color = -16383844
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13551615
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Columns("C:C").Select
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _
Formula1:="=29"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16383844
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13551615
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Range("A1").Select
Dim s As Shape
For Each s In ActiveSheet.Shapes
s.Delete
Next
Application.ScreenUpdating = True
End Sub
 
@Perceval973

Je n'ai jamais reçu de formation ni sur Excel ni en VBA, j'ai tout appris seul en consultant des sources internet
J'avais bien compris cela mais c'est pas grave plein de demande sont dans ce cas là

Mais au lieu de recopier inlassablement ta macro as tu lu ceci que j'ai écrit au post #22 ????
j'ai beau regardé tes 2 codes que tu as fourni je ne comprends pas ce que tu veux faire cela par dans toutes les directions et on ne comprends rien à ton code ni à ce que tu veux faire .

En l'état je suis incapable de t'aider faute de vision et de compréhension de ce que tu cherches à faire.

Peut être une traduction en français de ce que tu veux faire mais il faut quelle soit bien détaillée
Exemple
Je veux faire ceci sur les cellules X ou Y

Ensuite cela sur les cellules Z etc........

Sans une réponse compréhensible à ma question je n'irais pas plus loin.

Bonne lecture
 
Bonjour à tous

Je suis novice en macrologie

Je récupère un classeur dont je ne suis ni le créateur ni le propriétaire. Ce classeur est alimenté par une quinzaine de personnes

Ce classeur contient plusieurs feuilles dont "lundi" "mardi" "mercredi" "jeudi" "vendredi" "samedi" "dimanche"

Chaque jour j'ai besoin de filtrer trois colonnes parmi onze colonnes existantes. Ensuite je les trie du plus petit au plus grand dans la colonne A. Enfin, je mets les doublons en surbrillance selon la colonne A

Ne maitrisant pas VBA j'ai utilisé l'enregistreur de macro. Je l'ai utilisé depuis la feuille appelée "Mercredi L1"

Voici mon problème : Si je lance ma macro en commençant par mercredi, puis les autres jours tout se déroule normalement

Si je lance la macro depuis un autre jour elle plante à la ligne ".Apply"

Si je recopie ma macro en remplaçant partout "mercredi L1" par un autre jour de la semaine, je peux la lancer dans la feuille correspondante, mais je ne trouve pas cela très propre... Sauriez-vous m'aider à n'avoir qu'une seule macro qui fonctionne avec toutes les feuilles ?

Ci dessous, la macro créée avec l'enregistreur de macro...

Merci d'avance pour votre aide

Sub Nettoyage_Synthese_Mercredi_L1()
'
' Nettoyage_Synthese Macro_Mercredi_L1
'
Range("A1").Select
Application.ScreenUpdating = False
Cells.Select
Selection.UnMerge
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Cells.Select
Selection.EntireColumn.Hidden = False
Range("A:A,C:C,E:E,F:F,G:G,H:H,I:I,K:K,L:L,M:M,N:N,O:O,P😛,Q:Q,R:R,S:S,T:T"). _
Select
Range("T1").Activate
Selection.Delete Shift:=xlToLeft
Columns("A:A").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$A$414").AutoFilter Field:=1, Criteria1:="=Poste", _
Operator:=xlOr, Criteria2:="="
ActiveWindow.SmallScroll Down:=223
Cells.Select
Selection.Delete Shift:=xlUp
ActiveWorkbook.Worksheets("Mercredi L1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Mercredi L1").Sort.SortFields.Add2 Key:=Range( _
"A1:A414"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Mercredi L1").Sort
.SetRange Range("A1:U414")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Columns("A:A").Select
Selection.FormatConditions.AddUniqueValues
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
Selection.FormatConditions(1).DupeUnique = xlDuplicate
With Selection.FormatConditions(1).Font
.Color = -16383844
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13551615
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Columns("C:C").Select
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _
Formula1:="=29"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16383844
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13551615
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Range("A1").Select
Dim s As Shape
For Each s In ActiveSheet.Shapes
s.Delete
Next
Application.ScreenUpdating = True
End Sub
Nous avons tous étaient novices. Sans fichier, difficile de t'aider. Tu pourrais monter un fichier avec des données bidons.

Cependant, tu nous ceci:
Ce classeur contient plusieurs feuilles dont "lundi" "mardi" "mercredi" "jeudi" "vendredi" "samedi" "dimanche"
Mais ensuite, tu dis:
Ne maitrisant pas VBA j'ai utilisé l'enregistreur de macro. Je l'ai utilisé depuis la feuille appelée "Mercredi L1"
Alors cette feuille se nomme "mercredi" ou "Mercredi L1"

Ce que tu n'as pas compris, est de nous expliquez ce tu veux faire. En lisant, le code généré par l'enregistreur de ma macro. on n'arrive plus à suivre. Par exemple cette ligne de code: ActiveWindow.SmallScroll Down:=223 , tu es arrivé où vers le bas (tu as ciblé quoi?).

edit: quand tu seras prêt à nous aider pour t'aider. Reviens
 
Dernière édition:
Nous avons tous étaient novices. Sans fichier, difficile de t'aider. Tu pourrais monter un fichier avec des données bidons.

Cependant, tu nous ceci:

Mais ensuite, tu dis:

Alors cette feuille se nomme "mercredi" ou "Mercredi L1"

Ce que tu n'as pas compris, est de nous expliquez ce tu veux faire. En lisant, le code généré par l'enregistreur de ma macro. on n'arrive plus à suivre. Par exemple cette ligne de code: ActiveWindow.SmallScroll Down:=223 , tu es arrivé où vers le bas (tu as ciblé quoi?).

edit: quand tu seras prêt à nous aider pour t'aider. Reviens
Voici une macro qui fonctionne (pour ceux qui viendront par la suite...)


Sub Nettoyage_Synthese_Lx_MFC()
With ActiveSheet
If .Name Like "* L#" Then 'nom de la feuille se termine avec un espace, un "L" et un chiffre
With .Cells
.EntireColumn.AutoFit
.UnMerge
End With

.Rows(1).Delete
.Columns("A:C").Insert Shift:=xlToRight
.Columns("E:E").Copy .Range("A1")
.Columns("G:G").Copy .Range("B1")
.Columns("M:M").Copy .Range("C1")
.Columns("D").Resize(, 100).Delete Shift:=xlToLeft

With .Range("A1").Resize(500, 3)
.Sort .Range("A1"), xlAscending, Header:=xlYes
.AutoFilter 1, "Poste*", xlOr, "="
Application.DisplayAlerts = False
.Offset(1).SpecialCells(xlVisible).Delete
Application.DisplayAlerts = True
.AutoFilter
.EntireColumn.AutoFit

With .Offset(1).Columns(1)
.FormatConditions.AddUniqueValues
.FormatConditions(1).DupeUnique = xlDuplicate
.FormatConditions(1).Interior.Color = 16738047
End With

With .Offset(1).Columns(3)
.FormatConditions.Add Type:=xlExpression, Formula1:="=C2>29"
.FormatConditions(1).Interior.Color = 13395711
End With
End With
Else
MsgBox "nom de la feuille est faux"
End If

For Each shp In .Shapes
shp.Delete
Next

End With
End Sub
 
Voici une macro qui fonctionne (pour ceux qui viendront par la suite...)


Sub Nettoyage_Synthese_Lx_MFC()
With ActiveSheet
If .Name Like "* L#" Then 'nom de la feuille se termine avec un espace, un "L" et un chiffre
With .Cells
.EntireColumn.AutoFit
.UnMerge
End With

.Rows(1).Delete
.Columns("A:C").Insert Shift:=xlToRight
.Columns("E:E").Copy .Range("A1")
.Columns("G:G").Copy .Range("B1")
.Columns("M:M").Copy .Range("C1")
.Columns("D").Resize(, 100).Delete Shift:=xlToLeft

With .Range("A1").Resize(500, 3)
.Sort .Range("A1"), xlAscending, Header:=xlYes
.AutoFilter 1, "Poste*", xlOr, "="
Application.DisplayAlerts = False
.Offset(1).SpecialCells(xlVisible).Delete
Application.DisplayAlerts = True
.AutoFilter
.EntireColumn.AutoFit

With .Offset(1).Columns(1)
.FormatConditions.AddUniqueValues
.FormatConditions(1).DupeUnique = xlDuplicate
.FormatConditions(1).Interior.Color = 16738047
End With

With .Offset(1).Columns(3)
.FormatConditions.Add Type:=xlExpression, Formula1:="=C2>29"
.FormatConditions(1).Interior.Color = 13395711
End With
End With
Else
MsgBox "nom de la feuille est faux"
End If

For Each shp In .Shapes
shp.Delete
Next

End With
End Sub
J'espère que tu n'aies pas plus de 500 lignes par feuilles.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour