XL 2013 Texte dans Texbox selon un ID choisi dans une combobox

  • Initiateur de la discussion Initiateur de la discussion Dae_mon
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Dae_mon

XLDnaute Nouveau
Bonjour à toutes et tous,

Petit problème d'adaptation de code dans le fichier joint.

J'ai une combobox1 où les données du Tableau1 sont affichées (choix dans le code des colonnes affichées).

Je souhaiterai, selon le choix dans la combobox, afficher la colonne Nom3 dans une Texbox selon le choix réalisé.

Malheureusement, le code ne fonctionne pas.

Merci d'avance.
 

Pièces jointes

Solution
Re,

Dans le fichier joint, voyez différentes méthodes de valorisation des textbox.
Choisissez les mêmes valeurs dans les combobox et vous verrez que quelque soit la méthode, il afficheront les mêmes valeurs.
Pour combobox2 on affiche les valeurs à partir du tableau au moyen d'une variable de module ou à partir des données contenues dans le combobox.
Vous verrez également la différence entre .BoundColumn = 0 et .BoundColumn = 1 (même si la colonne est d'index(0))

Ces trois méthodes seront plus rapides que le couple Application.Index/Application.Match.

Cordialement
Bonjour,

Pour un combobox la numérotation de colonnes va de 0 à N donc sa propriété BoundColumn doit être 0 et non 1 si vous voulez l'identifiant.*
Et si vous utilisez Application.Index, vous devriez mettre tout d'abord le résultat dans une variable puis en tester la valeur. En programmation il existe une règle importante : toujours se méfier de l'attendu et de ce qui paraît aller de soit
VB:
Dim nom as variant
nom = Application.Index(....., .Match....)
If Not Iserror(nom)  then .....

[Edit]*voir correction au post#8[/edit]
 
Dernière édition:
Bonjour,

Pour un combobox la numérotation de colonnes va de 0 à N donc sa propriété BoundColumn doit être 0 et non 1 si vous voulez l'identifiant.
Et si vous utilisez Application.Index, vous devriez mettre tout d'abord le résultat dans une variable puis en tester la valeur. En programmation il existe une règle importante : toujours se méfier de l'attendu et de ce qui paraît aller de soit
VB:
Dim nom as variant
nom = Application.Index(....., .Match....)
If Not Iserror(nom)  then .....
Hello.

Effectivement, je n'avais pas fait attention à la propriété de BoundColumn. Merci. ;-)

Concernant Application.Index, je transforme comme suit mais pour la méthode Match, il m'indique référence incomplète ou non qualifiée:

VB:
Private Sub ComboBox1_Change()

Dim nom As Variant
nom = Application.Index(Range("Tableau1[Nom3]"), .Match(CInt(ComboBox1), Range("Tableau1[ID]"), 0))
If Not IsError(nom) Then TextBox1 = nom
End If

End Sub
 
Re

Vous êtes certains que c'est vous qui avez écrit les lignes précédentes ?

Si vous mettez Application.Index et pas With.. end With, il faut utiliser aussi Application.Match
Avec With :
VB:
With Application
  nom = .Index(Range("Tableau1[Nom3]"), .Match(CInt(ComboBox1), Range("Tableau1[ID]"), 0))
  'if not isError(nom) then ......suite...'
 End With
N'utilisez pas d'instruction que vous ne comprenez pas, n'apprenez pas par copier/coller, c'est la plus mauvaise façon d'apprendre.
 
Re

Vous êtes certains que c'est vous qui avez écrit les lignes précédentes ?

Si vous mettez Application.Index et pas With.. end With, il faut utiliser aussi Application.Match
Avec With :
VB:
With Application
  nom = .Index(Range("Tableau1[Nom3]"), .Match(CInt(ComboBox1), Range("Tableau1[ID]"), 0))
  'if not isError(nom) then ......suite...'
 End With

N'utilisez pas d'instruction que vous ne comprenez pas, n'apprenez pas par copier/coller, c'est la plus mauvaise façon d'apprendre.
J'essaie de comprendre, bien entendu, les pistes de réponses.

J'ai passé plusieurs jours à chercher sur le net et à regarder des videos pour essayer de trouver l'erreur.

Si je poste ici, c'est que je ne sais y arriver seul.

Merci en tout cas pour les informations. Je vais essayer de comprendre et d'intégrer celles-ci.
 
J'ai du modifier un peu le code car quand il recherche la valeur 1, le .match renseigne 0 comme ligne de tableau sans doute comme les colonnes qui commencent par 0:

VB:
Private Sub ComboBox1_Change()

With Application
  NumID = CInt(ComboBox1) + 1
  d = .Index(Range("Tableau1[Nom3]"), .Match(NumID, Range("Tableau1[ID]"), 0))
  If Not IsError(d) Then TextBox1 = d
End With

End Sub
 
Re,
le .match renseigne 0 comme ligne de tableau sans doute comme les colonnes qui commencent par 0

Euh désolé, je viens de reprendre les choses du début et je vous ai induis en erreur.
BoundColumn doit être 1 et non pas 0 même si la numérotation des colonnes va de 0 à N.

Lorsque la propriété est à 0 alors la propriété .value à pour valeur .la valeur de ListIndex (-1 à N-1) et c'est pour ça que vous avez 0 pour le premier élément


Cordialement
 
Dernière édition:
Re,


Euh désolé, je viens de reprendre les choses du début et je vous ai induis en erreur, désolé. BoundColumn doit être 1 et non pas 0 même si la numérotation des colonnes va de 0 à N.

Lorsque la propriété est à 0 alors la propriété .value à pour valeur .la valeur de ListIndex (-1 à N-1) et c'est pour ça que vous avez 0 pour le premier élément


Cordialement
Tu avais raison. si je teste avec BoundColumn = 1 alors il me prends la deuxième colonne => il faut bien le mettre à 0. (Cf pièce jointe).

Par contre je me demande si cela est possible de réaliser une fonction avec le code qui permettrait d'envoyer selon plusieurs renseignements dans plusieurs textBox. Avez-vous des conseils?

VB:
Function ListeToBox(Liste, RNomCol, Rid, Box)

With Application
  NumID = CInt(Liste)
  d = .Index(Range("RNomCol"), .Match(NumID, Range("Rid"), 0))
  If Not IsError(d) Then Box = d
End With
End Function
 

Pièces jointes

Re,

Dans le fichier joint, voyez différentes méthodes de valorisation des textbox.
Choisissez les mêmes valeurs dans les combobox et vous verrez que quelque soit la méthode, il afficheront les mêmes valeurs.
Pour combobox2 on affiche les valeurs à partir du tableau au moyen d'une variable de module ou à partir des données contenues dans le combobox.
Vous verrez également la différence entre .BoundColumn = 0 et .BoundColumn = 1 (même si la colonne est d'index(0))

Ces trois méthodes seront plus rapides que le couple Application.Index/Application.Match.

Cordialement
 

Pièces jointes

Dernière édition:
Re,

Dans le fichier joint, voyez différentes méthode de valorisation des textbox.
Choisissez les mêmes valeurs dans les combobox et vous verrez que quelque soit la méthode, il afficheront les même valeur.
Pour combobox2 on affiche les valeurs à partir du tableau au moyen d'une variable de module ou à partir des données contenues dans le combobox.
Vous verrez également la différence entre .BoundColumn = 0 et .BoundColumn = 1 (même si la colonne est d'index(0))

Ces trois méthodes seront plus rapides que le couple Application.Index/Application.Match.

Cordialement
Super. Merci.

Je vais analyser les différentes solutions pour bien comprendre. ;-)
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
113
Retour