Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

(RESOLU) exécution macro sous condition

Usine à gaz

XLDnaute Barbatruc
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:

Usine à gaz

XLDnaute Barbatruc
Re : exécution macro sous condition


Bonsoir,
dsl, je ne comprends pas du tout, (certainement suis-je un peu lourd) je ne connais pas VBA et je ne parle pas anglais, alors, c'est pas une vraie promenade.
Amicalement,
Lionel,
 

Usine à gaz

XLDnaute Barbatruc
Re : exécution macro sous condition

Bonsoir,
dsl, je ne comprends pas du tout, (certainement suis-je un peu lourd) je ne connais pas VBA et je ne parle pas anglais, alors, c'est pas une vraie promenade.
Amicalement,
Lionel,

J'ai essayé cette nouvelle macro mais la première me convient mieux car je ne souhaite pas qu'on ai la possibilité d'exécuter un mois qui n'est pas le mois en cours. Mais comment cette macro va-t-elle exécuter les autres mois puique seule "macro12" est indiqué ?
Amicalement,
Lionel,
 

Staple1600

XLDnaute Barbatruc
Re : exécution macro sous condition

Bonsoir

Peux-tu tester cette partie de ta macro Synthese01 (j'ai fait un peu de ménage)
VB:
Sub Synthèse01Bis()
Sheets("Synthèse").Unprotect
Sheets("matrice").Unprotect
    
Sheets("matrice").Columns("B:C").Copy
With Sheets("Synthèse")
    With .Columns("B:C")
    .PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
     End With

Sheets("matrice").Columns("MH:MH").Copy
With .Columns("ME:ME")
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With
.Range("ME8") = "Cuml Av."

Sheets("matrice").Columns("MH:MH").Copy
With .Columns("E:N")
    .PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
  End With
  

Sheets("matrice").Range("MJ10").FormulaR1C1 = "=IF(MONTH(R7C3)=1,RC[-5],0)"
Sheets("matrice").Range("MJ10").Copy
With .Range("MJ10:MJ500")
.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False
End With
End With
'pour le moment je me suis arrêté là
End sub
 

Usine à gaz

XLDnaute Barbatruc
Re : exécution macro sous condition

Re-Bonsoir,
J'ai testé et..... rien compris.
Votre macro est d'un niveau que je suis loin d'avoir et là, je n'y arrive plus.
Les macros que je fais, vous l'avez certainement deviné sont celles qu'excel "fait" en cliquant sur créer une macro.
J'ai essayé de comprendre la votre en fonction de la mienne et je n'y arrive pas.
Alors, j'en suis désolé mais je vous aurais fait passer du temps pour rien car là, il vaut mieux que j'arrête.
pourtant, j'aurais simplement voulu savoir comment adapter votre première macro test pour qu'elle puis exécuter tous les mois de 1 à 12, cela m'aurait été suffisant.
Je vous remercie vivement de tout le temps que vous m'avez consacré, j'en suis sincèrement touché.
Amicalement,
Lionel,
 

Staple1600

XLDnaute Barbatruc
Re : exécution macro sous condition

Re Lionel

Alors, j'en suis désolé mais je vous aurais fait passer du temps pour rien car là, il vaut mieux que j'arrête.
Qui t'a dit que j'ai perdu mon temps

Mes modifications les dernières avait juste le souci d'alléger ton code.
Si je t'ai demandé de tester c'est pour savoir si le résultat était identique à ta macro initiale.
(Pas toute la macro seulement la partie que j'ai simplifié en supprimant les Select qui sont des traces de l’enregistreur de macros.)

Maintenant, je vais essayé de répondre simplement à ce point là:
exécuter tous les mois de 1 à 12, cela m'aurait été suffisant.
PS: C'est tout à ton honneur de créer des macros avec l’enregistreur de macros, c'est le point départ idéal pour découvrir VBA.

Pour aller au plus simple, il faudrait être d'accord sur un cahier des charges.
Je vais essayer de résumer ce que j'ai compris
1) tu as douze macros identiques
But à atteindre: remplacer les douze macros par une seule - Exact ?
2) Cette macro unique devra prendre comme paramètre : le numéro du mois courant
Exemple: nous sommes en décembre, donc la macro devra faire ce qui est prévu pour le mois de décembre (dans ce cas la macro unique est à lancer une fois par mois) - Exact ?
3) Ce qui change ce sont les colonnes de réception de tes données selon les mois -Exact
Peux-tu détailler pour chaque mois, quelles sont les colonnes ou la recopie devra se faire.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : exécution macro sous condition

