Combobox : Affichage d'un item par default en fonction du choix d'un autre

dreamalain

XLDnaute Junior
Bonjour

J'ai des comboboxs qui allimente une base donnée de cette manière :
VB:
Private Sub ComboVM1_Change()
'With Sheets("VIANDES")
With Workbooks("Liste.xlsx").Sheets("VIANDES")
    If ComboVM1.ListIndex = -1 Then
        Me.ComboPv1 = ""
        Me.TextBoxEfv1 = ""
        Me.TextBoxRv1 = ""
        Me.ComboOuV1 = ""
       Me.ComboCoV1 = ""
     Exit Sub
    End If
  Me.ComboPv1 = .Cells(ComboVM1.ListIndex + 2, 2)
  Me.TextBoxEfv1 = .Cells(ComboVM1.ListIndex + 2, 3)
  Me.TextBoxRv1 = .Cells(ComboVM1.ListIndex + 2, 6)
  Me.ComboOuV1 = .Cells(ComboVM1.ListIndex + 2, 9)
  Me.ComboCoV1 = .Cells(ComboVM1.ListIndex + 2, 10)
End With
End Sub

Existe t-il un moyen pour qu'un combobox affiche par défaut la valeur d'un autre combobox sachant qu'ils sont sur deux userforms différents (les deux userforms étant ouverts en même temps)

Merci pour vos suggestions !!
 

jp14

XLDnaute Barbatruc
Re : Combobox : Affichage d'un item par default en fonction du choix d'un autre

Bonjour

Il suffit pour transférer les données d'indiquer l'userform qui contient le combobox
Userform1.combobox1.value = Userform2.combobox1.value

ou alors utiliser des variables publiques qui contiennent les données à transférer.
A tester

JP
 

Pierrot93

XLDnaute Barbatruc
Re : Combobox : Affichage d'un item par default en fonction du choix d'un autre

Re,

essaye ainsi, à utiliser dans le module de l'usf 2 :
Code:
ComboBox1.Value = UserForm1.ComboBox1.Value
nom des objets à adapter.

bon après midi
@+

Edition : bonjour jp, un peu en retard moi....
 

dreamalain

XLDnaute Junior
Re : Combobox : Affichage d'un item par default en fonction du choix d'un autre

Merci Pierrot ça fonctionne
Plus compliqué peut être : lorsque je change la valeur de la combobox de l'userform 2 en cas de réouverture de cet userform y a t-il moyen de conserver cette nouvelle valeur ?
Je vais essayer de détailler le déroulement de mon code :

Intialisation de mes userform :
VB:
Private Sub UserForm_Initialize()


On Error Resume Next
 Dim cell As Range
   
    With Workbooks("Liste.xlsx").Sheets("VIANDES")
    If Err = 0 Then MsgBox " Base de donnée ouverte " Else MsgBox " La base de donnée n'a pas été ouverte!!!!"

        Me.ComboVM1.List = .Range("A2:A" & .Range("A65536").End(xlUp).Row).Value
End With
     'j'ai actuellement le même résultat que la solution de Pierrot grâce à cette ligne :   
    ComboVM1.Value = Cells(8, 2)
End Sub

Initialisation de mes combobox
VB:
Private Sub ComboVM1_Change()
'With Sheets("VIANDES")
With Workbooks("Liste.xlsx").Sheets("VIANDES")
    If ComboVM1.ListIndex = -1 Then
        Me.ComboPv1 = ""
        Me.TextBoxEfv1 = ""
        Me.TextBoxRv1 = ""
        Me.ComboOuV1 = ""
       Me.ComboCoV1 = ""
     Exit Sub
    End If
  Me.ComboPv1 = .Cells(ComboVM1.ListIndex + 2, 2)
  Me.TextBoxEfv1 = .Cells(ComboVM1.ListIndex + 2, 3)
  Me.TextBoxRv1 = .Cells(ComboVM1.ListIndex + 2, 6)
  Me.ComboOuV1 = .Cells(ComboVM1.ListIndex + 2, 9)
  Me.ComboCoV1 = .Cells(ComboVM1.ListIndex + 2, 10)
End With
End Sub

L'enregistrement :
VB:
Private Sub CmdEnregistrer_Click()

Application.ScreenUpdating = False
'With Sheets("VIANDES")
With Workbooks("Liste.xlsx").Sheets("VIANDES")


lg = 0
Select Case ComboVM1.ListIndex
Case -1
If ComboVM1 <> "" Then lg = .Range("A65536").End(xlUp).Row + 1
Case Else
lg = ComboVM1.ListIndex + 2
End Select
If lg > 0 Then
.Cells(lg, 1) = Me.ComboVM1
.Cells(lg, 2) = Me.ComboPv1
.Cells(lg, 3) = Me.TextBoxEfv1
.Cells(lg, 6) = Me.TextBoxRv1
.Cells(lg, 9) = Me.ComboOuV1
.Cells(lg, 10) = Me.ComboCoV1
End If


With ActiveSheet

.Cells(8, 2) = ComboVM1.Value

Workbooks("Liste.xlsx").Sheets("VIANDES").[A2].Sort key1:=Workbooks("Liste.xlsx").Sheets("VIANDES").[A2], Order1:=xlAscending, Header:=xlGuess

Application.ScreenUpdating = True
Unload Me

J'espère que cela vous donnera un aperçu pour répondre à ma question

A bientôt de lire vos suggestions
 

jp14

XLDnaute Barbatruc
Re : Combobox : Affichage d'un item par default en fonction du choix d'un autre

Bonjour
Salut Pierrot


Pour conserver une valeur exploitable quand l'userform est fermé il faut utiliser des variables publiques ( a écrire dans un module ).
Public Toto as string
Public Action as byte

La variable action permet de définir le cas de figure pour exploiter le contenu de Toto.

JP
 

Pierrot93

XLDnaute Barbatruc
Re : Combobox : Affichage d'un item par default en fonction du choix d'un autre

Bonjour,

peut être stockée la valeur de ta combo dans une variable "public", par contre à la fermeture du classeur celle-ce sera effacée... A voir si c'est cela que tu veux.... une autre solution, stockée la valeur dans une cellule à la fin de ta feuille....

Aarf, désolé jp, encore un peu lent moi...
 

dreamalain

XLDnaute Junior
Re : Combobox : Affichage d'un item par default en fonction du choix d'un autre

Bonsoir JP
Mes connaissances en VBA ne me permettent pas de comprendre ta solution.
Si tu pouvais développer ta réponse ou me donner un fichier test pour que je m'y penche ça me permettrais (peut être) de l'adapter à mon classeur.
Merci en tout ca pour ta réponse

@+
 

dreamalain

XLDnaute Junior
Re : Combobox : Affichage d'un item par default en fonction du choix d'un autre

Re bonsoir

Puis je inclure à mon code une fonction qui permettrais de remplir la valeur de la combobox1 si la cellule est vide et la valeur de la cellule si celle ci est renseignée ?
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 304
Messages
2 087 060
Membres
103 445
dernier inscrit
LOLKFR