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

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

  • Test.xls
    38.5 KB · Affichages: 1
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

Hasco

XLDnaute Barbatruc
Repose en paix
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:

Dae_mon

XLDnaute Nouveau
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
 

Hasco

XLDnaute Barbatruc
Repose en paix
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.
 

Dae_mon

XLDnaute Nouveau
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.
 

Dae_mon

XLDnaute Nouveau
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
 

Hasco

XLDnaute Barbatruc
Repose en paix
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:

Dae_mon

XLDnaute Nouveau
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

  • TestAideEncodage.xlsm
    25 KB · Affichages: 1

Hasco

XLDnaute Barbatruc
Repose en paix
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

  • TestAideEncodage.xlsm
    28.5 KB · Affichages: 5
Dernière édition:

Dae_mon

XLDnaute Nouveau
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. ;-)
 

Discussions similaires

Statistiques des forums

Discussions
314 493
Messages
2 110 198
Membres
110 703
dernier inscrit
papysurf