Liste déroulante et bouton de contrôle

angedemon02

XLDnaute Junior
Bonjour à tous,

Je voulais savoir s'il était possible de contrôler une liste déroulante avec un bouton pour l'incrémenter ?
En théorie cela ne pose pas de problème avec des nombres mais je me retrouve avec une liste de nom.
J'ai joint un petit fichier pour mieux expliquer.

Merci à ceux qui prendrons le temps de jeter un coup d'd’œil !!

Bonne journée.
 

Pièces jointes

  • liste et bouton.xlsx
    13.1 KB · Affichages: 61

Calvus

XLDnaute Barbatruc
Re : Liste déroulante et bouton de contrôle

Bonjour,

J'ai tenté de résoudre cette énigme, mais sans beaucoup de succès...:confused:

N'étant pas un expert du code, loin de là, j'essaie d'apprendre et de comprendre.
Je fais donc remonter ce fil, avec une petite solution tout de même, mais certainement tirée par les cheveux pour les pros, ce qui permettra, je l'espère de corriger. J'ai hâte de voir le résultat.

Pour ma part, j'ai réalisé deux macros, et inséré un deuxième bouton. Un pour monter et un pour descendre.
J'ai utilisé une combinaison de If.

J'ai essayé avec For To, mais je n'arrive pas à faire de pause dans la boucle. J'ai laissé une 3ème macro (affectée au bouton bleu)afin qu'on puisse voir le code.

Cordialement
 

Pièces jointes

  • liste et bouton 3.xlsm
    21.6 KB · Affichages: 36
G

Guest

Guest
Re : Liste déroulante et bouton de contrôle

Bonjour,

Voir fichier joint dans le module de code de la feuille l'évènement WorkSheet_Activate pour initialisation des valeurs du spinButton ainsi que la macro dans module public 'Compteur_2_QuandChangement'

A+
 

job75

XLDnaute Barbatruc
Re : Liste déroulante et bouton de contrôle

Bonjour angedemon02, Calvus, Hasco,

Code:
Sub Compteur2_QuandChangement()
Dim c As Range, t, sens%, i As Variant
Set c = [E5]
t = [liste]
With ActiveSheet.DrawingObjects("Compteur 2")
  sens = .Value
  .Value = 1 'RAZ
End With
i = Application.Match(c, t, 0)
If IsError(i) Then i = 0
i = i + IIf(sens, -1, 1)
If i < 1 Then i = UBound(t)
If i > UBound(t) Then i = 1
c = t(i, 1)
End Sub
Valeur minimale du bouton : 0, Valeur maximale : 2.

Fichier joint.

A+
 

Pièces jointes

  • liste et bouton(1).xls
    38.5 KB · Affichages: 57
Dernière édition:

Calvus

XLDnaute Barbatruc
Re : Liste déroulante et bouton de contrôle

Bonsoir angedemon02, Hasco, Job,

Je suis tout à fait impressionné par vos réalisations. J'y ai pour ma part passé plusieurs heures, évidemment sans résultat probant. J'espère que le principal intéressé viendra consulter ses réponses.

Hasco, aurais tu la gentillesse de m'expliquer ton code, au moins partiellement, auquel je n'ai strictement rien compris.
Je n'ai pas davantage compris le code de Job, mais je n'ose pas lui demander d'explications.

Bonne soirée à vous
 

Calvus

XLDnaute Barbatruc
Re : Liste déroulante et bouton de contrôle

Job,

Je vous remercie, et franchement, j’apprécie les réponses que vous faites ici. Elles sont concises, exactes et vous apportez très rapidement une solution à des problèmes où, pour ma part en tout cas, on s'arrache les cheveux.

En revanche, votre post précédent par exemple, ne représente pas davantage pour moi que du chinois.
Donc quand on clique sur le bouton il prend la valeur 1 + 1 = 2 ou 1 - 1 = 0.

Et lisez le code en comprenant chaque ligne l'une après l'autre.

Ceci a l'air simple en effet, mais :

Sub Compteur2_QuandChangement()
Dim c As Range, t, sens%, i As Variant
Set c = [E5]
t =[liste]
With ActiveSheet.DrawingObjects("Compteur 2")
sens = .Value
.Value = 1 'RAZ
End With
i = Application.Match(c, t, 0)
If IsError(i) Then i = 0
i = i + IIf(sens, -1, 1)
If i < 1 Then i = UBound(t)
If i > UBound(t) Then i = 1
c = t(i, 1)
End Sub

sens% ??
Ubound ? Ok ça je trouverai dans l'aide si je réussis à la comprendre..
IIF ???
IIf(sens, -1, 1) ???
Etc...

C'est certainement évident pour vous, mais je vous assure que c'est compliqué quand on ne sait pas dans quelle direction chercher.
Vous avez d'ailleurs dû vous en apercevoir dans ma solution.
C'est pour ça que je demande des explications, avec le réel désir d'apprendre.

Amicalement
 
Dernière édition:

Calvus

XLDnaute Barbatruc
Re : Liste déroulante et bouton de contrôle

Re,

Bon, je me lance dans l'explication du code fourni par Job.

Merci à ceux qui me liront de corriger ce qui est erroné.

Sub Compteur2_QuandChangement()
Dim c As Range, t, sens%, i As Variant
Déclarations des variables. sens%, ça je ne comprends pas ce que c'est.

