Combo et Lettre colonne du choix effectué

ben_osty

XLDnaute Nouveau
Salut à tous,

A partir d'une Combobox1 qui récupère des données dans la ligne 4 de mon tableau via :

Private Sub UserForm_Initialize()
Combobox1.List = Application.Transpose(Range([j4], [IV4].End(xlToLeft)))
End Sub

je cherche à obtenir la "Lettre" de la colonne correspondant au choix effectué dans la combobox1.
Le but étant de renvoyer dans textbox1 le contenu d'une ligne située dans la même colone que le choix effectué.

Dans le sens inverse c'est a dire en partant d'une combobox qui puise dans une colonne j'utilise :

Textbox.Value = ActiveSheet.Range("B" & (Combobox1.ListIndex )).Value

Mais la je suis bloqué. Par ailleurs comme je débute, quelqu'un pourrait-il m'expliquer ce que signifie l'enchainement (Range([j4], [IV4].End(xlToLeft))).

Merci beaucoup
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Combo et Lettre colonne du choix effectué

Bonjour Ben_osty, bonjour le forum,

Range([j4], [IV4].End(xlToLeft)) signifie la plage qui va de J4 à la dernière cellule éditée de la ligne 4. Donc, par exemple, la plage J4:M4 (si la dernière cellule éditée de la ligne 4 se trouve dans la colonne M).
Pour connaître la colonne tu pourrais te servir du ListIndex de ta Combobox1 sachant que le premier élément d'une combobox a 0 comme listIndex. tu pourrais déclarer une variable col
Code:
Dim col As Byte
puis la définit avec :
Code:
col = Me.ComboBox1.ListIndex + 10
col vaudra 10 (= J) pour le premier élément de la ComboBox1
col vaudra 11 (= K) pour le second élément de la ComboBox1, etc.
Ça donnerait (en considérant que la ligne a été définie avant) :
Code:
Me.TextBox1.Value = Cells(li, col).Value
 
Dernière édition:

fhoest

XLDnaute Accro
Re : Combo et Lettre colonne du choix effectué

Bonjour,
edit: bonjour robert tu as répondu entre temps...:D
il y a un problème dans tes explications joindre ton fichier serait plus facile a comprendre,
tu parles d'une ligne mais laquelle car la ta recherche de linstindex est la colonne.

