Microsoft 365 Problème combobox et label

dubarre

XLDnaute Occasionnel
Bonjour à tous,

Je viens vers vous car j’essaie de mettre ce code dans VBA dans userform j’ai 1 combobox et 2 labels

je voudrais pouvoir remplir les deux label avec la combobox mais il y a quelque chose que je ne comprends pas qui ne fonctionne pas pouvez-vous m’aider s’il vous plaît.
 

Pièces jointes

  • Comboboxremplilabel.xlsm
    17.4 KB · Affichages: 14

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Voici une correction possible de votre code. Si vous commencez vba, je vous conseille d'employer des noms de variables explicites. Par exemple 'Ligne' à la place de 'i' et 'derLigne' pour le numéro de la dernière ligne. Nous ne sommes plus dans les années 80 ou même 90 où nos bécanes avaient si peu de mémoire qu'ils nous fallait trouver des trucs super économiques en ram.

Vous avez également l'air de mélanger la méthode .Cells(ligne,colonne) avec la méthode .Range("Adresse") ou .Range(cellule1,cellule2). C'est certain que vous pouvez écrire cells(9,"A") mais au moins mettez "A" en deuxième argument. Et puisqu'on parlait de mémoire en ram, parlons aussi de rapidité. Il est plus rapide de calculer .Cells(9,1) que .Cells(9,"A") . Dans ce dernier cas "A" devra être convertit en 1 à l'éxécution.

VB:
Private Sub ComboBox1_Change()
    Dim Ligne As Long, derligne As Long
    '
    ' Travailler sur Feuil1
    With Sheets("feuil1")
        '
        ' Dernière ligne occupée en remontant du bas de la feuille
        derligne = .Cells(Rows.Count, 1).End(xlUp).Row
        '
        ' boucle de la ligne 2 à la dernière ligne occupée
        For Ligne = 2 To derligne
            '
            ' si la colonne 1 correspond au choix du combobox alors
            If .Cells(Ligne, 1).Value = CInt(Me.ComboBox1.Value) Then
                Me.Label1.Caption = .Cells(Ligne, 2).Value
                Me.Label2.Caption = .Cells(Ligne, 3).Value
                Exit For
            End If
        Next Ligne
    End With
End Sub

cordialement

Cordialement
 
Dernière édition:

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour
Et puisqu'on parlait de mémoire en ram, parlons aussi de rapidité. Il est plus rapide de calculer .Cells(9,1) que .Cells(9,"A") . Dans ce dernier cas "A" devra être convertit en 9 à l'éxécution.
Ah bon ? : Déjà le µP ne convertit pas "A" en 9 mais en 41 Hexa (ASCII > Hexa) donc en 0000000000000100 0000000000000001 ( là en 32bits) en binaire seul langage compris par les composants 1=+5v 0=0v ( schématisé) Quand je programmais en ASM une instruction était de env 2µs ( 4 périodes pour 1quartz 20Mhz maintenant c'est 2GHz et + donc 100 x plus rapide on descend à la nano sec ) pour, une conversion alpha hexa la routine est d'une dizaine d'instructions : 10 x 2=20µs pour la ROM c'était une routine de base et d'ailleurs certainement que maintenant c'est un composant qui fait direct
Donc quel humain peut juger d'une rapidité + ou - à ce niveau ??
Ah oui oubli : déjà le programme vba ( dans le Vbe) est immédiatement converti en HEXA
pour vérifier par curiosité !!!!!, renommer le fichier .xlsm en .zip ( eh oui !!! ) là vous aurez la structure de votre fichier ça peut surprendre ....!!!!!
et ensuite éditer le : xl/vbaProject.bin ( avec un éditeur Hexa comme Frhed), tout votre code est là DIrectement interprétable par Excel et donc le µP du PC
Un petit cours sans prétention !!!!! juste pour les curieux
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,
Déjà le µP ne convertit pas "A" en 9

Pffff ! C'était juste une petite erreur de rédaction. Cela valait-il une exégèse informatique ! Je ne rentrerai pas dans le jeu !
Entre ceux qui pèsent en octet chaque caractère d'une formule pour vous démontrer que la leur est meilleur et ceux qui tatillonnent au moindre faux pas, je commence en avoir ras la casquette de ces vieux.
 
Dernière édition:

herve62

XLDnaute Barbatruc
Supporter XLD
je commence en avoir ras la casquette de ces vieux.
Ah bon à 56 ans on est vieux ??? belle mentalité !!!!! donc t'auras vite marre de toi , à moins que tu sois le seul à ne pas vieillir ?
En plus ici il y a pas mal de "vieux" comme tu dis , et qui ont encore plus de connaissances que moi, je pense, et qui les mettent à dispo de "jeunes " ( donc comme toi) qui cherchent à savoir , s'améliorer , se perfectionner ....
Tu portes donc un mauvais jugement de valeurs à grand nombre d'entre nous
Mais bon on va continuer à repenser excel/vba ........ fin de polémique
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonsoir.
Une proposition d'un quasi vrai vieux alors (plus que 6 ans pour relire les Tintin) :
VB:
Option Explicit
Private TDon()
Private Sub UserForm_Initialize()
   Dim L As Long
   TDon = Feuil1.[A2:C2].Resize(Feuil1.[A1000000].End(xlUp).Rows - 1).Value
   For L = 1 To UBound(TDon): ComboBox1.AddItem CStr(TDon(L, 1)): Next L
   End Sub
Private Sub ComboBox1_Change()
   Dim L As Long
   If Not ComboBox1.MatchFound Then Exit Sub
   L = ComboBox1.ListIndex + 1
   Label1.Caption = TDon(L, 2)
   Label2.Caption = TDon(L, 3)
   End Sub
 

Discussions similaires

Réponses
93
Affichages
2 K

Statistiques des forums

Discussions
312 090
Messages
2 085 210
Membres
102 820
dernier inscrit
SIEG68