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...
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
Bonjour,

Où est ton fichier avec ta macro?
 
Bonjour,

Où est ton fichier avec ta macro?
Bonjour

Voici un extrait de la macro : Elle plante à la ligne ".Apply"

Sub Nettoyage_Synthese_Mercredi_L1()
'
' Nettoyage_Synthese Macro_Mercredi_L1
'
Range("A1").Select
Application.ScreenUpdating = Faux
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

Je joins également le fichier ci dessous
Perceval
 

Pièces jointes

Bonjour

Voici un extrait de la macro : Elle plante à la ligne ".Apply"

Sub Nettoyage_Synthese_Mercredi_L1()
'
' Nettoyage_Synthese Macro_Mercredi_L1
'
Range("A1").Select
Application.ScreenUpdating = Faux
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

Je joins également le fichier ci dessous
Perceval
En lisant ton 1er post, il est question de plusieurs feuilles. Or sur ton fichier, il n'y en a qu'une seule.
Ta macro a été créée par l'enregistreur, elle ne peut pas fonctionnait pour différente feuille.
Les "Select" et "Selection" sont à éviter, elles n'apportent rien et ralentissent le code inutilement.
j'ai consulté tes macros, tu utilises par exemple ces lignes
VB:
Columns("c:c").Hidden = False
Columns("e:e").Hidden = False
Columns("g:g").Hidden = False
Columns("i:i").Hidden = False
Columns("k:k").Hidden = False
Columns("m:m").Hidden = False
Columns("o:o").Hidden = False
Columns("q:q").Hidden = False
Columns("s:s").Hidden = False
Columns("u:u").Hidden = False
Columns("w:w").Hidden = False
Columns("y:y").Hidden = False
Columns("aa:aa").Hidden = False
Columns("ac:ac").Hidden = False
Columns("ae:ae").Hidden = False
Columns("ag:ag").Hidden = False
Columns("ai:ai").Hidden = False
Columns("ak:ak").Hidden = False
Columns("am:am").Hidden = False
Columns("ao:ao").Hidden = False
On fait la même chose en une seule ligne de code
Code:
Columns("C,E,G,I,K,M,O,Q,S,U,W,Y,AA,AC,AE,AG,AI,AK,AM,AO").Hidden = False
'il manque aussi la référence de la feuille auxquelles appartiennent ces colonnes'

Explique-nous ce que tu veux obtenir.
Bonne journée
 
En lisant ton 1er post, il est question de plusieurs feuilles. Or sur ton fichier, il n'y en a qu'une seule.
Ta macro a été créée par l'enregistreur, elle ne peut pas fonctionnait pour différente feuille.
Les "Select" et "Selection" sont à éviter, elles n'apportent rien et ralentissent le code inutilement.
j'ai consulté tes macros, tu utilises par exemple ces lignes
VB:
Columns("c:c").Hidden = False
Columns("e:e").Hidden = False
Columns("g:g").Hidden = False
Columns("i:i").Hidden = False
Columns("k:k").Hidden = False
Columns("m:m").Hidden = False
Columns("o:o").Hidden = False
Columns("q:q").Hidden = False
Columns("s:s").Hidden = False
Columns("u:u").Hidden = False
Columns("w:w").Hidden = False
Columns("y:y").Hidden = False
Columns("aa:aa").Hidden = False
Columns("ac:ac").Hidden = False
Columns("ae:ae").Hidden = False
Columns("ag:ag").Hidden = False
Columns("ai:ai").Hidden = False
Columns("ak:ak").Hidden = False
Columns("am:am").Hidden = False
Columns("ao:ao").Hidden = False
On fait la même chose en une seule ligne de code
Code:
Columns("C,E,G,I,K,M,O,Q,S,U,W,Y,AA,AC,AE,AG,AI,AK,AM,AO").Hidden = False
'il manque aussi la référence de la feuille auxquelles appartiennent ces colonnes'

Explique-nous ce que tu veux obtenir.
Bonne journée
Je suis novice ET je récupère un fichier que je n'ai pas créé ET qui est alimenté par une 15aines de personnes
Moi j'ai juste besoin d'en extraire quelques lignes sur colonnes
Donc je commence par le nettoyer (annuler les fusions, supprimer les lignes vides, trier du plus petit au plus grand, mettre en surbrillance les doublons)
Enfin, je fais une synthèse "management oriented"
 