Re

Je t'ai concocté un exemple simple
Dis moi si tu souhaites que je continue dans cette voie.
Essaies le code ci-dessous dans un classeur vierge
La macro a sert à créer des données dans 12 colonnes
(pour les 12 mois)
Elle est appelée quand tu lances la macro test
qui ensuite appele la macro synthese avec pour paramètre le numéro du mois en cours
Le résultat final montre que la recopie se fait dans la bonne colonne
(en tout cas dans ce simple exemple)
VB:
Sub test()
Dim P_ause
Sheets(2).Cells.Clear
a 'macro servant juste à te donner un exemple tout fait
synthese Month(Date)
P_ause = MsgBox("Données du mois en cours " & MonthName(Month(Date)) & " sont copiées où il faut." & vbCrLf & "Cliquez sur OK pour voir où.", 6, "FIN DU TEST")
Sheets(1).Activate ' pour voir le résultat
End Sub

VB:
Private Sub a()
' Macro enregistrée le 17/12/2011 par EXCEL
With Sheets(2)
    .Activate
    .Range("A1") = "JANVIER"
    .Range("A1").AutoFill Destination:=Range("A1:L1"), Type:=xlFillDefault
    With .Range("A2:L11")
    .FormulaR1C1 = "=R1C&""-""&ROW()-1"
    .Value = .Value
    End With
End With
End Sub
VB:
Private Sub synthese(mois As Long)
Dim ADRESSE_DONNEES
ADRESSE_DONNEES = _
    Array("A1:A11", "B1:B11", "C1:C11", "D1:D11", "E1:E11", "F1:F11", _
    "G1:G11", "H1:H11", "I1:I11", "J1:J11", "K1:K11", "L1:L11")
Select Case mois
Case 1
'ici mettre pour le mois de janvier
Case 2
'etc .. pour chaque mois
'en adaptant l'adresse des cellules ou la recopie doit se faire
Case 12
Sheets(1).Range("L1:L11").Value = Sheets(2).Range(ADRESSE_DONNEES(mois - 1)).Value
End Select
End Sub

PS: Ces codes ne sont des que exemples pour t'aider à comprendre où je veux en venir ce n'est pas une solution finie à ta question.

Mais tu vois que je n'ai besoin que d'une seule macro qui recopie des données dans une colonne différente selon le mois en cours.
 

Usine à gaz

XLDnaute Barbatruc
Re : exécution macro sous condition


Bonjour,
J'ai essayé, je vois bien que votre macro fonctionne mais je n'y comprends rien vraiment.
Ne connaissant pas VBA, en créant des macros avec l'aide d'excel, je m'y retrouve mais "en allégeant" le code, je ne m'y retrouve plus.
C'est la raison pour laquelle, puisque dans mes macros "synthèse", il y a, en plus des copies de colonnes différentes selon les mois, des copies autres avec formatages de colonnes, copies uniquement en valeurs etc.
Si nous pouvons arriver à la solution finale, et si cela est possible, il me semble que seule la réponse à votre première macro m'irai parfaitement : "j'aurais simplement voulu savoir comment adapter votre première macro test pour qu'elle puis exécuter tous les mois de 1 à 12, cela m'aurait été suffisant."
pour vous montrer mes macros "synthèse", je vous joins mon fichier.
Amicalement,
Lionel,
 

