Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

ComboBox, ListeBox

  • Initiateur de la discussion Rom
  • Date de début
R

Rom

Guest
Bonjour à tous, bonjour Forum,


Voici mon problème :

Dans un UserForm, j’ai une ListeBox avec des données déjà récupérées.
Il y a également une ComboBox et une TexteBox.
Je dispose d’un bouton de commande ‘Ajouter’

Ce formulaire de saisie doit implémenter un tableau dans Excel formé par les 3 champs de la ListeBox, de la ComboBox et de la TexteBox.
Je voudrais qu’une fois que j’ai sélectionné une donnée de la ListeBox et rempli la ComboBox et la ListeBox, en cliquant sur ‘Ajouter’ :
- le tableau récupère les 3 infos
- les saisies suivantes pour la ComboBox proposent en choix les données enregistrées dans le tableau pour sa colonne.

Je ne sais pas si j’ai été très clair, mais j’ai fourni en pièce jointe le fichier.
Merci d’avance si vous réussissez à m’aider. Dernière précision, j’utilise Excel 97.

@+
Rom.
 

Pièces jointes

  • Rom.zip
    42.2 KB · Affichages: 31
  • Rom.zip
    42.2 KB · Affichages: 30
  • Rom.zip
    42.2 KB · Affichages: 31
Z

zon

Guest
Bonsoir Rom et le forum,

Pour récuperer la valeur de ta listbox Lst_Axe :

Private Sub Cmd_Ajouter_Click()
Dim I As byte
For I = 1 To Lst_Axe.ListCount 'En fait ici Pour tous les elements de la listbox, ici de 1 à 4
If Lst_Axe.Selected(I) Then 'on teste si selectionné
With Sheets("axes")
.[A65536].End(xlUp)(2) = Lst_Axe.Value 'La 1 ere cellule non vide de la colonne A dans "axes" recupere la valeur de lst_Axe
.[B.....]=cbo_nom
.[C....]=txt_niveau
End With
Exit For
End If
Next I
End Sub


Pour initialiser ta combo pour les noms dans userform initialize

cbo_nom.rowsource="codes!" & Range("B2:B" & [B65536].End(xlUp).Row).Address 'ici avec le .row on recupere juste le N°

RQ Pourquoi saisir à chaque fois 4 axes pour n'en selectionner qu'un à l'arrivée ?

A+++
 
R

Rom

Guest
Merci pour tes explications et le code, mais j'ai tj des pbs !

---> Pour récuperer la valeur de ta listbox Lst_Axe

J'ai essayé, mais ça ne fonctionne pas. (?)
Pas d'erreur de compilation, mais rien ne se copie dans le tableau...


----> Pour initialiser ta combo pour les noms dans userform initialize

Des valeurs sont bien récupérées, mais ce sont les valeurs B1 et B2.
Or il faudrait récupérer la plage B2 jusqu'à la dernière ligne où il y a des données.
J'ai essayé de modifier la ligne de commande, mais sans succès...


----> RQ Pourquoi saisir à chaque fois 4 axes pour n'en selectionner qu'un à l'arrivée ?

C'est la phase d'initialisation de l'appli. J'ai simplifié l'ensemble pour exposer mon problème. Mais j'ai besoin de cette saisie car en fonction de l'axe choisi, le contenu des listBox sera différent.


Merci !
 

Pièces jointes

  • Rom.zip
    45.6 KB · Affichages: 23
  • Rom.zip
    45.6 KB · Affichages: 31
  • Rom.zip
    45.6 KB · Affichages: 26
Z

zon

Guest
Bonjour Rom et le forum,

---> Pour récuperer la valeur de ta listbox Lst_Axe

L'erreur vient du exit for il est placé aprés le end if, ce qui veut dire que si l'élément sélectionné n'est pas celui pour lequel i=1 alors on sort de suite de la boucle.=> à mettre AVANT le end if .

De plus il y avait un piége, au niveau de la boucle , Listcount renvoie 4 ici par contre comme une listbox renvoie un tableau VBA (ARRAY), Le 1 er élément est 0, le 4 eme est 3, donc faire démarrer I à 0 jusu'à listcount-1

Enfin comme tu as déjà les valeurs de ta cbo_nom qui sont déjà inscrits dans ta feuille axes, il est pas donc nécessaire de le reécrire à la dernière cellule mais on va chercher plutôt cette valeur ici dans une boucle (on pourrait faire aussi un find) comme suit, on mettra dans la colonne A l'axe et colonne C le niveau

Dim C as range
.... La boucle avec le I à modifier
with sheets("axes")
For each C in .range("B2:B"&.[B65536].enc(xlup).row)
if C.text=cbo_nom.value then
c.offset(0,-1)=lst-axe.value 'Offset voir dans l'aide VBA
c.offset(0,1)=txt_niveau
exit for 'attention à mettre avnat le end if le exit for
end if
...

----> Pour initialiser ta combo pour les noms dans userform initialize
Le probleme vient que tu cherches le dernier n° de ligne de la feuille code en ne specifiant pas la feuille comme suit

Cbo_Nom.RowSource = "axes!" & Range("B2:B" & [B65536].End(xlUp).Row).Address

il manque sheets("axes") devant [B65536].... pour bien recuperer le N° de la colonne B de la feuille code...


A+++
 
R

Rom

Guest
Merci pour toutes ces explications, tout ce que tu m’as dit fonctionne bien !

Mais j’ai un encore un problème, je sais je suis chiant
Je vois concrètement ce qu’il faut faire, mais je n’arrive pas à l ‘écrire correctement.

Là actuellement, si je choisis 2 fois de suite le même ‘Nom’, il m’écrase la donnée précédente.
Or je voudrais qu’il ajoute une ligne.
De plus, si dans ‘Nom’, je tape une valeur qui n’est pas inscrite dans la feuille axe, il n’en tient pas compte et n’écrit rien.

Dim C As Range
'.... La boucle avec le I à modifier
With Sheets("axes")
'For Each C In .Range("B2:B" & .[B65536].enc(xlUp).Row)
For Each C In .Range("B2:B" & .[B65536].End(xlUp).Row)
If C.Text = Cbo_Nom.Value Then
C.Offset(0, -1) = Lst_Axe.Value 'Offset voir dans l'aide VBA
C.Offset(0, 1) = Txt_Niveau
Exit For 'attention à mettre avnat le end if le exit for
End If
'...
Next C

End With


Je sens bien que ca se joue autour de ‘If C.Text = Cbo_Nom.Value Then’ et de la suite, mais je n’arrive pas à coder ça correctement…Comment remédier à ça ?

Merci beaucoup beaucoup !
 

Pièces jointes

  • Rom.zip
    46.2 KB · Affichages: 50
  • Rom.zip
    46.2 KB · Affichages: 51
  • Rom.zip
    46.2 KB · Affichages: 53
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…