Combobox à partir de cellules variables sous excel

[Résolu]
Signaler
Messages postés
11
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
14 décembre 2006
-
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
-
Bonjour,
débutante en vba excel j'utilise beaucoup le système D mais là je sèche... Donc si quelqu'un d'un peu plus compétent pouvait m'aider ce serait génial :)

J'ai un userform = userform3
2 combobox dessus
La première combobox (combobox1) se remplit "normalement" ("site1", "site2", "site3")
la seconde (combobox2) à partir de cellules sur excel en fonction du choix de la combobox1 (chaque choix de la combobox 1 correspond à une page sur excel).
 Le problème : le nombre de cellules permettant de remplir le combobox2 peut être modifié (sur la page "site1" à partir de la cellule "F8" jusqu'à la cellule "F?", idem pour la page "site2" et pour la page "site3")
Mon code:
Private Sub userform_Initialize()


'liste déroulante combobox1 site userform3 
    UserForm3.ComboBox1.AddItem ("Site1")
    UserForm3.ComboBox1.AddItem ("Site2")
    UserForm3.ComboBox1.AddItem ("Site3")

'liste déroulante comobox2 projet userform3
    If UserForm3.ComboBox1.Value = "site1" Then
             Sheets("site1").Select
            Range("f8").Select
            Do while ActiveCell<>""
               For Each c In Selection.Cells
               ComboBox2.AddItem (c.Value)
                Next
            Loop
   End if
End sub

Je n'ai pas encore fait pour le site2 et le site3 vu que la combox2 ne fonctionne pas...
La combobox1 elle fonctionne bien...la combobox2 ne fait rien :s

Quelqu'un voit-il mon erreur de débutante? J'espère avoir été assez claire
Merci beaucoup

25 réponses

Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Je vois d'ou viens le probleme, tu n'as pas de valeur dans combobox1 au moment où tu fais la boucle étant donné que tu es dans Userform_Intialyze

Met le code pour CMB2 dans ComboBox1_Change

Et après ça:
UserForm3.ComboBox1.AddItem ("Site1")
UserForm3.ComboBox1.AddItem ("Site2")
 UserForm3.ComboBox1.AddItem ("Site3")

Combobox1.ListIndex = 0

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Salut, c'est une solution parmis d'autres:

             Sheets("site1").Select

            Do while ActiveCell<>""
j = 8
Do
ReDim Preserve tableau(1 To j)
tableau(j) = Range("F" & j).Value
ComboBox2.AddItem tableau(j)
j = j + 1
Loop Until (Range(("F" & j)).Value) = "" Or IsEmpty(Range(("F" & j)).Value)
            Loop

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
J'ai oublié :

Dim Tableau()
Dim j As Intger

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
11
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
14 décembre 2006

Merci de m'avoir répondu si vite :)
Mais malheureusement cela ne fonctionne pas :s
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Autre solution

Dim DerniereLigne As Integer

Private Sub CommandButton1_Click()

Dim i As Integer

Sheets("Site1").Select
PremiereLigneVide (6) 'colonne "F"

For i = 8 To DerniereLigne

ComboBox1.AddItem Range("F" & i).Value

Next

End Sub

Public Function PremiereLigneVide(Colonne As Integer) As Integer

    PremiereLigneVide = Columns(Colonne).Find("", Cells(8, 6), , , xlByRows, xlNext).Row
    DerniereLigne = PremiereLigneVide - 1

End Function, ----
(Coloration syntaxique automatique par Kenji)

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Autant pour moi j'avais oublié les bouts de code que tu avais mis et que j'avais copier, ça c'est bon, les deux solution d'ailleur

Dim tableau()
Dim j As Integer
Sheets("site1").Select

j = 8
Do
ReDim Preserve tableau(1 To j)
tableau(j) = Range("F" & j).Value
ComboBox1.AddItem tableau(j)
j = j + 1
Loop Until (Range(("F" & j)).Value) = "" Or IsEmpty(Range(("F" & j)).Value), ----
(Coloration syntaxique automatique par Kenji)

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
11
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
14 décembre 2006

Je suis vraiment désolée l'une ou l'autre ne fonctionne pas :s
Je vais essayer de faire autrement je crois :s
Merci quand même de tes efforts :) très sympa :)
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Comment ça marche pas? J'ai testé les deux solutions en mettant des valeurs des cellules F8 à F? et renommer une feuille "Site1" et les deux soluions marche très bien! Bon parcontre dans le code que j'ai mis c'était ComBox1 au lieu de 2:

