(RESOLU) exécution macro sous condition

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Recherchant une solution à mon problème sur le net, j'ai trouvé votre site et je me suis inscrit. Je me permets de vous poser déjà ma question :

je me suis fait un fichier excel et je butte sur un truc/

je voudrais qu'une macro ou instruction puisse exécuter ce qui suit :

si mois = 1............. éxécute macro 1
si mois = 2............. éxécute macro 2
etc. jusqu'à 12

Mes 12 macros sont presques identiques.
La seule chose qui diffère est la suivante :
En fait, je voudrais copier deux mêmes colonnes d'une feuille ( les infos changent chaque mois ) sur des colonnes différentes (deux colonnes par mois ) d'une autre feuilles.

Je vais essayer de m’expliquer au mieux.
Le classeur est un suivi de présence du personnel avec une mise à jour « automatique » des congés payés.
Dans la feuille de base des saisies, il y a deux colonnes qui contiennent des formules permettant le calcul des congés « acquits » et des congés pris du mois traité.
Dans une autre feuille, je copie à l’aide de ma macro ces deux colonnes en « valeurs » uniquement.
Cependant, pour conserver « l’historique » mensuel des congés, chaque mois, je dois copier les colonnes dans cette feuille dans des colonnes différentes ( 2 par mois acquits et pris )
De plus, chaque mois de janvier, je copie également la colonne report N-1.
Voilà, en espérant être le plus clair possible.

Alors, si vous avez la solution car je n'y connais rien en VBA, cela m'arrangerait bien.

Avec mes remerciements,
Amicalement,
Lionekl,
 

Pièces jointes

  • Pointage Matrice test.xlsm
    246.1 KB · Affichages: 93
  • Pointage Matrice test.xlsm
    246.1 KB · Affichages: 92
  • Pointage Matrice test.xlsm
    246.1 KB · Affichages: 87
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : exécution macro sous condition

Bonsoir à tous, Bienvenue arthour973 sur XLD

Une autre voie possible avec l'utilisation de Application.Run
Code:
Sub Test()
MsgBox Month(Date) ' juste vérifier le nombre renvoyé
Application.Run "Macro" & Month(Date)
End Sub
Code:
Private Sub Macro12()
MsgBox "Nous sommes le " & Format(Date, "dddd dd mmmm yyyy") & "."
End Sub
Fonctionne si tes macros sont nommées: Macro1, Macro2 ..., Macro12

Tu vois comment adapter cet exemple à ton cas concret ?
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re : exécution macro sous condition

Bonjour et vraiment merci poutr vos réponses.
Je suis vraiment nul en VBA, j'ai essayé dans tous "mes" sens possibles vos deux propositions mais je n'y arrive pas.
Quand je lance vos macros, rien ne se passe et je ne sais pas les faire marcher.
Ce que je peux vous dire, c'est que mes macros sont nommées : Macro1 Synthèse01 etc jusqu'à 12
J'en suis désolé,
Amicalement,
Lionel,
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re : exécution macro sous condition

Bonsoir,
Ci-dessous, je vous copie deux de mes macros concernées.

pour le mois de janvier :

Sub Synthèse01()
'
' Macro1 Synthèse01
'

'
Sheets("Synthèse").Select
ActiveSheet.Unprotect

Sheets("matrice").Select
ActiveSheet.Unprotect

Columns("B:C").Select
Selection.Copy

Sheets("Synthèse").Select
Columns("B:C").Select
Range("B6").Activate
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Columns("B:C").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("matrice").Select
Columns("MH:MH").Select
Selection.Copy
Columns("ME:ME").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("ME8").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "Cuml Av."

Columns("LY:MH").Select
Application.CutCopyMode = False
Selection.Copy

Sheets("Synthèse").Select
Columns("E:N").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("matrice").Select
Range("MJ10").Select
ActiveCell.FormulaR1C1 = "=IF(MONTH(R7C3)=1,RC[-5],0)"
Range("MJ10").Select
Selection.Copy
Range("MJ10:MJ500").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

Range("MJ10:MJ500").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.Replace What:="0", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Application.CutCopyMode = False
Range("C7").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

Columns("MJ:MM").Select
Selection.Copy
Range("C7").Select

Sheets("Synthèse").Select
Range("P1").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Columns("E:H").Select
Selection.ColumnWidth = 7
Columns("I:I").Select
Selection.ColumnWidth = 0.5
Columns("J:N").Select
Selection.ColumnWidth = 7
Columns("O").Select
Selection.ColumnWidth = 0.5
Columns("Q").Select
Selection.ColumnWidth = 0.5
Columns("R:AO").Select
Selection.ColumnWidth = 4
Columns("P").Activate
Selection.ColumnWidth = 7
Range("C7").Select