Pièces jointes

  • Pointage Matrice essai pour JM.xlsm
    234.7 KB · Affichages: 29

Staple1600

XLDnaute Barbatruc
Re : exécution macro sous condition

Bonjour

Tu parles de cette macro ?
https://www.excel-downloads.com/threads/resolu-execution-macro-sous-condition.174828/

Telle qu'elle est écrite, elle ne s’exécute qu'en lançant la macro dont le nom se termine par le numéro du mois en cours.
Pour lancer tes douze macros, il faudrait modifier ainsi

Code:
Sub LancerTout()
Dim i As Byte
For i=1 to 12
Application.Run "Synthese" & Format(i,"00")
Next i
End Sub
Mais c'est dommage de ne pas vouloir aller voir de l'autre côté , derrière l'enregistreur de macros
Mais c'est ton choix.

J'aurai du le comprendre avant et te proposer simplement cette macro plutôt.
Désolé


PS: Je n'ai pas ouvert ta seconde PJ, j'espère que tu l'as anonymisé avant de la poster sur le forum.
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Re : exécution macro sous condition

Bonjour,
Oui, je parle de cette macro :

Sub Test()
MsgBox Month(Date) ' juste vérifier le nombre renvoyé
Application.Run "Macro" & Month(Date)
End Sub
Private Sub Macro12()
MsgBox "Nous sommes le " & Format(Date, "dddd dd mmmm yyyy") & "."
End Sub

Je vois biden tous les efforts que vous faites et le temps que vous passez. Comment vous en remercier ?

"Mais c'est dommage de ne pas vouloir aller voir de l'autre côté , derrière l'enregistreur de macros
Mais c'est ton choix."


Bien, sur que je voudrais passer de l'autre côté.... mais là, c'est trop brutal pour mon neurone, je suis encore pucelle !
Quant au fichier joint, j'ai enlevé les infos "personnalisées"

Je vais essayer ce que vous m'avez envoyé ci-dessus.
Amicalement,
Lionel,
 

Staple1600

XLDnaute Barbatruc
Re : exécution macro sous condition

Re


Tu as essayé la macro LancerTout?

PS: J'adore déflorer la pucelle en VBA, la nuit venue, tapi derrière mon grand ALT+F11, et c'est direct, pas de préliminaires, car je suis toujours en Option Explicit.



NB: J'ai pas osé ajouté et aussi en Option Baise 1, car on est dimanche quand même ! et le dimanche faut pas avoir de pensées impures, surtout que tout à l'heure y a les vêpres.
 

Usine à gaz

XLDnaute Barbatruc
Re : exécution macro sous condition

J'ai modifié le nom de mes macros et ça marche tu tonnerre.
Cependant, les douze macros s'exécute et, bien sur, j'ai les mêmes infos dans tous les mois.
Mon but est d'avoir les infos de chaque mois dans les colonnes de destinations : infos 01 en 01 récepteur etc....
Il faudrait que votre macro n'exécute que le mois en cours de traitement. soit en ce moment, uniquement décembre. Mais il ne faut pas qu'il prenne en compte la date du jour réel mais la date saisie en : cellule "J4" dans ma feuille procèdure.
Alors là, ce serait parfait !!!!
Lionel,
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : exécution macro sous condition

Re


J'ai déjà répondu à cette question, non ? (avec l'emploi de month(date) )
par rapport à la date du jour
Code:
Sub LancerMOISCOURANT()
Application.Run "Synthese" & Format(Month(Date),"00")
End Sub

ou par rapport à J4
Code:
Sub LancerMOISCOURANTJ4()
Dim MC As Long
MC=Month(Sheets("Procedure").[J4])
Application.Run "Synthese" & Format(MC,"00")
End Sub

PS: Je pense que tu avais tous les éléments pour adapter par toi-même...
 
Dernière édition:

Discussions similaires

Réponses
14
Affichages
301
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…