'liste déroulante combobox1 site userform3 
    UserForm3.ComboBox1.AddItem ("Site1")
    UserForm3.ComboBox1.AddItem ("Site2")
    UserForm3.ComboBox1.AddItem ("Site3")

'liste déroulante comobox2 projet userform3
    If UserForm3.ComboBox1.Value = "site1" Then
Dim tableau()
Dim j As Integer
Sheets("site1").Select

j = 8
Do
ReDim Preserve tableau(1 To j)
tableau(j) = Range("F" & j).Value
ComboBox2.AddItem tableau(j)
j = j + 1
Loop Until (Range(("F" & j)).Value) = "" Or IsEmpty(Range(("F" & j)).Value)
   End if

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
11
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
14 décembre 2006

Génial!!!!!
Tu es génial!!!!
Merci beaucoup :)
C'était bien cela
Messages postés
11
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
14 décembre 2006

Bonjour
et je continue dans la série débutante ... sur le même soucis

La première partie telle que me l'a donnée Drikce fonctionne parfaitement.
Or quand je fais la même chose pour le site2, cela ne fonctionne pas :s
Le combobox1 reste bloqué sur "site1"

'liste déroulante comobox2 projet userform3
    If UserForm3.ComboBox1.Value = "site1" Then
Dim tableau()
Dim j As Integer
Sheets("site1").Select

j = 8
Do
ReDim Preserve tableau(1 To j)
tableau(j) = Range("F" & j).Value
ComboBox2.AddItem tableau(j)
j = j + 1
Loop Until (Range(("F" & j)).Value) = "" Or IsEmpty(Range(("F" & j)).Value)
   

Else
'liste déroulante comobox2 projet userform3
    If UserForm3.ComboBox1.Value = "site1" Then
Sheets("site2").Select
j = 8
Do
ReDim Preserve tableau(1 To j)
tableau(j) = Range("F" & j).Value
ComboBox2.AddItem tableau(j)
j = j + 1
Loop Until (Range(("F" & j)).Value) = "" Or IsEmpty(Range(("F" & j)).Value)
   End if
End if
'liste déroulante combobox1 site userform3 
    UserForm3.ComboBox1.AddItem ("Site1")
    UserForm3.ComboBox1.AddItem ("Site2")
    UserForm3.ComboBox1.AddItem ("Site3")

J'ai tenté en changeant le nom du tableau pour le site2 (tableau1) et la variable j en k cela ne fonctionne pas non plus :s
Le tableau sous excel est aexactement le même pour les différents sites.

Pouvez-vous m'aider?
Merci d'avance
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Re: il ne faut pas faire:

Else
'liste déroulante comobox2 projet userform3
    If UserForm3.ComboBox1.Value = "site1" Then

mais

ElseIf  UserForm3.ComboBox1.Value = "site2" Then

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
  Précision, ce que j'ai dis est pour la partie en rouge

  If UserForm3.ComboBox1.Value = "site1" Then
Dim tableau()
Dim j As Integer
Sheets("site1").Select

j = 8
Do
ReDim Preserve tableau(1 To j)
tableau(j) = Range("F" & j).Value
ComboBox2.AddItem tableau(j)
j = j + 1
Loop Until (Range(("F" & j)).Value) = "" Or IsEmpty(Range(("F" & j)).Value)
   

Else
'liste déroulante comobox2 projet userform3
    If UserForm3.ComboBox1.Value = "site1" Then
Sheets("site2").Select
j = 8
Do
ReDim Preserve tableau(1 To j)
tableau(j) = Range("F" & j).Value
ComboBox2.AddItem tableau(j)
j = j + 1
Loop Until (Range(("F" & j)).Value) = "" Or IsEmpty(Range(("F" & j)).Value)
   End if
