Valeurs selon condition ComboBox
Bonjour à tous,
Je réalise actuellement une fiche de convocation pour des épreuves relatives au soudage et aux règlementations liées. Il s'agit d'un tableau Excel avec une mise en forme définie & protégée. 3 boutons sont dispo afin d'interagir avec: 1) Remplir la convoc. 2)Réinitialiser la convoc. 3)Nouvelle convoc. Le remplissage de cette convocation se fait exclusivement à l'aide de VBA intégré aux Userform que j'ai réalisé.
Afin de faciliter le remplissage de celle-ci les principales information sont à écrire et le reste, à l'aide d'un texte logique, se rempli tout seul. (devrait se remplir tout seul)
Afin de gagner du temps je rempli le procédé de soudage et le métal de base puis les conditions se renseignent toutes seules à l'aide du code suivant:
Private Sub CommandButton2_Click()
'111 Acier'
If ComboBox1.Value = "111" And ComboBox2.Value = "Tube Acier non allié" Then
GoTo AAA
'141 Acier'
ElseIf ComboBox1.Value = "141" And ComboBox2.Value = "Tube Acier non allié" Then
GoTo AAB
'141 Inox'
ElseIf ComboBox1.Value = "141" And ComboBox2.Value = "Tube Acier inox austénitique" Then
GoTo ABA
'311 Acier'
ElseIf ComboBox1.Value = "311" And ComboBox2.Value = "Tube Acier non allié" Then
GoTo ABB
'912 Acier'
ElseIf ComboBox1.Value = "912" And ComboBox2.Value = "Tube non galva" Then
GoTo BAA
'912 Cuivre'
ElseIf ComboBox1.Value = "912" And ComboBox2.Value = "Tube Cuivre" Then
GoTo BAB
'971 Acier'
ElseIf ComboBox1.Value = "971" And ComboBox2.Value = "Tube Acier non allié" Then
GoTo BBA
'971 Cuivre'
ElseIf ComboBox1.Value = "971" And ComboBox2.Value = "Tube Cuivre" Then
GoTo BBB
Else
End IfVoici par exemple le contenu d'une condition:
BBB:
Range("E31:G32") = "971"
Range("H31:I32") = "971"
Range("E33:G34") = "Cuivre"
Range("H33:I34") = "Cuivre"
Range("E35:G36") = "Emboitement"
Range("H35:I36") = "Emboitement"
Range("E37:G38") = ComboBox3.Value
Range("H37:I38") = ComboBox3.Value
'Tube 1'
Range("E39:G40") = "1.2"
Range("E41:G42") = "54"
Range("E43:G44") = "PC"
Range("E45:G46") = "Gêne opé."
'Tube 2'
Range("H39:I40") = "1.2"
Range("H41:I42") = "54"
Range("H43:I44") = "PF"
Range("H45:I46") = "Gêne opé."
GoTo FincondiPuis voici le contenu de Fincondi:
Fincondi:
Unload Me
End SubVoici le problème: Peu importe le choix dans mes ComboBox le test logique s'arrête et les condition de AAA se renseigne puis Fincondi s'éxécute et mon Userform se ferme.
Je n'arrive pas à comprendre pourquoi car le code me semble correct, les ComboBox 1 & 2 sont bien nommées, les conditions sont bien nommées, les noms des paragraphe de condition (AAA) sont bien nommés, bref.
Je me tourne alors vers vous afin d'avoir un regard neuf sur ce code.
Nicolas.
Bonjour,
Sans la macro complète ni le fichier difficile de vous donner une réponse complète. Si vous pouviez joindre l'UF ce serait top.
En attendant, de toute évidence aucune de vos condition n'est vérifiée : l'exécution continue, arrive à votre 1e label, en l'occurence AAA:, l'exécute puis quitte le sub.
Je pense donc que vos conditions sont mal écrites, et que les combobox ne contiennent pas exactement les strings que vous voulez vérifier. D'où votre problème.
Essayez de mettre un breakpoint en début de Sub (clic "à gauche" des lignes de code), puis de suivre l'exécution pas à pas avec F8. Regardez dans la fenetre des variables locales le contenu de Combobox1.Value, et voyez s'il correspond. De meme pour Combobox2. Si vous ne comprenez pas ce que je dis, pas de soucis mais joignez un fichier on ira plus vite
Bonjour,
Merci pour votre réponse.
Voici le fichier, je suis autodidacte dans le VBA et je ne voit pas a quoi sert le BreakPoint.(J'apprend encore)
Je vous ai laissé uniquement l'UF concerné.
Merci,
C'est bien ce que je pensais, l'appel ComboBox.Value renvoie "autre chose" que le contenu (c'est en fait lié aux colonnes Excel lorsque vous créez un combobox à partir d'XL), très logique (non) n'entrons pas dans les détails techniques…
Remplacez dans le Sub CommandButton2_Click() tous vos .Value par .Text, cela va corriger le problème.
Impeccable,
Merci beaucoup pour votre aide, en effet j'avais vu quelque part qu'il y avait un usage spécial entre le .Value et le .Text mais je n'aurais pas trouvé seul.
Encore merci
Parfait, n'oubliez pas de marquer le fil en résolu.
Par ailleurs, un conseil sur votre code :
Je vous déconseille d'utiliser des Goto lorsque ce n'est pas nécessaire. C'est une instruction qu'on aime beaucoup en tant que débutant, mais elle peut très vite amener à des dysfonctionnements.
En l'occurence dans votre code il serait parfaitement correct (et meme recommandé) de mettre les instructions de vos Goto directement dans les blocs If/ElseIf, et de vous débarasser du Goto. C'est plus lisible et facile à maintenir/incrémenter.