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

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

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Au fait, vous avez excel 2013 et vous utilisez toujours le format de fichier .xls obsolète depuis plus de 15 ans
Vous vous privez ainsi de certaines fonctionnalités utiles.

Cordialement
 

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
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
Super. Merci.

Je vais analyser les différentes solutions pour bien comprendre. ;-)
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…