Valider automatiquement quand on appuie sur un bouton lançant une macro

Signaler
Messages postés
11
Date d'inscription
lundi 19 novembre 2007
Statut
Membre
Dernière intervention
25 janvier 2011
-
japytou
Messages postés
11
Date d'inscription
lundi 19 novembre 2007
Statut
Membre
Dernière intervention
25 janvier 2011
-
Bonjour,
quand je fais une saisie dans un tableau Excel, je suis obligé d'appuyer sur entrer ou sur "v" pour valider avant d'appuyer sur un bouton qui doit exécuter la macro, si je ne fais pas cela, le bouton reste inactif et la macro ne se lance pas.

y-a-t'il possibilité d'appuyer sur un bouton qui permet, à la fois, de valider et de lancer la macro. Comment faire la programmation dans ce cas ?

j'espère avoir expliquer clairement mon problème. Merci pour celui qui me répondra.

JP

9 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
Salut et bienvenue sur le site.

Non, ce n'est pas vraiment clair... pour moi, en tout cas...
Qu'entends-tu par "v" ? la flèche vers le bas ? ou la lettre "v" ?

Si tu mettais le bout de code que tu as, ce serait pas mal plus simple de t'aider, je pense...

Si, en entrant ENTER la macro se déclanche, c'est donc dire qu'il y a l'événement Change ou SelectionChange qui a du code inscrit, oui/non (?)

PS: il y a un forum qui traite du VBA

MPi²
Messages postés
11
Date d'inscription
lundi 19 novembre 2007
Statut
Membre
Dernière intervention
25 janvier 2011
2
Bonsoir,
je connais mal le site et je me suis trompé de lieu, si je comprends bien, bon je continue puisque j'ai commencé.

C'est vrai, je me suis mal exprimé. En fait quand je parle de "v", il s'agit dans la barre de formule du bouton valider "ü" et non de la lettre "v" juste à côté du bouton annuler "x"



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Par ailleurs j'ai fait bouton qui lance la macro suivante :



Sub modifier()





'





' modifier la fiche d'un membre



'







   










    Range("B6:B21").Select








    Selection.Copy








    Sheets("liste 2007-2008").Visible = True








    Sheets("liste 2007-2008").Select








    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _








        False, Transpose:=True








    Selection.Font.Bold = False








    With Selection.Font








        .Name = "Arial"








        .Size = 10








        .Strikethrough = False








        .Superscript = False








        .Subscript = False








        .OutlineFont = False








        .Shadow = False








        .Underline = xlUnderlineStyleNone








        .ColorIndex = xlAutomatic








    End With








    Sheets("liste 2007-2008").Visible = False








    Sheets("Feuil4").Select








    ActiveWorkbook.Save








    Range("A4:B4").Select






End Sub



 




Comme je suis secrétaire d'une association, je gère les membres du club, et j'ai deux feuillets excel :


<ol style="MARGIN-TOP: 0cm" type="1">
<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">La "feuil4" où j'édite la fiche d'un membre choisi parmi l'ensemble des membres : titre, nom, prénom, adresse, etc. ceci de manière verticale et plus facile à lire que le tableau de la seconde feuille.</li>
<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Une autre feuille que j'ai intitulé "liste 2007-2008" où j'ai tous les membres de l'association (classiquement une ligne représente une fiche d'adhérent)</li>
</ol>

 




Sur la fiche (feuil4), je peux modifier les infos sur un adhérent, et ça marche. Mais pour que la macro le prenne en compte, je dois valider d'abord, en appuyant sur le bouton valider "ü" de la barre de formule ou en appuyant sur entrée, avant d'appuyer sur le bouton qui lance la macro. (tant que je n'ai pas valider, le bouton "modifier" n'est pas fonctionnel)



 




Je souhaiterai donc faire un seul geste pour valider et lancer ma macro en appuyant sur le seul bouton lançant <?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" /??><st1:personname w:st="on" productid="la macro. Comment">la macro. Comment</st1:personname> faire ?

j'espère avoir été plus clair dans mes explications.

merci beaucoup

JP
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
Désolé, mais je ne saisis pas du tout cette partie (?)
En fait quand je parle de "v", il s'agit dans la barre de formule du bouton valider "ü" et non de la lettre "v" juste à côté du bouton annuler "x"

Je ne sais vraiment pas quel peut être ce bouton "valider" à côté d'un autre bouton "x" que je ne connais pas non plus... (?)

Sous quelle version travailles-tu ?

MPi²
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
4
Pour te répondre MPi vite fait, ce bouton v comme il dit, ça doit correspondre à la coche verte pour valider une fonction dans Excel.

Dans ta barre de formule, suivant ta version d'Excel, tu as un bouton Fx (en Excel 2003) ou = (en Excel 2000) qui te permet d'afficher la liste des fonctions disponibles. Quand tu cliques dessus, juste à côté, tu as un bouton Vert avec une coche (son bouton v donc) et un bouton rouge avec une croix. J'arrête mes explications là, je pense que tu vois maintenant de quoi je cause

J'en arrive donc à son problème, qui pour moi n'en est pas un :
A la saisie dans Excel, dans une cellule, quelle qu'elle soit, on est OBLIGE de valider sa saisie, que ça soit par entrée, la coche vert ou en appuyant sur la tabulation ou une flèche de direction. Pour qu'une donnée soit enregistrée dans une cellule, il faut qu'elle soit valider et effectivement, les boutons sont bloqués pendant ce temps. Mais ça me semble normal personnellement. Lancer une macro qui pourrait utiliser la donnée saisie, sans qu'elle soit validée (et donc considérée saisie par Excel), je ne vois pas l'intérêt.

Et puis, c'est comme taper un mail ou autre chose, faire Entrée pour faire un retour à la ligne, c'est pas le temps que ça prend hein

Donc, pour ton "problème", je ne vois qu'une seule chose à faire pour contourner un fonctionnement "normal" de l'appli : coller dans l'évènement SelectionChange de ton objet Worksheets  (Worksheet_SelectionChange) l'appel de ta fonction soit :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   
    Call Worksheet_SelectionChange
   
End Sub

A chaque fois que tu modifieras une saisie dans ton fichier Excel, en la validant (Entrée, coche verte, blabla), ta macro s'exécutera et tu n'auras donc faire qu'une seule action au lieu de tes deux.

Mais personnellement moi-même, je trouve que c'est plus contraignant qu'autre chose : Ca se déclenche systématiquement, même quand on n'a pas envie, mise à jour intempestive, recalcul de formules, etc ... pour gagner 0,2 secondes. Mais chacun ses goûts

Molenn
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
Merci Molenn....

MPi²
Messages postés
11
Date d'inscription
lundi 19 novembre 2007
Statut
Membre
Dernière intervention
25 janvier 2011
2
Bonsoir,

je vois tout à fait l'inconvénient de l'instruction, et je vais rester avec ma formule de départ d'autant plus que mes utilisateurs ont tout à fait compris l'utilisation de la feuille que je leur ai présentée.

par contre pour faire des essais (et par curiosité), je ne suis pas arrivé encore à faire fonctionner la macro que tu m'as suggérée.

merci beaucoup, je débute et j'apprends par la découverte et par l'exemple (j'ai déjà fait de la programmation autrefois avec le turbo pascal et ça m'aide... mais c'est tout de même différent).

encore merci et bonne soirée si tu es encore debout.

JP
Messages postés
11
Date d'inscription
lundi 19 novembre 2007
Statut
Membre
Dernière intervention
25 janvier 2011
2
Petit Bonjour (maintenant...)
je viens de comprendre le fonctionnement de l'instruction.

merci beaucoup

JP
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
4
Content que tu aies trouvé, parce que je me rends compte qu'avec mon copier/coller mal fait, j'avais écrit une bêtise ^^

Le code à utiliser était bien sûr :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   
    Call NomDeTaProcédure
   
End Sub

Mais si tu as corrigé de toi même, c'est que tu as appris quelque chose, donc, c'est très bien

Molenn
Messages postés
11
Date d'inscription
lundi 19 novembre 2007
Statut
Membre
Dernière intervention
25 janvier 2011
2
Bonjour,

c'est très sympa de ta part,

finalement, je me suis acheté le CD de G. Mourmant, ça me permet d'aller un peu plus vite dans les connaissances, car découvrir, déchiffrer des programmes sont bien intéressants, mais demande beaucoup de temps, et même avec une "autoforamation dirigée" comme j'ai choisi maintenant, il reste encore beaucoup de questions et j'apprécie les forums d'internet.

merci beaucoup, car tu m'as envoyé sur une piste à laquelle je n'avais pas pensé pour cause d'ignorance...

A+

JP