Besoin d'aide ComboBox

cs_adeux Messages postés 5 Date d'inscription jeudi 23 décembre 2004 Statut Membre Dernière intervention 29 décembre 2004 - 29 déc. 2004 à 10:42
gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007 - 29 déc. 2004 à 14:23
Bonjour,

Je commence tout juste à découvrir VB, et déjà je me pose des tas de questions!!!

Où puis-je écrire mon code pour que dès que j'ouvre excel, mes combobox soient remplies à l'ouverture?

Et en plus, je trouve pas mon erreur dans la fin de la boucle...

Planning.ComboBox1.Clear
i = 2
Do

Sheets("Planning").Select
Planning.ComboBox1.AddItem Camions.Range("A" & i) 'ListCount=i

i = i + 1

Loop Until ((Camions.Range("A" & i) = "") Or ((Not Camions.Cells("A" & i).MergeCells) And (Not Camions.Cells("A" & i - 1).MergeCells)))

Merci pour votre aide!!

10 réponses

gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007
29 déc. 2004 à 10:48
Salut adeux,

concernant l'exécution de ton code à l'ouverture de ton fichier xls, il faut que tu montes une sub nommée auto_open, et tu y colles ton code d'init.
La sub auto_open est exécutée à l'ouverture.

Concernant ton init des combo, qu'est ce que Camions ?
si c'est une feuille excel, il faut que tu fasses un truc du genre :
Worksheets("Planning").ComboBox1.AddItem Worksheets("Camions").Cells(i,1)


Guich
0
cs_adeux Messages postés 5 Date d'inscription jeudi 23 décembre 2004 Statut Membre Dernière intervention 29 décembre 2004
29 déc. 2004 à 10:55
En fait c'est exact, c'est une feuille mais c'est pas là que mon code plante c'est au niveau de la fin de la boucle dans loop Until...

La sub auto-open est à écrire directement dans le code de la feuille xls ou plutôt dans ThisWorkBook?

Merci pour ton aide
0
gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007
29 déc. 2004 à 11:24
Perso je préfère mettre tous les codes annexes dans un module (intégré à ton classeur) et ne laisser que les évènements des contrôles sur le code de la feuille.

T'essaie de faire quoi avec ta condition à la fin ?
Tant que la cellule est vide OU (cellule Ai non fusionnée ET cellule Ai-1 non fusionnée)

Déjà, remplace cells par range. cells s'utilise sous la forme cells(ligne,colonne) alors que range peut être sous la forme range("colonne" & ligne) ==> la cellule A2 est Range("A2") ou Range ("A" & i) lorsque i=2 ou Cells(2,1) ou cells (i,1) lorsque i=2.
Nuance non sans conséquence.

Si ça ne marche toujours pas, il faut se poser la question suivante :
Quand tu dis ça marche pas, c'est qu'il te met un message d'erreur à la traduction de ta condition ou c'est que cette condition n'est jamais vraie, et donc il ne s'arrête pas et donc fini par une erreur de dépassement de mémoire.
Le plus simple est d'exécuter ton code en pas à pas et de voir à quel moment ça merde.
Cela te permet de vérifier qu'il réagit bien comme tu le souhaites.

Guich
0
cs_adeux Messages postés 5 Date d'inscription jeudi 23 décembre 2004 Statut Membre Dernière intervention 29 décembre 2004
29 déc. 2004 à 11:37
En fait j'aimerais écrire dans ma combobox, les valeur qui sont dans une autre feuille de calcul. Comme je ne sais pas s'il y a quelque chose pour connaître la fin d'un tableau, j'ai éffectivement écrit que la boucle s'arrêtait tant qu'il n'y a plus de valeurs, mais en fait, ca ne marce pas parce que j'ai des cellules fusionnées. Donc tant que aussi, les lignes ne sont plus fusionnées....

Connaîs-tu une facon plus simple?

Adeux
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007
29 déc. 2004 à 13:41
Je t'avouerai que non.

tu utilises quoi comme version d'Excel ?

je vais reproduire ton cas de mon coté et je te tiens au courant

Guich
0
cs_adeux Messages postés 5 Date d'inscription jeudi 23 décembre 2004 Statut Membre Dernière intervention 29 décembre 2004
29 déc. 2004 à 13:43
Pas la peine, j'ai trouvé comment faire!

Merci....

Adeux
0
gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007
29 déc. 2004 à 13:55
Pareil,

j'ai trouvé une boucle qui te permet de le faire.

Si t'as trouvé, tant mieux, par contre pense à publier ta solution afin que ceux qui viennent après puisse en profiter.

Bon courage pour la suite
Guich
0
cs_adeux Messages postés 5 Date d'inscription jeudi 23 décembre 2004 Statut Membre Dernière intervention 29 décembre 2004
29 déc. 2004 à 14:06
Voici ma solution:
:)
Planning.ComboBox1.Clear
i = 2

Do
j = 1
Sheets("Planning").Select
Planning.ComboBox1.AddItem Camions.Range("A" & i) 'ListCount=i
If Camions.Cells(i + j - 1, 1).MergeCells Then
Do
j = j + 1
Loop Until Not Camions.Cells(i + j - 1, 1).MergeCells
j = j - 1
End If
i = i + j

Loop Until (Camions.Range("A" & i) = "")

End Sub

Par contre, j'ai d'autres pblm.... :sad)

J'ai pluseiurs CCB. Je voudrais faire en sorte que si je sélectionne une valeur dans la première CCB (par exemple Client1), dans la deuxième CCB, il n'y ait que les bennes associées à ce client. Je croyais que c'était écrit dans un Index mais apparemment ca marche pas. Alors Comment Faire?????
:question)
0
gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007
29 déc. 2004 à 14:17
Je te livre la mienne, elle est plus light :

Sub init()
Dim i As Integer

i = 1
Sheets("Planning").ComboBox1.Clear     ' vide les valeurs résiduelles

Do While (1)
     ' Principe de la boucle
     ' si une ligne n'est pas vide, elle alimente la combo
     ' si elle est vide, vérifie qu'elle n'est pas fusionnée avec une autre cellule
     ' si fusion, passe à la suivante
     ' si pas de fusion, on considère qu'on est en fin de données
    If Sheets("Camions").Cells(i, 1) = "" Then
        If Sheets("Camions").(Cells(i, 1).MergeCells = False) Then Exit Do
    Else
        Sheets("Feuil1").ComboBox1.AddItem Cells(i, 1)
    End If
    
    i = i + 1
Loop
End Sub


Après, à toi de l'intégrer ou non

Guich
0
gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007
29 déc. 2004 à 14:23
Pour ce qui est de tes CCB, il faut que tu te paluches à la mano les init des valeurs selon la valeur choisie dans la CCB parente.

Je suppose que tes données sont sur une feuille Excel.
Selon comment elles sont ordonnées (sur des feuilles séparées ou en colonne), il faut que tu réappelles ta fonction d'init en conséquence.

Guich
0
Rejoignez-nous