Joh-Ananas
-
18 févr. 2016 à 22:23
Joh-Ananas
Messages postés1Date d'inscriptionjeudi 18 février 2016StatutMembreDernière intervention 4 mars 2016
-
4 mars 2016 à 16:03
Bonjour,
J'ai suivi un tuto ultra efficace sur la création d'un formulaire (http://www.votreassistante.net/creer-formulaire-personnalise-pour-saisir-donnees-excel/) avec les fonctions dont j'ai besoin.
A l'origine le formulaire contenait 2 ComboBox et 7 TextBox. Le second ComboBox et les 7 TextBox sont incrémentés dans le premier ComboBox. Toutefois, j'ai voulu remplacer deux des TextBox par des ComboBox, afin de garder des valeurs identiques au remplissage du formulaire.
Cependant, je rencontre la difficulté suivante: je n'arrive pas à incrémenter la seconde ComboBox supplémentaire (ComboBox4). La modification du code visant à incrémenter les deux nouvelles ComboBox à la ComboBox1 fonctionne uniquement pour la ComboBox3 et non pour la ComboBox4. J'ai utilisé le même code pour les deux ComboBox supplémentaires (ComboBox 3 et 4) mais un message d'erreur d'exécution apparaît uniquement pour la ComboBox4 qui est à la ligne I + 5.
Je débute en codage VBA mais je dois avouer que cela me parait assez insolite.
Pourriez-vous m'éclairer svp???
Voici le code en entier
Option Explicit Dim Ws As Worksheet
Private Sub UserForm_Initialize() Dim J As Long Dim I As Integer Dim Calendar1 As Object
ComboBox2.RowSource = ("Modalitédepaement") Set Ws = Sheets("Traitement pièces") 'Correspond au nom de votre onglet dans le fichier Excel
With Me.ComboBox1 For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row .AddItem Ws.Range("A" & J) Next J End With
'Pour la liste déroulante Code client Private Sub ComboBox1_Change() Dim Ligne As Long Dim I As Integer Dim Cpt As Byte
If Me.ComboBox1.ListIndex = -1 Then Exit Sub Ligne = Me.ComboBox1.ListIndex + 3 ComboBox2 = Ws.Cells(Ligne, "C")
For I = 1 To 2 Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 3) Next I
For I = 4 To 4 Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 3) Next I
For I = 6 To 7 Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 3) Next I
For I = 3 To 3 Me.Controls("ComboBox" & I) = Ws.Cells(Ligne, I + 3) Next I
For I = 5 To 5 Me.Controls("ComboBox" & I) = Ws.Cells(Ligne, I + 3) Next I
End Sub
'Pour le bouton Nouveau contact Private Sub CommandButton1_Click() Dim L As Integer If MsgBox("Confirmez-vous l’enregistrement de ce nouvelle pièce ?", vbYesNo, "Demande de confirmation d’ajout") = vbYes Then L = Sheets("Traitement pièces").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide
'Pour le bouton Modifier Private Sub CommandButton2_Click() Dim Ligne As Long Dim I As Integer
If MsgBox("Confirmez-vous la modification de cette pièce ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then If Me.ComboBox1.ListIndex = -1 Then Exit Sub Ligne = Me.ComboBox1.ListIndex + 3 Ws.Cells(Ligne, "C") = ComboBox2
For I = 1 To 2 If Me.Controls("TextBox" & I).Visible = True Then Ws.Cells(Ligne, I + 3) = Me.Controls("TextBox" & I) End If Next I
For I = 4 To 4 If Me.Controls("TextBox" & I).Visible = True Then Ws.Cells(Ligne, I + 3) = Me.Controls("TextBox" & I) End If Next I
For I = 6 To 7 If Me.Controls("TextBox" & I).Visible = True Then Ws.Cells(Ligne, I + 3) = Me.Controls("TextBox" & I) End If Next I
For I = 3 To 3 If Me.Controls("ComboBox" & I).Visible = True Then Ws.Cells(Ligne, I + 3) = Me.Controls("ComboBox" & I) End If Next I
For I = 5 To 5 If Me.Controls("ComboBox" & I).Visible = True Then Ws.Cells(Ligne, I + 3) = Me.Controls("ComboBox" & I) End If Next I
Bonjour,
Peux- tu tenter d'être plus précis et concis, car le code montré est (entre autres) en contradiction avec ton message
tu dis par exemple ne pas avoir de problème d'alimentation de ta combobox3 par cette boucle :
For I = 3 To 3 Me.Controls("ComboBox" & I) = Ws.Cells(Ligne, I + 3) Next I
(pourquoi, d'ailleurs, une boucle pour finalement ne traiter que le 3 ???)
Cette boucle est à remplacer tout bêtement par :
Me.Combobox3 = Ws.Cells(Ligne, 6)
(elle ne fait rien d'autre !
Tu as plusieurs boucles dans le même cas ...
Or, tu as lié cette combobox par :
ComboBox3.RowSource = ("ListeType")
Tout ce code est pour le moins surprenant..
Commence par prendre la bonne habitude de toujours spécifier la propriété utilisée d'un contrôle (tes textboxes, tes comboboxes) ou d'un objet (tes cellules). Un exemple (parmi toutes les lignes dans le même cas) :
Ws.Cells(Ligne, "C") = ComboBox2
doit s'écrire, pour lever toute ambiguïté :
Ws.Cells(Ligne, "C").value = ComboBox2.list(combobox2.listindex)
Pour l'instant, c'est le "fouillis".
EDIT : je t'ai parlé plus haut de la nécessité d'écrire proprement en spécifiant les propriétés utilisées.
A propos de "propriétés" (pendant qu'on en parle). J'espère que tu ne t'es par ailleurs pas "amusé" à mettre la propriété Style de ta/tes combos qui "ne marchent pas", à la valeur 2 (fmstyledropdownlist), qui n'accepterait bien évidemment pas que l'on modifie la propriété text de la combo (bien évidemment !). ....
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.