L AIDE D UN EXPERT EN VBA SVP

L AIDE D UN EXPERT EN VBA SVP - VB/VBA/VBS - Programmation

Marsh Posté le 14-03-2005 à 16:35:17    

J AI UNE LISTBOX NOMME ONGLET UNE COMBOBOX NOMME MARQUE ET UNE DEUXIEME NOMME CLASSE. La listbox renvoie a une feuille du classeur, la combobox nommé MARQUE renvoie à une liste dans la colonne A. Jusque là tout est ok... APRES AIE(ligne de pointillé----). J aimerai que le choix effectué dans cette combobox renvoie à une liste (dépendant des lignes) ds la combobox CLASSE.  
 
Présentation feuille excel  
 
        A            B       C        D  
1   Boulanger     pain     bonbon    tarte  
2   Boucher       boeuf    saucisson jambon  
3   Restaurant    entree   plat      dessert  
 
Programme  
 
 
 
Private Sub Onglets_Change()  
Dim OngletSelect As Integer  
' Déterminer la ligne sélectionnée dans la liste déroulante  
    OngletSelect = ListeDeroulanteCombinee.Onglets.ListIndex + 2  
' Mise à jour ComboBox Modele et Type  
    Dim DerniereMarque As String  
    Sheets(OngletSelect).Activate  
    DerniereMarque = Range("A1" ).End(xlDown).Address  
    Marque.RowSource = "A1:" & DerniereMarque  
    Marque.ListIndex = 0  
 ---------------------------------------------------------------------    
    Dim Classix As Integer  
    Classix = ListeDeroulanteCombinee.Marque.ListIndex  
    Classe.RowSource = B Classix.End(xlToRight)  
    Classe.ListIndex = 0  
    End Sub
 
---------------

Reply

Marsh Posté le 14-03-2005 à 16:35:17   

Reply

Marsh Posté le 15-03-2005 à 12:04:11    

