XL 2010 réccupérer dernière résultat

yahya belbachir

XLDnaute Occasionnel
Bonjour
je ne sais pas si vous avez une idée comment récupperer la dérniere valeur d'une colonne, par la recherche du code client on l'affichant ce résultat dans le texbox du formulaire.
pour être plus clair
mon fichier çi joint j'ai coloré le résultat que je veux récuppérer par la recherche du code
ex si je tape le code dans la combobox il me donne le résultat que j'ai expliqué.
merci d'avance
 

Pièces jointes

  • Classeur1.xlsm
    17.6 KB · Affichages: 9

yahya belbachir

XLDnaute Occasionnel
par contre je ne sais pas s'il y a quelqu'un qui peut m'aider de me proposer une idée en VBA pour effectuer cet opération dans le formulaire.
on recherchant les code Id dans la combobox puis dans le textbox il me cherche par le code la dérnière valeur dans la ligne.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @yahya belbachir, @JHA ;)

J'ai tout repris.
  • J'ai remis la propriété RowSource à blanc.
  • Dans la procédure UserForm_Initialize(), on remplit la ComboBox1 sans doublon et sans ligne vide.
  • Dans la procédure Sub ComboBox1_Change(), on recherche le dernier impayé.
Le code du module de UserForm1 (il est un peu commenté) :
VB:
Private Sub UserForm_Initialize()
Dim i As Long, t, m As Long, N As Long, doublon As Boolean

   'lecture des valeurs de la colonne B
   With Sheets("Feuil1")
      t = .Range("b2:b" & .Cells(.Rows.Count, "b").End(xlUp).Row).Value
   End With
   ' on groupe en haut du tableau les valeurs non vides
   ' et qui ne sont pas doublons
   For i = 1 To UBound(t)
      If t(i, 1) <> "" Then      'il faut que la valeur ne soit pas vide
         'recherche de la même valeur dans les lignes
         'au dessus de la ligne i qu'on traite
         doublon = False 'indicateur de doublon à FAUX
         For m = 1 To N
            'si c'est un doublon, alors on met doublon à VRAI
            If t(m, 1) = t(i, 1) Then doublon = True: Exit For
         Next m
         'si t(i,1) est rencontré pour la première fois (doublon = False) alors
         'on incrémente le compteur des valeurs sans doublon N
         'et on stocke à la ligne N la nouvelle valeur trouvée en i
         If Not doublon Then N = N + 1: t(N, 1) = t(i, 1)
      End If
   Next i
   'on remplit la combobox1 avec les N valeurs sans doublons stockées en haut de t
   For i = 1 To N: ComboBox1.AddItem t(i, 1): Next i
End Sub

Private Sub ComboBox1_Change()
Dim t, v, i As Long

   TextBox2 = ""     'RAZ de combobox1
   'lecture dec colonnes "Id-client" et "Reste Impayé"
   With Sheets("Feuil1")
      t = .Range("b2:b" & .Cells(.Rows.Count, "b").End(xlUp).Row).Value
      v = .Range("k2").Resize(UBound(t)).Value
   End With
   If ComboBox1.ListIndex > -1 Then
      'si la combobox affiche un de ses élément alors on boucle sur la tableau t
      'à partir de la fin du tableau à la recherche de l'identité affichée par la combobox1
      For i = UBound(t) To 1 Step -1
         'quand on trouve cette identité, on renvoie la valeur de l'impayé de la même ligne
         If CStr(t(i, 1)) = CStr(ComboBox1.Value) Then TextBox2 = v(i, 1): Exit For
      Next i
   End If
End Sub
 

Pièces jointes

  • yahya belbachir- combobox et recherche- v1.xlsm
    27.2 KB · Affichages: 5
Dernière édition:

yahya belbachir

XLDnaute Occasionnel
Bonjour @yahya belbachir, @JHA ;)

J'ai tout repris.
  • J'ai remis la propriété RowSource à blanc.
  • Dans la procédure UserForm_Initialize(), on remplit la ComboBox1 sans doublon et sans ligne vide.
  • Dans la procédure Sub ComboBox1_Change(), on recherche le dernier impayé.
Le code du module de UserForm1 (il est un peu commenté) :
VB:
Private Sub UserForm_Initialize()
Dim i As Long, t, m As Long, N As Long, doublon As Boolean

   'lecture des valeurs de la colonne B
   With Sheets("Feuil1")
      t = .Range("b2:b" & .Cells(.Rows.Count, "b").End(xlUp).Row).Value
   End With
   ' on groupe en haut du tableau les valeurs non vides
   ' et qui ne sont pas doublons
   For i = 1 To UBound(t)
      If t(i, 1) <> "" Then      'il faut que la valeur ne soit pas vide
         'recherche de la même valeur dans les lignes
         'au dessus de la ligne i qu'on traite
         doublon = False 'indicateur de doublon à FAUX
         For m = 1 To N
            'si c'est un doublon, alors on met doublon à VRAI
            If t(m, 1) = t(i, 1) Then doublon = True: Exit For
         Next m
         'si t(i,1) est rencontré pour la première fois (doublon = False) alors
         'on incrémente le compteur des valeurs sans doublon N
         'et on stocke à la ligne N la nouvelle valeur trouvée en i
         If Not doublon Then N = N + 1: t(N, 1) = t(i, 1)
      End If
   Next i
   'on remplit la combobox1 avec les N valeurs sans doublons stockées en haut de t
   For i = 1 To N: ComboBox1.AddItem t(i, 1): Next i
