Associer 2 macros VBA en 1 seule pour 2 actions différentes

Bonjour, j'aimerais qu'en appuyant sur un bouton sur mon fichier excell, que les 2 macros suivantes se lancent.

Une recopie des données sur l'onglet "RECAP_HeureS" en supprimant les doublons c'est le module Imp_Recap

L' autre recopie des données sur l'onglet "RECAP_ABS_TR" logiquement en supprimant les doublons, mais je ne suis pas persuadé que ça soit le cas, c'est le module Imp_RecapABSTR

Malheureusement je ne sais pas comment faire pour coupler les 2 modules ensemble afin d'avoir qu'une seule intervention mais 2 actions bien différentes. Pour l'instant j'ai été obligé de créer 2 boutons bien distincts.

Merci de votre aide.

Imp_Recap

Sub ImpRecap()
Dim Hs_Norm, HS_Ferie, HS_Nuit As Double
Dim DrLigne, i As Long
Dim Nom As String, Mat As String
Dim Affect As String, P_Nuit As Double
Dim P_ins As Double, Total As Double
deprotege
deprotegerecap
Periode = ActiveSheet.Range("D1")
Nom = ActiveSheet.Range("AA8")
Mat = ActiveSheet.Range("U8")
Affect = ActiveSheet.Range("AA9")
Hs_Norm = ActiveSheet.Range("W46")
HS_Ferie = ActiveSheet.Range("X46")
HS_Nuit = ActiveSheet.Range("Y46")
P_Nuit = ActiveSheet.Range("AA46")
P_ins = ActiveSheet.Range("AB46")
Total = ActiveSheet.Range("Z46")

With Sheets("RECAP_HeureS")
    DrLigne = .Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To DrLigne
        If .Range("A" & i) = Nom And .Range("J" & i) = Periode Then
                .Range("B" & i) = Mat
                .Range("C" & i) = Affect
                .Range("D" & i) = Hs_Norm
                .Range("E" & i) = HS_Ferie
                .Range("F" & i) = HS_Nuit
                .Range("G" & i) = Total
                .Range("H" & i) = P_Nuit
                .Range("I" & i) = P_ins
                Exit Sub
        End If
    Next i
    .Range("A" & DrLigne + 1) = Nom
    .Range("B" & DrLigne + 1) = Mat
    .Range("C" & DrLigne + 1) = Affect
    .Range("D" & DrLigne + 1) = Hs_Norm
    .Range("E" & DrLigne + 1) = HS_Ferie
    .Range("F" & DrLigne + 1) = HS_Nuit
    .Range("G" & DrLigne + 1) = Total
    .Range("H" & DrLigne + 1) = P_Nuit
    .Range("I" & DrLigne + 1) = P_ins
    .Range("J" & DrLigne + 1) = Periode
End With
protege
protegerecap
End Sub
Sub protege()
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFiltering:=True, Password:="DSI2018"
    ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

Sub deprotege()
ActiveSheet.Unprotect Password:="DSI2018"
'mme MDP pour le classeurr
End Sub

Imp_RecapABSTR

Sub ImpRecapABSTR()
Dim TR As Double
Dim DrLigne, i As Long
Dim Nom As String, Mat As String
Dim Affect As String, P_Nuit As Double
Dim P_ins As Double, Total As Double, Mois As Long, TR As Integer
deprotege
deprotegerecapABSTR
Mois = ActiveSheet.Range("N1")
Nom = ActiveSheet.Range("AA8")
Mat = ActiveSheet.Range("U8")
Affect = ActiveSheet.Range("AA9")
TR = ActiveSheet.Range("P1")

With Sheets("Recap_ABS_TR")
    DrLigne = .Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To DrLigne
        If .Range("A" & i) = Nom And .Range("J" & i) = Mois Then
                .Range("B" & i) = Mat
                .Range("C" & i) = Affect
                .Range("D" & i) = TR
                Exit Sub
        End If
    Next i
    .Range("A" & DrLigne + 1) = Nom
    .Range("B" & DrLigne + 1) = Mat
    .Range("C" & DrLigne + 1) = Affect