En lisant ton 1er post, il est question de plusieurs feuilles. Or sur ton fichier, il n'y en a qu'une seule.
Ta macro a été créée par l'enregistreur, elle ne peut pas fonctionnait pour différente feuille.
Les "Select" et "Selection" sont à éviter, elles n'apportent rien et ralentissent le code inutilement.
j'ai consulté tes macros, tu utilises par exemple ces lignes
VB:
Columns("c:c").Hidden = False
Columns("e:e").Hidden = False
Columns("g:g").Hidden = False
Columns("i:i").Hidden = False
Columns("k:k").Hidden = False
Columns("m:m").Hidden = False
Columns("o:o").Hidden = False
Columns("q:q").Hidden = False
Columns("s:s").Hidden = False
Columns("u:u").Hidden = False
Columns("w:w").Hidden = False
Columns("y:y").Hidden = False
Columns("aa:aa").Hidden = False
Columns("ac:ac").Hidden = False
Columns("ae:ae").Hidden = False
Columns("ag:ag").Hidden = False
Columns("ai:ai").Hidden = False
Columns("ak:ak").Hidden = False
Columns("am:am").Hidden = False
Columns("ao:ao").Hidden = False
On fait la même chose en une seule ligne de code
Code:
Columns("C,E,G,I,K,M,O,Q,S,U,W,Y,AA,AC,AE,AG,AI,AK,AM,AO").Hidden = False
'il manque aussi la référence de la feuille auxquelles appartiennent ces colonnes'

Explique-nous ce que tu veux obtenir.
Bonne journée
"Ta macro a été créée par l'enregistreur, elle ne peut pas fonctionnait pour différente feuille."
C'est bien ca mon problème 🙂
Pour les autres remarques, je te remercie de ton commentaire, mais je ne suis pas le créateur ni le propriétaire du classeur, alors je préfère ne pas y toucher
Je me contente de copier le classeur chaque matin et d'y effectuer mes propres opérations
C'est pour ca que j'ai enregistré la macro dans mon classeur perso
 
"Ta macro a été créée par l'enregistreur, elle ne peut pas fonctionnait pour différente feuille."
C'est bien ca mon problème 🙂
Pour les autres remarques, je te remercie de ton commentaire, mais je ne suis pas le créateur ni le propriétaire du classeur, alors je préfère ne pas y toucher
Je me contente de copier le classeur chaque matin et d'y effectuer mes propres opérations
C'est pour ca que j'ai enregistré la macro dans mon classeur perso
Donc tu ne peux pas nous expliquer les tenants et aboutissants de ton code qui ne fonctionne pas.
 
Donc tu ne peux pas nous expliquer les tenants et aboutissants de ton code qui ne fonctionne pas.
J'ai bien peur de ne pas comprendre ta question
Je peux expliquer la macro que j'ai créé avec l'enregistreur de macro dans le classeur que je recopie chaque jour
Elle ne fait que du nettoyage et des tris, elle fonctionne très bien a condition que que je l'exécute dans la feuille où elle a été créée (en l'occurrence Mercredi)
Et mon souhait est de pouvoir l'exécuter dans chaque feuille (Lundi, mardi, mercredi etc...)

La j'ai été obligé d'ouvrir Visual Basic et de la recopier pour chaque jour, cela fonctionne mais je trouve que ce n'est pas propre
Est-ce que j'ai réussi a être plus clair ? :-/
 
@Perceval973

Il manque une partie à ta macro que tu as mis au post #4



Cela sera mieux en ayant la totalité du code
La voici

Sub Nettoyage_Synthese()
'
' Nettoyage_Synthese Macro
'

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
End Sub
 
@Perceval973

Ce que je ne comprends pas c'est pourquoi le début de macro du post 4 et du post #13 ne sont pas identiques ???

Post #4
Sub Nettoyage_Synthese_Mercredi_L1()
'
' Nettoyage_Synthese Macro_Mercredi_L1
'
Range("A1").Select
Application.ScreenUpdating = Faux
Cells.Select

Et je doute fort que ceci fonctionne

Post #13

Sub Nettoyage_Synthese()
'
' Nettoyage_Synthese Macro
'

Cells.Select
Selection.UnMerge
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Cells.Select

Donc pour résumé tu nous fournis 2 codes différents qui sont censé être les mêmes ??????

Une explication s'impose car essayer de d'aider dans le vide et en sachant que cela ne fonctionnera pas ne m’intéresse pas beaucoup ! 🙄
 
@Perceval973

Ce que je ne comprends pas c'est pourquoi le début de macro du post 4 et du post #13 ne sont pas identiques ???

Post #4


Et je doute fort que ceci fonctionne

Post #13



Donc pour résumé tu nous fournis 2 codes différents qui sont censé être les mêmes ??????

Une explication s'impose car essayer de d'aider dans le vide et en sachant que cela ne fonctionnera pas ne m’intéresse pas beaucoup ! 🙄
Ce sont les mêmes codes, mais je cherche aussi à avancer par moi même
 
- 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