End Sub

Private Sub ComboBox1_Change()
Dim t, v, i As Long

   TextBox2 = ""     'RAZ de combobox1
   'lecture dec colonnes "Id-client" et "Reste Impayé"
   With Sheets("Feuil1")
      t = .Range("b2:b" & .Cells(.Rows.Count, "b").End(xlUp).Row).Value
      v = .Range("k2").Resize(UBound(t)).Value
   End With
   If ComboBox1.ListIndex > -1 Then
      'si la combobox affiche un de ses élément alors on boucle sur la tableau t
      'à partir de la fin du tableau à la recherche de l'identité affichée par la combobox1
      For i = UBound(t) To 1 Step -1
         'quand on trouve cette identité, on renvoie la valeur de l'impayé de la même ligne
         If CStr(t(i, 1)) = CStr(ComboBox1.Value) Then TextBox2 = v(i, 1): Exit For
      Next i
   End If
End Sub
c'est super bien un châpaux
je vous remercie infiniment "mapomme"
 

yahya belbachir

XLDnaute Occasionnel
Bonjour @yahya belbachir, @JHA ;)

J'ai tout repris.
  • J'ai remis la propriété RowSource à blanc.
  • Dans la procédure UserForm_Initialize(), on remplit la ComboBox1 sans doublon et sans ligne vide.
  • Dans la procédure Sub ComboBox1_Change(), on recherche le dernier impayé.
Le code du module de UserForm1 (il est un peu commenté) :
VB:
Private Sub UserForm_Initialize()
Dim i As Long, t, m As Long, N As Long, doublon As Boolean

   'lecture des valeurs de la colonne B
   With Sheets("Feuil1")
      t = .Range("b2:b" & .Cells(.Rows.Count, "b").End(xlUp).Row).Value
   End With
   ' on groupe en haut du tableau les valeurs non vides
   ' et qui ne sont pas doublons
   For i = 1 To UBound(t)
      If t(i, 1) <> "" Then      'il faut que la valeur ne soit pas vide
         'recherche de la même valeur dans les lignes
         'au dessus de la ligne i qu'on traite
         doublon = False 'indicateur de doublon à FAUX
         For m = 1 To N
            'si c'est un doublon, alors on met doublon à VRAI
            If t(m, 1) = t(i, 1) Then doublon = True: Exit For
         Next m
         'si t(i,1) est rencontré pour la première fois (doublon = False) alors
         'on incrémente le compteur des valeurs sans doublon N
         'et on stocke à la ligne N la nouvelle valeur trouvée en i
         If Not doublon Then N = N + 1: t(N, 1) = t(i, 1)
      End If
   Next i
   'on remplit la combobox1 avec les N valeurs sans doublons stockées en haut de t
   For i = 1 To N: ComboBox1.AddItem t(i, 1): Next i
End Sub

Private Sub ComboBox1_Change()
Dim t, v, i As Long

   TextBox2 = ""     'RAZ de combobox1
   'lecture dec colonnes "Id-client" et "Reste Impayé"
   With Sheets("Feuil1")
      t = .Range("b2:b" & .Cells(.Rows.Count, "b").End(xlUp).Row).Value
      v = .Range("k2").Resize(UBound(t)).Value
   End With
   If ComboBox1.ListIndex > -1 Then
      'si la combobox affiche un de ses élément alors on boucle sur la tableau t
      'à partir de la fin du tableau à la recherche de l'identité affichée par la combobox1
      For i = UBound(t) To 1 Step -1
         'quand on trouve cette identité, on renvoie la valeur de l'impayé de la même ligne
         If CStr(t(i, 1)) = CStr(ComboBox1.Value) Then TextBox2 = v(i, 1): Exit For
      Next i
   End If
End Sub
Bonjour Cher Ami
veuillez m'excuser juste une question concernant cette solution,
pour être plus clair
ce code fonctionne très bien,sauf par exemple en débute par la première ligne
il y a seulement une ligne qui est rempli dans le tableau
alors la recherche ne donne pas de résultat
sauf si on remplit la deuxième et la troisième etc...
il y a une solution?
dans mon fichier je n'ai rien touché sauf j'ai supprimé quelque données pour vous expliquer.
merci
 

Pièces jointes

  • yahya belbachir- combobox et recherche- v1.xlsm
    28.8 KB · Affichages: 2

Discussions similaires

Réponses
24
Affichages
430
Réponses
12
Affichages
531

Statistiques des forums

Discussions
312 322
Messages
2 087 270
Membres
103 503
dernier inscrit
maison