Range("R7").Select
Selection.Copy
Range("AS4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("R7").Select
Selection.Copy
Range("AS4").Select
ActiveSheet.Paste
Range("R7:AO7").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("AS4").Select
Selection.Copy
Range("R7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("AS4").Select
Application.CutCopyMode = False
Selection.ClearContents
ActiveWindow.LargeScroll ToRight:=-1

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

Sheets("matrice").Select
Range("C7").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveWindow.LargeScroll ToRight:=-1
Sheets("Procèdure").Select
End Sub

Celle de février (sachant que les 10 autres sont identiques sauf les colonnes de réception) :

Sub Synthèse02()
'
' Macro1 Synthèse02
'

'
Sheets("Synthèse").Select
ActiveSheet.Unprotect

Sheets("matrice").Select
ActiveSheet.Unprotect

Columns("B:C").Select
Selection.Copy

Sheets("Synthèse").Select
Columns("B:C").Select
Range("B6").Activate
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Columns("B:C").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("matrice").Select
Columns("MH:MH").Select
Selection.Copy
Columns("ME:ME").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("ME8").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "Cuml Av."

Columns("LY:MH").Select
Application.CutCopyMode = False
Selection.Copy

Sheets("Synthèse").Select
Columns("E:N").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("matrice").Select
Columns("ML:MM").Select
Selection.Copy
Range("C7").Select

Sheets("Synthèse").Select
Range("T1").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Columns("E:H").Select
Selection.ColumnWidth = 7
Columns("I:I").Select
Selection.ColumnWidth = 0.5
Columns("J:N").Select
Selection.ColumnWidth = 7
Columns("O").Select
Selection.ColumnWidth = 0.5
Columns("Q").Select
Selection.ColumnWidth = 0.5
Columns("R:AO").Select
Selection.ColumnWidth = 4
Columns("P").Activate
Selection.ColumnWidth = 7
Range("C7").Select

Range("R7").Select
Selection.Copy
Range("AS4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("R7").Select
Selection.Copy
Range("AS4").Select
ActiveSheet.Paste
Range("R7:AO7").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("AS4").Select
Selection.Copy
Range("R7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("AS4").Select
Application.CutCopyMode = False
Selection.ClearContents
ActiveWindow.LargeScroll ToRight:=-1

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

Sheets("matrice").Select
Range("C7").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveWindow.LargeScroll ToRight:=-1
Sheets("Procèdure").Select
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : exécution macro sous condition

Bonsoir

Je croyais pourtant avoir été explicite
Fonctionne si tes macros sont nommées: Macro1, Macro2 ..., Macro12
Donc si tu essayes simplement mon exemple dans un classeur vierge (juste pour comprendre le fonctionnement de la macro) tu verras que cela fonctionne, il se passe bien quelque chose quand tu lances la macro nommée Test

Ensuite , il te suffit de modifier ton code si tu trouves la logique utilisée pratique.

EDITION: Je viens d'ouvrir ta pièce jointe (j'aurai du le faire avant si j'avais su)
Il est d'usage sur le forum de joindre des fichiers sans données confidentielles.
(Tu le saurai si tu avais lu la charte, mais il n'est pas trop tard pour le faire
Je te dis même ou elle est rangée, la friponne : Lien supprimé

Remplaces les noms dans ta PJ avec des NOM1, NOM2 etc.. et PRENOM1, PRENOM2
puis en aller dans Gérer les pièces jointes , ensuite mets cette nouvelle pièce jointe anonymisée à la place de l'ancienne.

PS: Tu peux aussi ignorer tout ce que je viens de dire dans cette EDITION (comme beaucoup de nouveaux membres du forum le font de plus en plus :rolleyes: )
Dans ce cas, je serai tout triste et chafouin mais je suppose que tu t'en fiches.
Et tu as bien raison.... ou pas.
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re : exécution macro sous condition

Bonjour,
Merci pour votre réponse.
Je vais essayer votre macro comme vous me le dites car je n'y avais pas pensé.
En ce qui concerne la suite de votre message, bien au contraire de ce que vous me dite, je vais en tenir compte. Je suis nouveau sur ce site et c'est vrai, je n'ai pas consulté la chartre..... j'aurais du le faire. Nous sommes tous très occupés et on ne prend pas le temps..... je n'en suis pas trop fière.
Donc, merci pour vos conseils, je fais partie de ceux qui écoutes et qui tiennent comptes des avis éclairés.
Encore merci,
Amicalement,
Lionel,
 

Staple1600

XLDnaute Barbatruc
Re : exécution macro sous condition

Bonsoir à tous

arthour973
Avant de savoir ou mettre le code, prenons le temps de respirer.
1) Sauf erreur de ma part, tu n'as pas modifié ta pièce jointe en la remplaçant par un autre fichier ne contenant des données anonymes et non confidentielles.
(Si mon nom figurait dans un fichier d'une de mes collègues , je n'apprécierai pas qu'elle le mette en ligne, donc j'ai donné à ma collègue deux choses:
un bisou pour lui dire Bonjour quand je lui ai remis ma demande de congés pour la fin de l'année.
une tite macro pour anonymiser tous les strings qu'elle peut générer, la coquine
(c'était facile, j'ai créé et poster un outil sur XLD pour ce faire)
2) Pour tester le code de mon précédent message, oublie ton fichier et crée un classeur vierge dans Excel (tu peux aussi créer un nouveau classeur si tu préfères ;) )
• Ca y est ?
Tu as donc un classeur avec 3 feuilles vides (ou plus cela peut varier)
Dans la feuille 1 de ce classeur, tu sélectionnes la cellule A1 puis tu vas dans le menu: Outils/Macros
et tu choisis Microsoft Visual Basic Editor
(il existe un raccourci pour se rendre directement dans VBE: ALT+F11)
• Ça y est tu n'es plus sur la feuille Excel mais dans VBE ?
Là, tu vas dans le menu Insertion et tu choisis Module et dans la partie blanche, à droite, tu y copies/colles les macros de mes précédents messages.
• Puis pour lancer la macro, tu retournes dans Excel (en faisant ALT+Q),
et tu refais Outils/Macros/ et tu choisis la macro ,
tu la sélectionnes et tu cliques sur Exécuter.

EDITION: je viens de me rendre compte que je donnais les même conseils mais sans les détails dans mon précédent message, normalement avec tout ceci, tu dois arriver à faire fonctionner l'exemple de mon précédent message.
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re : exécution macro sous condition

Bonjour,
J'ai fait un nouveau fichier excel, copié vos macros et exécuter. Il m'affiche un cadre indiquant le nombre 12 (non modificable) et quand je fais ok, me donne la date du jour.

Mais je ne sais que faire parès cela.
Amicalement,
Lionel,

J'en profite pour vous poser une question sur le fonctionnement du site car je n'ai pas trouvé comment on met résolu sur une discussion et j'en ai 2 qui le sont.
 

Staple1600

XLDnaute Barbatruc
Re : exécution macro sous condition

Bonjour Lionel, le fil, le forum

Ce que tu appelles un cadre :
c'est une MsgBox (qui permet d'afficher des informations pour prévenir l'utilisateur)
(La touche F1 t'en dira plus long sur les différentes formes de MsgBox et la syntaxe VBA les concernant)

Je vais t'explique plus en détail la logique de fonctionnement de mon exemple
• Cette partie du code (l'emploi de Month)
MsgBox Month(Date)
permets d'afficher le numéro du mois en cours
(mois en cours que l'on connait grâce à Date qui affiche la date du jour courant)
• Donc comme nous sommes en décembre, tu verras s'afficher 12
Pour la suite de la macro, si dans ton classeur , tu as 12 macros ainsi nommés:
"Macro" & numéro d'un des douze mois de l'année , ce qui donne: Macro12 (pour le mois de décembre)
alors cette partie de la macro:
Application.Run "Macro" & Month(Date)
permets de lancer la macro qui se nomme : Macro12 (car nous sommes en décembre)
Si nous avions été en novembre, elle aurait lancé la macro avec le nom Macro11.

Mes explications t'ont permis de comprendre le fonctionnement de cette exemple?


 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re : exécution macro sous condition

Bonjour JM,
Vraiment merci pour vos explications clairs, pédagogue sans doute, je crois que j'ai compris.
Je vais changer ma date système et essayer pour le plaisir.

Mais il y a un truc que je ne comprends pas vraiment :

J'ai nommé mes macros "macro01" jusqu'à 12
dans votre macro, il exécute la macro12
comment pourra-t-il exécuter les macros de 01 à 11 qd il le faudra ?

Encore un grand merci.
Amicalement,
Lionel,
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : exécution macro sous condition

Re Lionel

Ci dessous, un exemple un peu plus compliqué
(Dis-moi s'il y a des choses que tu ne comprends pas)
Code:
Sub TestBis()
Dim tMois, TestMois&
tMois = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)

TestMois = _
    InputBox("Saisir le numéro d'un mois : de 1 à 12" & vbCrLf & vbTab & _
            "(valeur par défaut: numéro du mois en cours)", _
            "Choix du mois", _
            Month(Date)) - 1
            Application.Run "Ta_Macro", tMois(TestMois)
End Sub
Code:
Private Sub Ta_Macro(avecParametres)
Select Case avecParametres
Case 1 To 12
MsgBox UCase(MonthName(avecParametres)), vbInformation, "RESULTATS"
End Select
End Sub

Pour tester , lances la macro : TestBis

PS: Est-ce que tu vois vers quelle logique j'essaie de t'emmener ?
 

Discussions similaires

Statistiques des forums

Discussions
312 386
Messages
2 087 854
Membres
103 669
dernier inscrit
Anne Sicard