End With
protege
protegerecapABSTR
End Sub
Sub protegeABSTR(feuille As String)
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFiltering:=True, Password:="DSI2018"
    ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

Sub deprotegeABSTR(feuille As String)
ActiveSheet.Unprotect Password:="DSI2018"
'mme MDP pour le classeurr
End Sub

Salut,

A un certain moment de ton code 1 - probablement à la fin - tu ajoutes une ligne

ImpRecapABSTR

ou

Call ImpRecapABSTR

et cette deuxième macro sera ''appelée'' depuis la première.

Si tu travailles au pas à pas, tu verras que les instructions de la première macro sont exécutées, puis ça passe à la seconde macro puis ça revient finir la première (souvent il ne reste plus que End Sub à exécuter, mais pas toujours).

Amicalement.

Merci mais je ne vois vraiment pas ou mettre le "Call ImpRecapABSTR" car en associant les 2 macros, la 1ère s'exécute très bien mais pas la 2ème

Par contre lorsque je crée un 2ème bouton qui va chercher la 2ème marco et bien cette dernière fonctionne parfaitement.

Regarde la démo ci-jointe, ça devrait t'aider.

Tu peux aussi essayer de déplacer la ligne Call Macro2 au-dessus de l'autre ligne dans le code 1 pour voir l'effet.

Tu connais le pas à pas ?

Sinon fournis-moi ton fichier.

Chaleureusement

59demo-call.xlsm (17.17 Ko)

Voici les fichiers joints

Comment fonctionnent-ils :

Ils sont tous reliés entre eux, mais les 2 plus importants sont le fichiers Encadrants.xlsm et le fichier Final.xlsm, les 2 doivent être ouverts (pour l'instant)

Le fichier final me permet d'éditer en fin de mois certaines nbrs de données (heures sup-récupération-nbr d'absences, etc)

Le soucis que j'ai est avec le bouton "impression HS" sur l'onglet responsable, quand je click il actionne la macro "Imp_Heures" qui lui actionne le module "Imp_recap" et j'aimerais que :

  • l'onglet Recap_HeuresS soit renseigné, ça fonctionne bien
  • l'onglet Recap_ABS_TR soit renseigné, ça fonctionne bien

si par hasard, je me rend compte qu'il y a des erreurs alors je fais les modifications sur le fichier source "Encadrants.xlsm" et en réappuyant sur le bonton "Impression HS" sur l'onglet responsable :

  • l'onglet Recap_HeuresS se met à jour, ça fonctionne bien car il supprime les anciennes valeurs pour mettre les nouvelles
  • l'onglet Recap_ABS_TR ne se met pas à jour avec les nouvelles valeurs, et c'est là mon soucis

Par exemple, dans l'onglet Responsable du fichier général en cellule "P1" il y a le nbr de jours de congés pris par Mr Dupont en Fév 20 et quand je clik sur impression HS et bien dans l'onglet Recap_ABS_TR j'ai bien le chiffre 2 en colonne D ainsi que différents autres éléments.

Par contre si je rajoute un jour de congés à Mr Dupont depuis le fichier Encadrants (par exemple mettre pour le 06/02/2020, un jours de congés) et bien dans l'onglet Responsable du fichier général en cellule "P1" j'ai bien le chiffre 3 et quand je click sur impression HS et bien dans l'onglet Recap_ABS_TR j'ai toujours le chiffre 2 alors que je devrais avoir le chiffre 3.

Il me semble que j'ai un soucis avec le protège et le déporotège, mais pas ce n'est que mon avis

