Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mise à jour d'un combobox (vider et recharger)

18 réponses
Avatar
JP
Bonsoir,

De l'userform3, je lance l'userform5.
Dans l'userform5, apr=E8s avoir trait=E9 des donn=E9es en lien avec l'userf=
orm3, je mets =E0 jour un combobox nomm=E9 CB_Prof. Apr=E8s l'avoir vid=E9,=
je le recharge par l'interm=E9diaire de cette boucle:

For Charge =3D 9 To Nbl Step 9
UserForm3.CB_Prof.AddItem Sheets("BD_PFMP").Cells(Charge, 2)
Next Charge

Le probl=E8me c'est que des lignes blanches apparaissent dans la liste d=E9=
roulante du combobox (3 =E0 chaque rechargement) et je ne comprends pas pou=
rquoi!

Quelqu'un aurait une id=E9e?

Voici un extrait du code ci-dessous o=F9 on retrouve la boucle.

Merci d'avance.

JP
--------------------------



For i =3D 9 To Nbl Step 9
If TextBox1.Value =3D Cells(i, 2).Value Then
MsgBox "La personne existe d=E9j=E0 dans la base de donn=E9es."
Exit Sub: UserForm5.Show
ElseIf ComboBox1 =3D "" Or TextBox1 =3D "" Then
MsgBox "Les champs Nom Pr=E9nom, et EP/EG sont obligatoires"
Exit Sub: UserForm5.Show
ElseIf Cells(i, 2).Value =3D "" Then
Cells(i, 1) =3D ComboBox1.Value
Cells(i, 2) =3D TextBox1.Value
Cells(i, 3) =3D TextBox2.Value
For C =3D 4 To Sheets("BD_PFMP").Range("AF3").Value + 3 ' + 3 p=
our le d=E9calage
Cells(i, C) =3D Me.Controls("TB_" & C + 46).Value ' TB_ com=
mencent =E0 50
Next C
MsgBox "Les donn=E9es ont =E9t=E9 enregistr=E9es."
' vide textbox et combobox
TextBox1 =3D ""
TextBox2 =3D ""
ComboBox1 =3D ""
For Efface =3D 50 To 81
Me.Controls("TB_" & Efface) =3D ""
Next Efface
'Mise =E0 jour de la combobox Prof de l'userform3
UserForm3.CB_Prof.Clear
For Charge =3D 9 To Nbl Step 9
UserForm3.CB_Prof.AddItem Sheets("BD_PFMP").Cells(Charge, 2)
Next Charge
Exit For
End If
Next i

10 réponses

1 2
Avatar
LSteph
Bonjour,

Jusqu'à atteindre la valeur de Nbl ...
Dans ces cellules que tu prends toutes les 9 lignes (step 9)
N'y a t il pas des vides...???


--
LSteph
Avatar
JP
Bonjour Stephane,

Si il y a des vides. Au début de l'enrichissement de la base de données , j'ai une ligne pleine sur Nbl. Ensuite deux sur Nbl, etc....
Nbl est égale à:
Nbl=Application.CountA(Sheets("BD_PFMP").Range("B9:B404"))

Normalement les lignes vides ne sont pas comptées???

Je vais mettre un point d'arrêt sur cette ligne pour voir la valeur de Nb l.

Je te tiens au courant.

Merci

JP
Avatar
JP
En fait, je vois où est l'erreur.
Au tout début, la première ligne sur 9 est vides. Les 8 autres contienn ent des valeurs.
C'est dans la première, des blocs de 9, où je vais écrire.
Peut être puis-je utiliser le code couleur pour les compter. Elles sont b leues
code couleur (16764057).
Si couleur = 16764057 et que la cellule contient quelque chose alors je c ompte la ligne.
Le problème c'est qu'au début, Nbl sera inférieure à 9. Ma boucle n e se déclenchera pas. Je suis un peu perdu.

Si tu as une idée!

Merci

JP
Avatar
JP
J'ai omis de préciser qu'au début Nbl est égale à 352. Sur les bloc s de 9, 8 lignes contiennent des variables (titres de lignes).
D'où 396 lignes /9 D blocs et 44 *8 = 352.
Avatar
MichD
Bonjour,

Ta question n'est pas très claire!

Pourquoi ne pas utiliser cjoint.com pour publier seulement
cette colonne avec laquelle tu veux initialer ton combobox,
avec une explication des données que tu veux retenir?

Tu nous retournes ici l'adresse que tu auras obtenue.




MichD
---------------------------------------------------------------
Avatar
Jacky
Bonjour,
As-tu testé cette boucle indépendamment de tout le reste ??
'--------------
'Mise à jour de la combobox Prof de l'userform3
UserForm3.CB_Prof.Clear
For Charge = 9 To Nbl Step 9
UserForm3.CB_Prof.AddItem Sheets("BD_PFMP").Cells(Charge, 2)
Next Charge
'----------------

--
Salutations
JJ


"JP" a écrit dans le message de news:

Bonsoir,

De l'userform3, je lance l'userform5.
Dans l'userform5, après avoir traité des données en lien avec l'userform3, je mets à jour un combobox nommé
CB_Prof. Après l'avoir vidé, je le recharge par l'intermédiaire de cette boucle:

For Charge = 9 To Nbl Step 9
UserForm3.CB_Prof.AddItem Sheets("BD_PFMP").Cells(Charge, 2)
Next Charge

Le problème c'est que des lignes blanches apparaissent dans la liste déroulante du combobox (3 à chaque
rechargement) et je ne comprends pas pourquoi!

Quelqu'un aurait une idée?

Voici un extrait du code ci-dessous où on retrouve la boucle.

Merci d'avance.

JP
--------------------------



For i = 9 To Nbl Step 9
If TextBox1.Value = Cells(i, 2).Value Then
MsgBox "La personne existe déjà dans la base de données."
Exit Sub: UserForm5.Show
ElseIf ComboBox1 = "" Or TextBox1 = "" Then
MsgBox "Les champs Nom Prénom, et EP/EG sont obligatoires"
Exit Sub: UserForm5.Show
ElseIf Cells(i, 2).Value = "" Then
Cells(i, 1) = ComboBox1.Value
Cells(i, 2) = TextBox1.Value
Cells(i, 3) = TextBox2.Value
For C = 4 To Sheets("BD_PFMP").Range("AF3").Value + 3 ' + 3 pour le décalage
Cells(i, C) = Me.Controls("TB_" & C + 46).Value ' TB_ commencent à 50
Next C
MsgBox "Les données ont été enregistrées."
' vide textbox et combobox
TextBox1 = ""
TextBox2 = ""
ComboBox1 = ""
For Efface = 50 To 81
Me.Controls("TB_" & Efface) = ""
Next Efface
'Mise à jour de la combobox Prof de l'userform3
UserForm3.CB_Prof.Clear
For Charge = 9 To Nbl Step 9
UserForm3.CB_Prof.AddItem Sheets("BD_PFMP").Cells(Charge, 2)
Next Charge
Exit For
End If
Next i
Avatar
JP
J'ai fait des modifications qui semblent fonctionner.
mais un regard nouveau peut permettre d'améliorer encore les choses.

Il faut cliquer sur le bouton "Formulaire d'entrée de suivi des élève s"
Dans le formulaire, cliquer sur le bouton nouveau professeur. L'userform5 s 'ouvre.
Il faut entrer des données dans cet usurform.
J'attire votre attention sur le temps qui s'écoule quand on appuie sur le bouton quitter avant de retrouver l'userform3.

Merci pour l'aide

JP
http://cjoint.com/?3GtpJEQ401D
Avatar
MichD
As-tu essayé comme ceci :

'--------------------------------
Dim C As Range
With Sheets("BD_PFMP")
For Each C In .Range("B9:B" & .Range("B" & .Rows.Count).End(xlUp).Row)
If C.Value <> "" Then
With Me.ComboBox1
.AddItem C.Value
End With
End If
Next
End With
'--------------------------------

MichD
---------------------------------------------------------------
Avatar
JP
Denis,

Je vais essayer ton code mais j'ai fait une modif dans une boucle for i qu i va très bien. J'espère qu'elle n'aura pas d'inconvénient à l'usag e. J'ai juste ajouté la personne avec la ligne suivante:
'ajoute la nouvelle personne à la liste déroulante
UserForm3.CB_Prof.AddItem Sheets("BD_PFMP").Cells(i, 2).Value

En conséquence, je ne réinitialise pas le combobox "CB_PROF" ce qui per met de ne pas relancer toutes les procédures qui y sont liées. Du coup c'est hyper rapide.

Merci

JP
Avatar
JP
Denis,

Mon combobox1 est renommé en CB_Prof. J'ai donc modifié ton code mais i l bloque à With Me.CB_Prof

JP
1 2