Set c = [E5]
On attribue une référene à "c", en l'occurrence "E5"

t =[liste]
Fait référence à un nom défini

With ActiveSheet.DrawingObjects("Compteur 2")
Concernant la feuille active et le bouton "compteur 2"

sens = .Value
on attribue une valeur à "sens" ????

.Value = 1 'RAZ
La première valeur est 1

End With
i = Application.Match(c, t, 0)
i est égal à la position de E5 dans la liste A3:A7

If IsError(i) Then i = 0
Si la position de i renvoie une erreur, alors i = 0

i = i + IIf(sens, -1, 1)
i = i + 1 ou i - 1 par contre je ne saisis pas comment on détermine la valeur de sens

If i < 1 Then i = UBound(t)
Si i est < 1, alors on prend la plus grande valeur de la liste

If i > UBound(t) Then i = 1
Si i est > à la plus grande valeur du tableau liste, alors il prend la valeur de 1

c = t(i, 1)
c = à la valeur du tableau liste, soit 1,1 ou 2,1 ou 3,1 etc. J'imagine que dans ce cas on a écrit t(i,1) comme on aurait écrit Cells(i,1). Exact ?

End Sub

Merci de vos commentaires
 

job75

XLDnaute Barbatruc
Re : Liste déroulante et bouton de contrôle

Re,

sens% c'est la même chose que sens As Integer

La fonction IIf fait la même chose que la fonction SI des feuilles de calcul.

IIf(sens, -1, 1) peut aussi s'écrire IIf(sens > 0, -1, 1)

A+
 
G

Guest

Guest
Re : Liste déroulante et bouton de contrôle

Bonjour,

Calvux à dit:
Hasco, aurais tu la gentillesse de m'expliquer ton code, au moins partiellement, auquel je n'ai strictement rien compris.

@Calvus
Dans l'évènement WorkSheet_Activate les valeurs maximales du SpinButton sont mises à jours, car rien ne dit que la liste nommée 'Liste' ne change pas. On pourrait le mettre dans un autre évènement mais j'ai supposé que la liste n'évoluait que de temps à autre.
Valeur minimale: 1
Valeur maximale: Nombre de cellules de la liste

Donc à chàque click sur le bouton on aura 1; 2;3 ...

Dans la procédure déclenchée sur click du spinButton:

With Feuil1
.Range("E5") = Range("Liste")(.Shapes("Compteur 2").OLEFormat.Object.Value)
End With

la partie en rouge se contente de récupérer la valeur du bouton au moment du click.
Range("Liste") (N) renvoie la Nième valeur de la liste.

Pour Application.Caller, voir l'aide excel.
OLEFormat.Object et DrawingObject représentent la même chose (un controle contenu dans un Shape)
Mais j'ai eu plusieurs fois des problèmes avec DrawingObject et excel 2010, c'est pourquoi j'ai choisit l'autre méthode.

A+

[Edition] Grand Salut Job:):)
 
Dernière modification par un modérateur:

Calvus

XLDnaute Barbatruc
Re : Liste déroulante et bouton de contrôle

Bonjour,

Hasco ! :),

Merci. Ce n'est pas évident de s'y retrouver avec toutes ces instructions. Et surtout quand on n'a pas une vue d'ensemble et des différentes possibilités de "fusion" des codes.
Par ailleurs ton code m'a permis de comprendre le On Error Resume Next

Néanmoins, c'est déjà plus clair qu'hier soir.

Pourrais tu m'expliquer ceci ?

Sur le même fichier, j'ai fait les petites macros suivantes :

Sub v()
b = IIf(Range("a3") = "Pomme", "bravo", "vélo")
MsgBox (b)
End Sub
J'ai compris, ça marche.

Sub v2()
b = Range("a3:a6")
c = UBound(b)
MsgBox (c)
End Sub
J'ai compris, ça marche.

Sub v3()
With ActiveSheet.DrawingObjects("Compteur 2")
del = .Value
.Value = 8
End With
MsgBox del
End Sub
La réponse est 1 ! Pourquoi pas 8 ??

Merci et bonne journée
 
G

Guest

Guest
Re : Liste déroulante et bouton de contrôle

Re,

Parceque tu changes la valeur de l'objet après l'avoir récupérée dans ta variable del! Et que msgbox Affiche del et non pas la valeur actuelle de l'objet.
Si tu mets dans cet ordre:
Code:
.value = 8
del = .value
msgbox del

Affichera 8

D'ailleurs
Code:
.Value=8
msgBox .Value
Affichera 8

A+
 
Dernière modification par un modérateur:

Calvus

XLDnaute Barbatruc
Re : Liste déroulante et bouton de contrôle

Re,

Bon, j'ai essayé les deux codes, ça me donne 2...

Et dans le code de Job, c'est écrit comme je l'ai mis dans mon exemple. Du coup, je ne comprend toujours pas à quoi ça sert ni comment ça fonctionne. Mais ce n'est pas grave, je me pencherai là dessus à nouveau un peu plus tard.

Merci beaucoup en tout cas.
 

Discussions similaires

Réponses
12
Affichages
300
Réponses
8
Affichages
430
Réponses
1
Affichages
107
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 177
Messages
2 085 973
Membres
103 073
dernier inscrit
MSCHOE16