Répétition Userform + Modification dynamique d'une ComboBox

Bonjour à tous,

Afin de finaliser mon projet, il me reste une dernière montagne à franchir et j'ai besoin de vous.

Je vous joins un fichier exemple où vous trouverez Tableau source / Bouton de commande / Code.

Ce que j'arrive à faire via mon code actuel :

1- Bouton de commande (ouverture du USF).

2- Initialisation du UserForm (Intégration des sources de ComboBox).

3- Changement de la ComboBox1 (Va chercher dans le tableau en Feuil4 sur une plage définie, la liste non vide des références à traiter + remonte la désignation associée).

C'est là que ça bloque... J'ai une problématique en 3 parties :

A - Il faudrait (je pense), un compteur qui va dans la colonne B de la Feuil4, enregistre le nombre de lignes non vides (à partir de la ligne 3) et répète autant de fois le USF que de lignes non vide... Je sais pas si c'est très clair. En gros, si dans la Feuil4 en colonne B, j'ai 3 références (A, B & C), je souhaite que lorsque je valide par exemple mon USF avec la Réf B via le bouton "Suivant", celui-ci se répète afin que je puisse traiter la Réf A puis la Réf C etc....

B - Une fois que j'ai sélectionné une référence dans la ComboBox1, je vais renseigner le reste du USF manuellement. Lorsque je cliquerai sur "Suivant", il faudrait que la formule détecte la ligne dans la Feuil4 associée à la référence dans la ComboBox1 et y dispatche les valeurs des Box en respectant un adressage spécifique (J'ai réalisé l'adressage sur la ligne 3 pour illustrer un peu l'idée). Attention : Les références ne seront pas forcément traitées dans le même ordre que les références en colonne B de la Feuil4.

C - Afin d'éviter les erreurs de certains opérateurs, je souhaiterai aussi que lorsque qu'une référence en colonne B de la Feuil4 a été traitée via le USF puis validé via le bouton "Suivant", elle disparaisse des choix du ComboBox1. Ceci afin d'éviter qu'en cas d'inattention, l'opérateur écrase les données déjà renseignées par un autre opérateur au préalable.

Pas évident ... je sais, si quelqu'un peut m'aider, ce serait top.

Je dois essayer de déployer l'outil lundi dans l'atelier.

Merci de votre aide :D

22exemple.xlsm (99.05 Ko)

Up svp... Je tente depuis 14h mais je me bute à un mur... :(

Bonjour

Pas sur d'avoir bien compris le problème mais votre code initialize peut etre plus simple

Private Sub UserForm_Initialize()
Dim cel as range
Dim i as byte

With Sheets("Working page")
    'Rempli les ComboBox
    For Each cel In .ListObjects("Tableau2").ListColumns(1).DataBodyRange
        If cel.Value <> "" Then Me.ComboBox1.AddItem cel.Value
    Next cel
    For i = 2 To 25
        Me.Controls("Combobox" & i).List = Sheets("Liste").Range("J2:J4").Value
    Next i
End With
End sub

C - Afin d'éviter les erreurs de certains opérateurs, je souhaiterai aussi que lorsque qu'une référence en colonne B de la Feuil4 a été traitée via le USF puis validé via le bouton "Suivant", elle disparaisse des choix du ComboBox1. Ceci afin d'éviter qu'en cas d'inattention, l'opérateur écrase les données déjà renseignées par un autre opérateur au préalable.

Est-ce les colonnes L a AL sont toujours remplies ? ou y-a-il une colonne qui est systématiquement complétée

Bonjour Flo33400, salut Dan

Voici le fichier qui, je pense, répondra aux besoins

33flo33400-exemple.xlsm (100.21 Ko)

@+

Bonjour Dan, bonjour Bruno,

Merci de vos retours.

Dan, dans les colonnes L à AI, il n'y en a pas forcement une qui sera complétée. Par contre, ce que je pensais tester, c'était de mettre en colonne AP une condition de détection type Intersection entre la ligne et les colonnes L à AI. Puis afficher en AP la valeur 0 si vide, la valeur 1 si non vide.

Enfin procéder à une maj de la ComboBox en fonction de cette valeur.

Qu'en penses-tu ?

Bruno, je regarde ton fichier demain matin en détail et je te fais un retour.

Merci à vous,

Bon week-end.

Re, salut Bruno

Changez également le du bouton suivant

Private Sub CommandButton3_Click()
Dim lig As Integer
Dim i As Byte

'Attribution des Box par P/N

lig = Feuil4.ListObjects("Tableau2").ListColumns(1).DataBodyRange.Find(ComboBox1.Value).Row

If CheckBox1 = True Then Feuil4.Range("AJ" & lig) = "YES"
If CheckBox2 = True Then Feuil4.Range("AK" & lig) = "YES"
If CheckBox3 = True Then Feuil4.Range("AL" & lig) = "YES"

For i = 12 To 38
    With Feuil4
        .Cells(lig, i) = Me.Controls("combobox" & i - 10).Value
    End With
Next i
End sub

Cordialement

Salut Bruno, salut Dan,

Merci à vous, ça tourne du feu de Dieu !!

Des magiciens de VBA, félicitations à vous !

Bon week-end :)

Rectification, quand je l'intègre à mon code, il y a une toute petite anomalie...

Au changement dans ma ComboBox1 de référence, la désignation associée en TextBox1 ne remonte plus...

Voici le code sur cette partie :

Private Sub ComboBox1_Change()
Sheets("Working page").Activate
Dim a As Integer
For a = 3 To 500
If CGRC1.ComboBox1.Value = Sheets("Working page").Range("B" & a).Value Then
CGRC1.TextBox1.Value = Sheets("Working page").Range("C" & a).Value
GoTo fin:
End If
Next
fin:
End Sub

Avez-vous une idée du problème svp ?

Sinon, le reste ça tourne nickel !!

Edit dan : mis code avec balise de code

Re

Essayez comme ceci

Private Sub ComboBox1_Change()
With cgrc1
    .TextBox1.Value = Sheets("Working page").Range("C" & .ComboBox1.ListIndex + 3).Value
End With
End Sub

par contre dans le fichier, les combobox dans l'encart procédés ont un espace vide...

Cordialement

Mystère résolu.

Merci à toi Dan.

Bon week-end.

Rechercher des sujets similaires à "repetition userform modification dynamique combobox"