Pour que ça marche, je suis obligé d'aller supprimer dans les 2 onglets "Recap_HeuresS" & "Recap_ABS_TR" la ligne ou il y a un soucis, ce que j'aimerais c'est que ça l'écrase. Pour Recap_Heures ça l'écrase bien mais pas pour Recap_ABS_TR.

Par contre si je crée 2 boutons bien distincts :

  • un pour Recap_HeuresS, tout fonctionne correctement même les mises à jours
  • un Recap_ABS_TR, tout fonctionne correctement même pour les mises à jours
6encadrants.xlsm (629.44 Ko)
6fichier-final.xlsm (254.71 Ko)

Salut,

Il n’est pas interdit de dire bonjour et surtout merci

Tu ne sembles pas lire trop les instructions qu’on te donne et tu ne réponds pas aux questions posées

Tes fichiers sont de véritables usines à gaz et je n’ai pas trop l’envie de m’y pencher durant des heures.

Comme tu ne sembles pas connaitre la méthode du pas-à-pas, je te conseille d’aller voir ce lien https://forum.excel-pratique.com/viewtopic.php?t=59460

Dans tes macros – que tu n’as apparemment pas créées toi-même – tu as déjà énormément de macro qui sont appelées par d’autres macros.

Dans l’image ci-dessous, tu vois que les macros ‘’protege’’ et ‘’protegerecapABSTR’’ sont appelées par ta macro ‘’ImpRecap’’. Au pas à pas, tu le verrais très bien.

Je te propose alors d’appeler la deuxième macro que tu souhaites après les appels des deux macros mentionnées ci-dessus, comme également visible dans l’image (en jaune).

capture

Je te rappelle que les instructions ImpRecapABSTR ou Call ImpRecapABSTR ont exactement le même effet. Personnellement je préfère utiliser le ‘’Call xxxx’’, car ainsi je vois tout de suite qu’il s’agit de l’appel d’une autre macro.

Je n’ai pas testé cela car tes codes bloquent à tout bout de champs ; est-ce parce que je n’ai pas les mêmes liaisons ou dossiers que toi ?

Bonnes salutations.

En tout cas merci à toi pour ton explication, je vais essayé de trouver la solution.

Encore merci

As-tu essayé de placer l'instruction Call ImpRecapABSTR à l'endroit que je t'ai indiqué ?

As-tu essayé de placer l'instruction Call ImpRecapABSTR à l'endroit que je t'ai indiqué ?

Oui j'ai essayé, mais j'ai un message d'erreur lorsque j'exécute la macro

Merci pour ton aide.

capture d ecran 2020 04 19 a 21 34 33

Re,

Selon moi ça veut dire que tu n'as pas cette macro Call ImpRecapABSTR dans le même projet (fichier) !

Après le pas à pas, la macro est bien appelé.

Par contre, je dois avoir un soucis dans cette dernière, car lorsqu'il y a une mise à jour, cela ne m'écrase pas l'ancienne version. Pour que ça marche je suis obligé de supprimer la ligne dans l'onglet et de ré-activer la macro.

En tout cas merci

Salut,

Tant mieux si la partie sur laquelle j'ai voulu t'aider fonctionne.

Si tu veux à nouveau demander de l'aide sur un Forum, fait bien attention d'expliquer le plus simplement possible ton problème, crée si possible un fichier modèle en supprimant toutes les feuilles inutiles à ta démo, toutes les macros inutiles à ta démo ou alors utilise très précisément les noms des objets Excel (cellules, colonnes, feuilles, modules VBA, macros) afin qu'on sache facilement de quoi tu parles.

Bonnes salutations.

Merci de ton aide, la fonction Call m'a super aidée et grâce à cette dernière, j'ai réussit à trouver la solution.

C'est vrai que ma demande n'était pas très claire, et j'en suis navré. Mais il m'était difficile d'expliquer ce que je voulais exactement car le fichier en lui même est très complexe.

En tout cas merci pour le coup de pouce.

Rechercher des sujets similaires à "associer macros vba seule actions differentes"