Bloquer une macro après utilisation de celle-ci

Bonjour au forum,

J’ai la macro suivante qui exporte la plage de cellules A21 à D…jusqu’à la dernière cellule vide dans une autre feuille.

Cette macro, avant d’exporter cette plage de données insère 2 colonnes entre « Compte » et Date de valeur » et 1 autre colonne entre « Date de valeur » et « Montant » afin que ceux-ci possèdent le même nombre de colonnes que la feuille de destination.

Je voudrai savoir comment peut-on inclure dans le code que si l’utilisateur exécute une 2nde fois la macro (de l’exportation), un message lui indique que le traitement à déjà été effectué, et si possible de bloquer la macro s'il tente d'effectuer une 2nde fois cette tâche.

Il est primordial qu’un message d’alerte lui indique qu’il a déjà effectué cette tâche sinon à chaque fois qu’il appuie sur le bouton de la macro, celle-ci va insérer autant de colonnes lorsqu’il va appuyer sur le bouton.

Sub exporter2()

    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("C:C").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("E:E").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("E19").Select

Dim lgn As Long

    Range("A21:G" & Range("A" & Rows.Count).End(xlUp).Row).Copy
    On Error GoTo DossierFermé
    With Workbooks("FRAIS BANCAIRES.xlsx").Sheets("BD")
        lgn = .Range("A" & Rows.Count).End(xlUp)(2).Row
        .Range("A" & lgn).PasteSpecial xlPasteAll
    End With
    Application.CutCopyMode = False
    MsgBox "Travail terminé"
    Exit Sub
DossierFermé:
    MsgBox "Merci d'ouvrir le fichier ''FRAIS BANCAIRES.xlsx'' ", 16
End Sub

En vous remerciant de votre aide.

Bonjour,

Sub test()
    Static bFait As Boolean
    If bFait Then
        MsgBox "Traitement déjà réalisé"
    Else
        ' Traitement 
        bFait = True
    End If
End Sub

eric

Bonjour,

Si ta macro insère des colonnes dans ta feuille, tu peux tester, au préalable, le nombre de colonnes. S'il est égal à 4, tu lances la macro, sinon, non...

Par exemple :

Sub exporter2()
    Dim Rng As Range
    Set Rng = Range("A20").CurrentRegion
    If Rng.Columns.Count = 4 Then
        Columns("B:B").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Columns("C:C").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Columns("E:E").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

        Dim lgn As Long

        Range("A21:G" & Range("A" & Rows.Count).End(xlUp).Row).Copy
        On Error GoTo DossierFermé
        With Workbooks("FRAIS BANCAIRES.xlsx").Sheets("BD")
            lgn = .Range("A" & Rows.Count).End(xlUp)(2).Row
            .Range("A" & lgn).PasteSpecial xlPasteAll
        End With
        Application.CutCopyMode = False
        MsgBox "Travail terminé"
        Exit Sub

    Else
        MsgBox "Macro déjà réalisée"
        Exit Sub
    End If
DossierFermé:
    MsgBox "Merci d'ouvrir le fichier ''FRAIS BANCAIRES.xlsx'' ", 16
End Sub

Bonjour Eriiic,

Merci pour ta réponse, j'essaie de tester ton code, mais je ne vois pas où est-ce que je peux l'inclure dans ma macro ?

C'est ta macro que tu dois inclure dans ce code. Sous 'traitement tu mets ce qui doit être réalisé une fois.

eric

Bonjour Eric,

Voici ma macro intégré à ton code, mais cela ne résoud pas mon problème.

Sub test()
    Static bFait As Boolean
    If bFait Then
        MsgBox "Traitement déjà réalisé"
    Else
        ' Traitement 

 Columns("B:B").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("C:C").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("E:E").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("E19").Select

Dim lgn As Long

    Range("A21:G" & Range("A" & Rows.Count).End(xlUp).Row).Copy
    On Error GoTo DossierFermé
    With Workbooks("FRAIS BANCAIRES.xlsx").Sheets("BD")
        lgn = .Range("A" & Rows.Count).End(xlUp)(2).Row
        .Range("A" & lgn).PasteSpecial xlPasteAll
    End With
    Application.CutCopyMode = False
    MsgBox "Travail terminé"
    Exit Sub
DossierFermé:
    MsgBox "Merci d'ouvrir le fichier ''FRAIS BANCAIRES.xlsx'' ", 16

        bFait = True
    End If
End Sub

Bonjour,

Je viens de tester ton code.

Au premier lancement la macro est réalisée, pas au second.

Par contre si tu rouvres le fichier on peut la relancer. Si tu ne le veux pas il faut mémoriser la variable bFait dans une cellule de feuille (et la récupérer en début de macro bien sûr).

Sinon tu peux partir sur l'idée de pijaku qui est de compter les colonnes, ça marchera aussi.

eric

C'est étonnant, car lorsque je lance une 2nde fois la macro, elle s'exécute.

Rechercher des sujets similaires à "bloquer macro utilisation celle"