pour ton enchainement il veut dire:
range([j4],[iv4].end(xltoleft) =prendre la sélection des plages de la cellule J4 jusqu’à la dernière cellule vide à gauche de la colonne IV
si j'ai manqué de précision fait le savoir.
A+
 

ben_osty

XLDnaute Nouveau
Re : Combo et Lettre colonne du choix effectué

Merci pour les infos sur la synthaxe je demarre et chaque "traduction" est un petit plus pour continuer.
Je joint mon fichier ecxel avec une précision de ce que je souhaite faire.

Il s'agit d'une base de données qui comprend en ordonnées des noms latins de plantes = "Genre esp var" (ds la col A) et en abscisse des noms de "massifs" (sur la ligne 4).

Dans les Colonnes B, C, D... et I, il y a des données constantes qui permettent de décrire la plante.
A l'intersection de la ligne d'une plante et d'un massif, la case est vide si la plante n'est pas présente et il y a sa densité pour ce massif si elle est présente.

Si c'est possible je souhaite que vous m'éclairiez sur la manière de faire les opérations 2 et 3 (voir image jointe au message). Je pense que dans le sens inverse (3, 2, 1) ça fonctionne aussi. Si vous savez comment faire je veux bien apprendre également!!

3 opérations.jpg


Merci, a bientot
Benjamin
 

Pièces jointes

  • Base de données vgtx.xls
    60 KB · Affichages: 59

Robert

XLDnaute Barbatruc
Repose en paix
Re : Combo et Lettre colonne du choix effectué

Bonsoir le fil, bonsoir le forum,

Ton fichier n'apporte rien car tu nous proposes une userform gigantesque une image soit-disant explicative. Désolé mais je ne comprends pas. Je peux juste compléter les explications de mon post précédent en disant que la varialble li serait définie par le Listindex de la combobox ComboBox_GEV plus 5.
Donc :
Code:
li = ComboBox_GEV.ListIndex + 5
et l'intersection sera donc :
Code:
Cells(li, col)
 

ben_osty

XLDnaute Nouveau
relation entre la liste d'une combo et données du tableur

En effet, après relecture et quelques jours écouler je m’aperçois que mon message n'était pas suffisamment clair...
Je vais tenter de me réexpliquer.

J'ai une combobox (nommée Cbo_RefMassif ) qui me propose une liste. Cette liste est alimentée grâce des cellules situées sur une même ligne. La formule d'initialisation de ma combo est :

Private Sub UserForm_Initialize()

Cbo_RefMassif.List = Application.Transpose(Range([j4], [iv4].End(xlToLeft)))

End Sub

Lorsque sur dans userform, et dans la liste déroulante de la Cbo_refMassif je clique sur un choix, je souhaite lire et affecter à une textbox la valeur d'une autre cellule située dans une colonne ou une ligne différente?

Le cercle rouge de l'étape 1-

correspond a la cellule contenant la valeur que je sélectionne dans ma Cbo_RefMassif

Le cercle rouge de l'étape 2 -

correspond ce que je veux lire après avoir fait le choix dans la Cbo_RefMassif

Le cercle rouge de l'étape 3 -

correspond à une deuxième valeur que je veux lire après avoir fait le choix dans la Cbo_RefMassif.

J'espère que je ne me suis pas trop embrayé les pinceaux et que vous m'aurez mieux compris.

A bientot, je vous remercie d'avance
 

Pièces jointes

  • VBA.jpg
    VBA.jpg
    63.2 KB · Affichages: 90
  • VBA.jpg
    VBA.jpg
    63.2 KB · Affichages: 92
  • VBA.jpg
    VBA.jpg
    63.2 KB · Affichages: 95
Dernière édition:

patoq

XLDnaute Occasionnel
Re : Combo et Lettre colonne du choix effectué

Salut ben_osty ,salut le forum
D'après ce que j'ai compris ,dans ton choix de combobox tu vas récuperer une colonne entière ,il te faut une deuxième valeur pour faire l'intersection et ne retrouver qu'une cellule.
Eclaires moi car la je vois pas!!!
A plus
 

fhoest

XLDnaute Accro
Re : Combo et Lettre colonne du choix effectué

Bonjour à tous ,
voici ton fichier en retour.
A toi de voir si cela te convient ou si il faut modifier quelque chose:

A+
 

Pièces jointes

  • Copie de Base de données vgtx_fhoest.xls
    57 KB · Affichages: 45
Dernière édition:

ben_osty

XLDnaute Nouveau
ça se précise

Bonjour a tous et merci pour votre contribution.

Je me suis inspiré de vos approches pour résoudre une partie de mon problème. Cela donne :


Private Sub Cbo_RefMassif_Click()

Dim c As Range, d As Range, fin_de_ligne As Integer
fin_de_ligne = Range("a65000").End(xlUp).Row

For Each c In Range("j4:ae4")
If c = Cbo_RefMassif.Value Then
For Each d In Range(Cells(5, Cbo_RefMassif.ListIndex + 10), Cells(fin_de_ligne, Cbo_RefMassif.ListIndex + 10))
If d <> "" Then plant1.Caption = Range("a" & d.Row).Value
End If
Next d
End If
Next c
End Sub

Je souhaite pour aller jusqu'au bout de mon idée opérer plusieurs actions après if d <> "" par exemple
If d <> "" Then plant1.Caption = Range("a" & d.Row).Value And dens_plant1.Caption = d.Value

Cependant lorsque j'ajoute "AND dens_plant1.Caption = d.Value" cela ne fonctionne pas et ma macro bug..
Comment fait-on pour enchainer plusieurs actions?

2ème petite question :

dim d As Range
For Each d In Range (...,...)
If d <> "" then ....
Next d

"For Each" et "Next d" signifie-t-il que la macro fait une boucle? Si la condition d <> "" est remplie plusieurs fois lors d'une telle procédure comment puis-je inscrire la valeur de d pour la première boucle qui répond à d <> "" dans le label dens_1, puis la valeur de d pour la seconde boucle qui répond à d <> "" dans le label dens_2.

Je joinds à mon message le fichier modifié, à amender de vos remarques.
a bientot

Benjamin
 

Pièces jointes

  • VBA_3 fevrier 20121 (2).xlsm
    33.3 KB · Affichages: 53

fhoest

XLDnaute Accro
Re : ça se précise

Je souhaite pour aller jusqu'au bout de mon idée opérer plusieurs actions après if d <> "" par exemple
If d <> "" Then plant1.Caption = Range("a" & d.Row).Value And dens_plant1.Caption = d.Value

Cependant lorsque j'ajoute "AND dens_plant1.Caption = d.Value" cela ne fonctionne pas et ma macro bug..
Comment fait-on pour enchainer plusieurs actions?

2ème petite question :

dim d As Range
For Each d In Range (...,...)
If d <> "" then ....
Next d

"For Each" et "Next d" signifie-t-il que la macro fait une boucle? Si la condition d <> "" est remplie plusieurs fois lors d'une telle procédure comment puis-je inscrire la valeur de d pour la première boucle qui répond à d <> "" dans le label dens_1, puis la valeur de d pour la seconde boucle qui répond à d <> "" dans le label dens_2.

Je joinds à mon message le fichier modifié, à amender de vos remarques.
a bientot

Benjamin
BONSOIR
en 1° dens_plant1 n'existe pas ton objet n'existe pas il faut le dessiner.
voir a remplacer le code par:
Code:
Private Sub Cbo_RefMassif_Click()

Dim c As Range, d As Range, fin_de_ligne As Integer
fin_de_ligne = Range("a65000").End(xlUp).Row

For Each c In Range("j4:ae4")
    If c = Cbo_RefMassif.Value Then
        For Each d In Range(Cells(5, Cbo_RefMassif.ListIndex + 10), Cells(fin_de_ligne, Cbo_RefMassif.ListIndex + 10))
            If d <> "" Then
            plant1.Caption = Range("a" & d.Row).Text
            dens_1.Caption = d.Text
            End If
        Next d
    End If
Next c
End Sub
pour le reste je verrai ça un autre jour.
A+
 

fhoest

XLDnaute Accro
Re : Combo et Lettre colonne du choix effectué

Bonjour.
Oui merci, je n'avais pas vu que tu avais répondu.
je ferai ceci dans la semaine certainement.
il faut que je me penche sur le problème à nouveau.
voilà c'est fait , voici le code:
Code:
Private Sub Cbo_RefMassif_Click()

Dim c As Range, d As Range, fin_de_ligne As Integer
fin_de_ligne = Range("a65000").End(xlUp).Row
Dim x As Integer: x = 0

For Each c In Range("j4:ae4")
    If c = Cbo_RefMassif.Value Then
        For Each d In Range(Cells(5, Cbo_RefMassif.ListIndex + 10), Cells(fin_de_ligne, Cbo_RefMassif.ListIndex + 10))
            If d <> "" Then
            x = x + 1
            Me.Controls("plant" & x).Caption = Range("a" & d.Row).Text
            Me.Controls("dens_" & x).Caption = d.Text
            End If
        Next d
    End If
Next c
End Sub

A bientôt.
 
Dernière édition:

fhoest

XLDnaute Accro
Re : Combo et Lettre colonne du choix effectué

Re,
le :
Code:
d.row '=la ligne de la cellule d tester dans la boucle
et le
Code:
Me.controls("plant" & x).caption '= me=userform controls=un objet ici il s'agit de l'objet PLANT et le x pour l'incrémentation (n° de l'objet)
Si toute fois tu as compris
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 020
dernier inscrit
Mzghal