Je ne suis pas un expert...
Mais je propose quand même une solution qui fonctionne (j'ai testé).
 

Option Explicit
 
Dim rMarque As Range
 
Private Sub cboMarque_Change()
  Dim iRangee As Integer
  Dim rClasse As Range
  Dim vI As Variant
  cboClasse.Clear
  For Each vI In rMarque
    If vI.Text = cboMarque.Text Then
      iRangee = vI.Row
      Exit For
    End If
  Next vI
  Set rClasse = Range(Cells(iRangee, 2), Cells(iRangee, 2).End(xlToRight))
  For Each vI In rClasse
    cboClasse.AddItem (vI.Text)
  Next vI
End Sub
 
Private Sub lstOnglet_Change()
  Dim vI As Variant
  cboMarque.Clear
  Sheets(lstOnglet.Text).Activate
  Set rMarque = Range([A1], [A1].End(xlDown))
  For Each vI In rMarque
    cboMarque.AddItem (vI.Text)
  Next vI
End Sub
 
Private Sub UserForm_Initialize()
  Dim vI As Variant
  For Each vI In Worksheets
    lstOnglet.AddItem (vI.Name)
  Next vI
End Sub


 
D'après ton code, il me semble que tu as 2 feuilles avant celles qui contiennent les données à mettre en liste. Il faudra adapter la boucle qui énumère les feuilles.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 15-03-2005 à 13:16:50    

MARRE DES DOUBLES POSTS POUR UN MEME SUJET!!!!!!!
Je réponds à celui-ci, puis je me rends compte qu'il y en a un autre avec tout un échange...
Plus que chiant!!


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 15-03-2005 à 15:17:38    

Merci ALAIN TECH et dsl pour le double post
j ai essayé de l inserer ds mon programme ms ca bloque au tout début.
pourrais je te l envoyer que tu y jete un oeil car avec skakes vous etes les deux seuls a avoir essayer de resoudre ce probleme.
merci d avance

Reply

Marsh Posté le 15-03-2005 à 15:22:40    

Je te donne mon adresse en MP


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 15-03-2005 à 15:26:37    

Chose importante quand "ça marche pas" ou "il bloque"...
 
DONNER LE MESSAGE D'ERREUR
 
Sinon, moi, je vais répondre:
"Et pourtant, chez moi, ça marche"
 
Et on n'aura pas fait avancer le schmilblick.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 15-03-2005 à 22:50:05    

Normalement c'est ok :
Voilà le code peu digeste ...

Code :
  1. Me.Classe.Clear
  2. For i = 1 To Len(Range("B" & Marque.ListIndex + 1).End(xlToRight).Address(Marque.ListIndex + 1, , xlR1C1))
  3. If IsNumeric(Right(Range("B" & Marque.ListIndex + 1).End(xlToRight).Address(Marque.ListIndex + 1, , xlR1C1), i)) And Not IsNumeric(Right(Range("B" & Marque.ListIndex + 1).End(xlToRight).Address(Marque.ListIndex + 1, , xlR1C1), i + 1)) Then LastCol = Right(Range("B" & Marque.ListIndex + 1).End(xlToRight).Address(Marque.ListIndex + 1, , xlR1C1), i)
  4. Next i
  5. For j = 2 To LastCol
  6. Me.Classe.AddItem Cells(Marque.ListIndex + 1, j).Value
  7. Next j


En plus clair ...

Code :
  1. Me.Classe.Clear
  2. Dim adDerCol As String
  3. '
  4. ' on récupère l'adresse de la dernière cellule utilisée sous la forme RxCy
  5. '
  6. adDerCol = Range("B" & Marque.ListIndex + 1).End(xlToRight).Address(Marque.ListIndex + 1, , xlR1C1)
  7. For i = 1 To Len(Range("B" & Marque.ListIndex + 1).End(xlToRight).Address(Marque.ListIndex + 1, , xlR1C1)) ' On récupère la taille de l'adresse pour faire une boucle qui va nous permettre de savoir le numéro de la dernière colonne (x ou xx ou encore xxx ...)
  8. If IsNumeric(Right(Range("B" & Marque.ListIndex + 1).End(xlToRight).Address(Marque.ListIndex + 1, , xlR1C1), i)) And Not IsNumeric(Right(Range("B" & Marque.ListIndex + 1).End(xlToRight).Address(Marque.ListIndex + 1, , xlR1C1), i + 1)) Then LastCol = Right(Range("B" & Marque.ListIndex + 1).End(xlToRight).Address(Marque.ListIndex + 1, , xlR1C1), i)
  9. Next i
  10. For j = 2 To LastCol 'Donc, jusqu'à la dernière colonne, on prend les valeurs des cellules ...
  11. Me.Classe.AddItem Cells(Marque.ListIndex + 1, j).Value
  12. Next j


Il y a juste un bug : s'il n y a qu'une colonne de remplie pour la Combobox, il y a une barre de défilement qui apparaît. Cela ne gène en rien l'éxécution du programme.
---
Lol ça m'a donné du fils a retordre tout de même ...
Edit : C'est pas plus digeste le premier que le second ... mais bon je peux expliquer si besoin est. :)


Message édité par knakes le 15-03-2005 à 22:51:07
Reply

Marsh Posté le 16-03-2005 à 08:59:14    

knakes j ai inserer ton programme ds le mien il colle pil poil... ca fait plaisir sauf qu il y a un hic comme toutes les bonnes nouvelles il y a une mauvaise. c est pour ca que je voulais t envoyer le fichier excel. en fait à la place de bonbon saucisson plat, il y a les quantites correspondante à pain boeuf entree. donc il doit y avoir un decalage de 1 sur 2 ds le choix de liste. et suivant mon choix je voudrais que si je choisis bonbon par ex la quantité correspondante s affiche automatiquement par exemple bonbon 5.
alain tech y jete un oeil aussi .
J espere que vous allez resoudre mon probleme. Merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed