VB Excel 2013 - Multiple tâches pour un seul bouton
Bonjour,
Je galère depuis plusieurs jours et je ne trouve rien sur ce sujet sur Google:
J'ai un script que j'aimerais faire rouler qui va comme suit:
J'ai une plage de données qui me donnent une liste de nom associées à une valeur dans un tableau, j'ai réussis à créer une formule (et non pas un code VB) qui fait en sorte que si la valeur de la cellule adjacente est plus grande que 0, elle me donne la liste des noms qui y sont associés.
La liste de noms d'affiche (Et peuvent) s'afficher dans mon range C41:C69
J'aimerais me créer un bouton qui va me sortir le premier nom de la liste dans ma cellule K2, et que si le bouton est pesé de nouveau il me sorte le second nom (encore dans la cellule K2), et ainsi de suite jusqu'à la fin de la liste. Par la suite, s'il y a un nouveau clic rendu en fin de liste mais qu'il n'y a plus de "noms" à afficher, que plutôt que de donner une ligne vide que le script VB recommence à la première valeur.
Pour faire court, je veux monter un script en IF/Else qui effectue chaque tâches individuellement uniquement si mon bouton est pesé (Et que le reste de mes fonctions ne soient pas en attente sur mon tableau Excel/si je dois cliquer d'autre boutons, que celui-ci ne recommence pas à la première valeur de la liste mais plutôt qu'elle continue là où elle était rendue).
Je galère plus précisément sur le fait que je ne parviens pas à monter un script qui "reconnait" qu'un clic a eu lieu sur ce bouton précis.
Merci.
bonjour
dans Excel, on n'efface jamais de données. Si besoin on ajoute une colonne de pointage, dans laquelle on saisit l'information "ligne terminée", souvent avec une date de clôture, ou un X ou un 1 ou "terminé".
Bonsoir,
Un fichier illustrant ce que tu veux obtenir est nécessaire...
Le "script" ne reconnaîtra pas qu'un clic a eu lieu... on peut à la rigueur les compter avec une variable statique, mais elle sera réinitialisée à la fermeture du classeur... de toutes façons dès lors que ta cellule cible contient une valeur, c'est que des clics ont eu lieu ! Et comme il s'agit de passer d'une valeur à la suivante, cela ne devrait poser aucun problème...
Cordialement.
Bonjour,
une possibilité serait de "stocker" la valeur (variable) dans un Nom caché,
par exemple:
pour attribuer la valeur: MyVal au nom MaCle
Application.ExecuteExcel4Macro "SET.NAME(""MaCle"",""" & MyVal & """)"pour récupérer la valeur (cette ligne peut être mit dans une autre macro)
Range("A1") = Application.ExecuteExcel4Macro("MaCle")tu peut même récupérer cette valeur après avoir fermer et réouvert le fichier,
c'est à dire tant que tu n'aura pas attribuer un autre valeur au Nom "MaCle"
Merci pour vos explications mais étant plutôt néophyte dans le domaine de la programmation VB, j'ai plus ou moins compris ce qui m'a été expliqué.
Pour être certain de m'avoir bien fait comprendre, je vais l'expliquer autrement.
Je veux monter un code qui effectuer la tâche suivante.
Si je clique sur le bouton nommé "Orange", je veux que, à chaque fois que je clique dessus, il effectue une tâche différente.
Exemple :
Si "Bouton Orange est pesé" 1 fois,
La tâche A est effectuée dans la cellule #1
Si "Bouton Orange est pesé" une 2e fois
La tâche B s'effectue également dans la cellule #1 (en effaçant la précédente valeur au préalable)
Si "Bouton Orange est pesé" une 3e fois
La tâche C s'effectue également dans la cellule #1(Toujours en remplacement à l'ancienne valeur)
Et ainsi de suite.
Chaque Tâches : A, B, C, etc. est une tâche différente :
orange = true
if Orange then
Tâche A: Worksheets("Sheet4").Range("j3") = Worksheets("sheet4").Range("g3")
End If
If orange then
Tâche B: Worksheets("Sheet4").Range("j3") = Worksheets("sheet4").Range("g4")
End if
If orange then
Tâche C: Worksheets("Sheet4").Range("j3") = Worksheets("sheet4").Range("g5")
End if
End subJ'aimerais aussi savoir comment m'assurer que la value "true" (Orange = true) considère que ce soit mon clic de bouton qui soit vu comme la valeur "Orange", sauf si c'est pas ainsi que ça fonctionne.
Salut Drimux,
Salut l'équipe,
une façon de faire, en changeant la propriété CAPTION du bouton pour lui indiquer quelle action exécuter...
Private Sub cmdORANGE_Click()
'
Select Case Me.cmdORANGE.Caption
Case "A"
'...ton action A
[A1] = "Action A"
Me.cmdORANGE.Caption = "B"
Case "B"
'...ton action B
[A1] = "Action B"
Me.cmdORANGE.Caption = "C"
Case "C"
'...ton action C
[A1] = "Action C"
Me.cmdORANGE.Caption = "D"
Case "D"
'...ton action D
[A1] = "Action D"
Me.cmdORANGE.Caption = "E"
Case "E"
'...ton action E
[A1] = "Action E = retour vers Action A"
Me.cmdORANGE.Caption = "A"
End Select
'
End SubA+
Bonjour,
Tu as modifié ta problématique de départ !
Voilà comment se traite une procédure chargée d'actions qui suivent un cycle...
Macro à affecter à ton bouton Orange :
Sub Orange()
Static tache As Integer
tache = tache Mod 3 + 1
MsgBox tache
Select Case tache
Case 1
'fait tache A
Case 2
'fait tache b
Case 3
'fait tache c
End Select
End SubA chaque clic la valeur de la variable tache va varier, elle va prendre tour à tour les valeurs 1, 2 et 3, et recommencera à 1, ainsi de suite.
J'ai ajouté un MsgBox pour que tu puisses tester et voir le changement de valeur...
On peut ainsi faire des cycle sur 4, 5 etc. actions...
Ceci dit ta façon de travailler m'a l'air plutôt brouillonne... Sans fichier, c'est que tu ne tiens pas vraiment à ce qu'on te propose des solutions, donc en ce qui me concerne, je m'abstiendrai de réintervenir.
Cordialement.
@MFERRAND et @curulis57
Merci de votre aide, c'était bel et bien des "case" qu'il me fallait pour que mon bouton effectue plusieur actions différentes à chaque clic.
Pour ce qui est du fait que je n'ais pas partagé le fichier, c'est un fichier pour une entreprise mondiale comprenant des données confidentielles et je ne suis pas en droit de le partager. Désolé d'avoir du vous faire travailler les méninges sans un outil direct sur lequel travailler.
Merci encore.
Pour ce qui est du fait que je n'ais pas partagé le fichier, c'est un fichier pour une entreprise mondiale comprenant des données confidentielles et je ne suis pas en droit de le partager.
On ne te demande pas (jamais) de partager tes données ! On s'en fout d'ailleurs, ce qu'il faut c'est un modèle dont le type de données est conforme et l'organisation est la même... et cela, ça peut toujours se fabriquer...
Cela était d'autant plus nécessaire que les deux problèmes que tu as posé, car en effet, si pour toi c'est la même chose, cela ne l'était pas selon l'exposé que tu en as fait à chaque fois, et la solution la plus adaptée pour chacun n'était évidemment pas la même...