End if

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Et supprime le Enf If qui est sur la même ligne que le Loop Until aussi à la fin!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
11
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
14 décembre 2006

Donc erreur dans mon code ici,désolée!!,  j'avais bien mis "site2"

Je te redonne exactement le code que j'ai et qui fait que ma combobox1 reste bloquée sur site1 même quand je veux sélectionner "site2"

If UserForm3.ComboBox1.Value = "site1" Then
Dim tableau()
Dim j As Integer
Sheets("site1").Select
j = 8
Do
ReDim Preserve tableau(1 To j)
tableau(j) = Range("F" & j).Value
ComboBox2.AddItem tableau(j)
j = j + 1
Loop Until (Range(("F" & j)).Value) = "" Or IsEmpty(Range(("F" & j)).Value)
   

Else
'liste déroulante comobox2 projet userform3
    If UserForm3.ComboBox1.Value = "site2" Then
Sheets("site2").Select
j = 8
Do
ReDim Preserve tableau(1 To j)
tableau(j) = Range("F" & j).Value
ComboBox2.AddItem tableau(j)
j = j + 1
Loop Until (Range(("F" & j)).Value) = "" Or IsEmpty(Range(("F" & j)).Value)
   
End if
End if

je n'ai aucun message d'erreur sauf que ça bloque :s
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
If UserForm3.ComboBox1.Value = "site1" Then



Dim tableau()
Dim j As Integer
Sheets("site1").Select
j = 8
Do
ReDim Preserve tableau(1 To j)
tableau(j) = Range("F" & j).Value
ComboBox2.AddItem tableau(j)
j = j + 1
Loop Until (Range(("F" & j)).Value) = "" Or IsEmpty(Range(("F" & j)).Value)   






Else
If UserForm3.ComboBox1.Value = "site2" Then




Sheets("site2").Select
j = 8
Do
ReDim Preserve tableau(1 To j)
tableau(j) = Range("F" & j).Value
ComboBox2.AddItem tableau(j)
j = j + 1
Loop Until (Range(("F" & j)).Value) = "" Or IsEmpty(Range(("F" & j)).Value)   

End if




 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Et sinon comment ça "reste bloqué sur site1", tu ne peux pas changer la valeur de la combo?

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
11
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
14 décembre 2006

Non au début la combobox1 est vide normal mais ensuite du moment où je cherche à sélectionner cela revient automatiquement sur "site1" quelquesoit le site que je sélectionne :s

De plus quand je cherche à mettre
ElseIf UserForm3.ComboBox1.Value = "site2" Then

J'ai un msg d'erreur : "erreur de compilation : cette instruction doit être la première de la ligne" ?!?
Messages postés
11
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
14 décembre 2006

else if (avec un espace entre else et if)
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Tu dois forcer la valeur de ta combo quelque part met tout le code de combobox1_change!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
11
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
14 décembre 2006

Voila mon code en entier

Private Sub ComboBox1_Change()



'liste déroulante combobox2 projet userform3
    If UserForm3.ComboBox1.Value = "Site1" Then
    Dim tableau()
    Dim j As Integer
    Sheets("Site1").Select
    j = 8
    Do
    ReDim Preserve tableau(1 To j)
    tableau(j) = Range("F" & j).Value
    ComboBox2.AddItem tableau(j)
    j = j + 1
    Loop Until (Range(("F" & j)).Value) = "" Or IsEmpty(Range(("F" & j)).Value)
   
Else If UserForm3.ComboBox1.Value = "Site2" Then
       Sheets("Site2").Select
    j = 8
    Do
    ReDim Preserve tableau(1 To j)
    tableau(j) = Range("F" & j).Value
    ComboBox2.AddItem tableau(j)
    j = j + 1
    Loop Until (Range(("F" & j)).Value) = "" Or IsEmpty(Range(("F" & j)).Value)
    End If
       
'liste déroulante combobox1 site userform3
    UserForm3.ComboBox1.AddItem ("Site1")
    UserForm3.ComboBox1.AddItem ("Site2")
    UserForm3.ComboBox1.AddItem ("Site3")
      ComboBox1.ListIndex = 0
   
End Sub