Remplir une cellule a partir de combobox puis vider la combobox

Jema

XLDnaute Nouveau
Bonjour :)

J'ai une petite combobox que je pense assez simple qui sert à remplir une cellule directement quand on sélectionne un élement de la combobox.

Private Sub ComboBox1_Change()
Sheets("param").Calculate

Range("D3") = "0:" & ComboBox1.Value

' ligne suivante pose probleme
ComboBox1 = ComboBox1.List(0)

End Sub

Quand je ne met pas la ligne qui pose problème, la copie se fait sans problème et la cellule recoit la bonne donnée.

Mais ce que j'aimerais bien pouvoir faire c'est remplir la cellule puis vider la sélection de la combobox. Or avec le code que j'ai là, il est censé remplir la cellule d'abord puis changer la valeur de la combobox, mais il modifie la valeur de la cellule également. Les deux sembles donc toujours liés pendant l'exécution de la fonction.

Où fais-je une erreur?! :)

Merci d'avance!

Jema
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Remplir une cellule a partir de combobox puis vider la combobox

Bonsoir Jema,

Pour éviter que la macro soit relancée quand on modifie la ComboBox, il faut désactiver l'action des évènements, puis ne pas oublier de les réactiver ensuite :

Code:
Private Sub ComboBox1_Change()
Sheets("param").Calculate 'à quoi ça sert ???
Range("D3") = "0:" & ComboBox1
Application.EnableEvents = False 'désactive l'action des évènements
ComboBox1 = ComboBox1.List(0) 'pourquoi pas = "" ???
Application.EnableEvents = True
End Sub

A+
 

Jema

XLDnaute Nouveau
Re : Remplir une cellule a partir de combobox puis vider la combobox

Ahhhh... J'y ai cru! J'étais persuadé que ca marcherait mais manifestement aucun changement. :'(

Même en ne mettant QUE Application.EnableEvents = False
et plusieurs tests, toujours le même soucis.

Merci pour l'effort. :)

Jema
 

Lii

XLDnaute Impliqué
Re : Remplir une cellule a partir de combobox puis vider la combobox

Bonjour,

en général, pour éviter un nouvel appel lors du changement dans la liste, je passe par une variable booléenne déclarée hors macro :
Code:
Dim Fait As Boolean
Private Sub ComboBox1_Change()
  Sheets("param").Calculate
  If Fait = False Then
    Range("D3") = "0:" & ComboBox1.Value
    Fait = True
    ComboBox1 = ""  'pour pouvoir choisir, ensuite, le premier de la liste
    Fait = False
  End If
End Sub

remarque : dans la demande, vider n'est pas clair (clear) !
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Remplir une cellule a partir de combobox puis vider la combobox

Bonjour Jema, soenda, Lii,

En réfléchissant, je parierais bien sur ça :

- la liste de ComboBox1 est donnée par la propriété RowSource

- la cellule D3 se trouve dans la plage de définition de RowSource.

Dans ce cas Application.EnableEvents = False est inopérant en effet.

La méthode de Lii doit alors fonctionner, à condition de remplacer :

Code:
    Range("D3") = "0:" & ComboBox1.Value
    Fait = True

par :

Code:
    Fait = True 'bon emplacement
    Range("D3") = "0:" & ComboBox1.Value

Edit : autre possibilité, dans la plage de RowSource se trouvent des formules, alors peut-être supprimer :

Sheets("param").Calculate

A+
 
Dernière édition:

Jema

XLDnaute Nouveau
Re : Remplir une cellule a partir de combobox puis vider la combobox

Bonjour de nouveau et merci pour toutes vos propositions. :)

Voici le résultat de mes tests :

Solution 1 de job75 nok. Merci quand même. :)

Solution Soenda nok, même en rajoutant le truc de job75. Tentative risquée je trouve, mais ca aurait pu passer. :)

Solution de Lii OK! Bravo et merci! :p (+ lol pour la blague ;-) )

Donc :
"""
Dim Fait As Boolean

Private Sub ComboBox1_Change()
Sheets("sheet1").Calculate

If Fait = False Then
Range("D3") = "0:" & ComboBox1.Value
Fait = True
ComboBox1 = "" 'pour pouvoir choisir, ensuite, le premier de la liste
Fait = False
End If

End Sub
"""

Reste que cette solution prouve de fait que la fonction s'exécute deux fois d'affilés, sans celà ca ne fonctionnerait qu'une fois sur deux mais ca fonctionne ici à chaque fois.

Alors pour terminer l'analyse de vos propositions.
job75 : bien imaginé également, ca aurait pu, mais ma liste de données se trouve en fait sur une feuille "param" alors que la cellule modifiée se trouve sur "call" donc pas de lien dans ce cas.

Pour terminer, ca fonctionne donc, mais il reste toujours le mystère du pourquoi la fonction s'exécute deux fois. Si vous savez élucider ceci, je suis toujours preneur.

Bonne fin de journée et bon week-end à tous. :)

Jema
 

job75

XLDnaute Barbatruc
Re : Remplir une cellule a partir de combobox puis vider la combobox

Pour terminer, ca fonctionne donc, mais il reste toujours le mystère du pourquoi la fonction s'exécute deux fois.

Si j'ai bien compris, la plage de RowSource est dans la feuille "param".

S'il y a des formules dedans, elles sont recalculées avec :

Sheets("param").Calculate

ce qui modifie la ComboBox.

A+
 

Lii

XLDnaute Impliqué
Re : Remplir une cellule a partir de combobox puis vider la combobox

Re,

à job : je n'en suis pas sûr (d'après mon test).
à Jema :
la ligne
ComboBox1 = ""
provoque un changement dans la liste donc la macro est relancée.
La variable booléenne à True permet de ne pas changer le contenu de [D3].
Pour voir le déroulement de l'action, mets un point d'arrêt au début (F9) et fait du pas à pas (F8).
 

Jema

XLDnaute Nouveau
Re : Remplir une cellule a partir de combobox puis vider la combobox

Yeahhhhhhh, effectivement. Je crois que je vais devenir acros à ce système pour débuger. :p

Ca marche super bien et oui, la fonction se réexécute quand on modifie la combobox.

Du coup maintenant, ca marche et j'ai tout compris.

Merci et merci encore. :)

Jema
 

Discussions similaires

Statistiques des forums

Discussions
312 674
Messages
2 090 786
Membres
104 664
dernier inscrit
jth