XL 2016 indiqué message quand macro déjà utilisé

bidouill

XLDnaute Nouveau
bonsoir tout le monde
je vais essayer d'être assez clair.

j'ai un onglet qui regroupe des informations (nom client, numéro dossier, adresse...). sur la même page j'ai un bouton avec une macro associé. en cliquant sur le bouton cela copie toutes les données dans un tableau (autre fichier) qui regroupe l'ensemble des dossiers. j'avais souhaité bloquer le bouton après utilisation afin de ne pas autoriser la réincorporation dans mon tableau des données (sinon doublon).
j'ai donc incorporé une macro (celle dessous) :
' figer_valeur Macro'
Range("E16:G18").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.SmallScroll Down:=36
Range("C42:D58").Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.SmallScroll Down:=-78
Range("H3").Select
End Sub

tout fonctionne bien mais certaines personnes voudraient que le bouton ne soit pas bloqué (il y a toujours des grincheux ;-) )
donc en lieu et place de cette macro je voudrais savoir s'il est possible, quand le bouton a déjà été cliqué, de mettre un message indiquant que l'action a déjà eu lieu et donc à la personne de valider si elle veut ou non continuer.

je vous remercie par avance de votre aide

bien à vous et surtout une très bonne année 2020
 

Dudu2

XLDnaute Barbatruc
Bonjour,
Tu as 2 possibilités.
- Déclarer une variable au niveau Module (dans le module du UserForm si c'est une UserForm ou le module dans lequel se trouve le code du bouton si c'est un bouton sur feuille)
Exemple:
VB:
Private BoutonUtilisé as Boolean

Sub MonBouton()
...
End Sub
Et dans le code du bouton tu testes:
VB:
Sub MonBouton()
    ...
    If BoutonUtilisé Then
        MsgBox "Bouton déjà utilisé"
        Exit Sub
    End if

    BoutonUtilisé = True
    ...
End Sub

- Déclarer une variable Static dans le Sub du bouton.
Exemple:
VB:
Sub MonBouton()
    Static BoutonUtilisé as Boolean
    ...
End Sub
Et dans le code du bouton tu testes (comme ci-dessus)
D.
 

bidouill

XLDnaute Nouveau
Bonjour,
Tu as 2 possibilités.
- Déclarer une variable au niveau Module (dans le module du UserForm si c'est une UserForm ou le module dans lequel se trouve le code du bouton si c'est un bouton sur feuille)
Exemple:
VB:
Private BoutonUtilisé as Boolean

Sub MonBouton()
...
End Sub
Et dans le code du bouton tu testes:
VB:
Sub MonBouton()
    ...
    If BoutonUtilisé Then
        MsgBox "Bouton déjà utilisé"
        Exit Sub
    End if

    BoutonUtilisé = True
    ...
End Sub

- Déclarer une variable Static dans le Sub du bouton.
Exemple:
VB:
Sub MonBouton()
    Static BoutonUtilisé as Boolean
    ...
End Sub
Et dans le code du bouton tu testes (comme ci-dessus)
D.


bonsoir

déjà mille merci pour ce retour super rapide.
bon j'avoue … je bloque dès le début.
le bouton, créé par "insertion Forme" auquel j'ai affecté ma macro qui permet en cliquant dessus de copier toute les données d'un dossier dans un autre fichier excel qui regroupe tout les dossiers.
donc en allant dans MVB j'ai entre autre VBAProject (nom du fichier excel) avec un répertoire "Microsoft Excel Objets" et "Modules"
dans Modules j'ai 2 modules :
Module1 dans lequel j'ai ma macro qui est associée au bouton pour copier les info
Module2 la macro qui fige les valeur de la macro que l'on retrouve dans mon 1er message.
VB:
Sub figer_valeur()
'
' figer_valeur Macro
'

'
    Range("E16:G18").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveWindow.SmallScroll Down:=36
    Range("C42:D58").Select
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveWindow.SmallScroll Down:=-78
    Range("H3").Select
End Sub



j'imagine que je dois déjà supprimer le module2 mais ensuite je ne sais pas ou mettre toutes les info que que tu m'as donné.

pour info la macro associé au bouton (dans le module1) commence la façon suivante :

VB:
Sub Macro4()
'
' Macro4 Macro
'
' Touche de raccourci du clavier: Ctrl+g
Static bFait As Boolean
If bFait Then
MsgBox "Traitement d?j? r?alis?"
Else
        ' Traitement
    Windows("Prototype FTL V3.xlsx").Activate
Rows("4:4").Select
ActiveWindow.SmallScroll Down:=-18
Selection.Copy
Rows("5:5").Select
Selection.Insert Shift:=xlDown
Windows(ThisWorkbook.Name).Activate
Sheets("FTL").Activate
ActiveWindow.ScrollColumn = 34
ActiveWindow.ScrollColumn = 31
ActiveWindow.ScrollColumn = 27
    ActiveWindow.ScrollColumn = 24


si tu peux m'ne dire plus.

merci encore pour ton aide
 
Dernière édition:

cp4

XLDnaute Barbatruc
Bonjour bidouill, Dudu2;),

Afin de nous facilité la compréhension de tes attentes.
Il est vivement conseillé de joindre un fichier sans données confidentielles.
Au vu de tes codes, ils ont été générés par l'enregistreur de macro.
En effet, ce dernier enregistre toutes les actions que tu fais, dont certaines sont à supprimer car elles ne servent qu'à alourdir et ralentir l'exécution de ta macro.

Tu peux utiliser la proposition de Dudu2 ou bien en fin de ta procédure, supprimer par code les lignes en doublon.

Bonne journée.
 

Dudu2

XLDnaute Barbatruc
Bonjour,
Je ne suis pas sûr de comprendre ce que tu fais avec ces macros. Mais si la macro que tu veux n'utiliser qu'une seule fois est Sub Macro4() alors tu n'as pas complétement suivi les indications données sauf si dans la partie qu'on ne voit pas tu as mis l'instruction bFait = True, car à un moment donné, lorsqu'on place un indicateur, il faut bien le valoriser.
Bonne journée.
 

bidouill

XLDnaute Nouveau
Bonjour bidouill, Dudu2;),

Afin de nous facilité la compréhension de tes attentes.
Il est vivement conseillé de joindre un fichier sans données confidentielles.
Au vu de tes codes, ils ont été générés par l'enregistreur de macro.
En effet, ce dernier enregistre toutes les actions que tu fais, dont certaines sont à supprimer car elles ne servent qu'à alourdir et ralentir l'exécution de ta macro.

Tu peux utiliser la proposition de Dudu2 ou bien en fin de ta procédure, supprimer par code les lignes en doublon.

Bonne journée.

j'avoue j'ai utilisé l'enregistreur de macro :-(
 

Discussions similaires

Réponses
2
Affichages
117

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87