explication vba SVP

marleauc

XLDnaute Occasionnel
Bonjour ,

j'ai récupéré un code sur le forum, et j'aimerais bien le comprendre complètement.

le voici;
Private Sub CommandButton1_Click()

ListView3.ListItems.Clear
If TextBox1 = "" Then Exit Sub
With Sheets("Base")
i = 1
Do
Set c = .Range(.Cells(i, 1), .Cells(i, 10)).Find(TextBox1, LookIn:=xlValues)
If Not c Is Nothing Then
flag = True
IniListview c.Row
End If
i = i + 1
Loop While .Cells(i, 1) <> ""
End With
If Not flag Then MsgBox "Rien trouvé !"
txtTotal = ListView3.ListItems.Count
flag = False

End Sub

bon avec ce code j'aimerais pouvoir effectuer une recherche par mot dans la listeview3. mais la variable (i) représente quoi? car j'éprouve un problème avec ce i.

excusez-moi pour la question qui peut sembler bizarre mais je veux enfin comprendre.

merci encore de votre dévouement
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : explication vba SVP

Bonjour Marleauc, bonjour le forum,

Code:
Private Sub CommandButton1_Click() 'au clic sur le bouton "CommandButton1"
ListView3.ListItems.Clear 'vide la ListView3
If TextBox1 = "" Then Exit Sub 'si la TextBox1 est vide alors sort de la procédure
With Sheets("Base") 'prend en compte l'onglet "Base"
    i = 1 'initialise la variable i à 1
    Do 'exécute
    'définit la cellule c (recherche dans la plage A1:Ji la valeur inscrite dans la Textbox1)
    Set c = .Range(.Cells(i, 1), .Cells(i, 10)).Find(TextBox1, LookIn:=xlValues)
    If Not c Is Nothing Then 'condition : s'il existe au moins une occurrence de la valeur cherchée
        flag = True 'définit la variable booléenne flag comme "vrai"
        IniListview c.Row 'je suis pas sûr mais je pense que ça ajoute la ligne de la cellule c dans la Listview
    End If 'fin de la condition
    i = i + 1 'incrément i de 1
    Loop While .Cells(i, 1) <> "" 'boucle l'exécution tat que la cellule Ai est différente du vide
End With 'fin de la prise en compte de l'onglet "Base"
If Not flag Then MsgBox "Rien trouvé !" 'si la variable flg est "faux" alors message "Rien trouvé !"
txtTotal = ListView3.ListItems.Count 'définit la variable txtTotal (nombre d'éléments dans la ListView3)
flag = False 'reinitialise la variable à "faux"
End Sub

J'aurais juste déclaré mes variables en début de code avec:
Code:
Dim c As Range
Dim flag As Boolean
Dim txtTotal As Integer
Dim i As Integer

[Édition]

Bonjour Namzip on s'est croisé
 
Dernière édition:

marleauc

XLDnaute Occasionnel
Re : explication vba SVP

un gros merci robert et Namzip,

mais malheureusement j'éprouve encore un problème au niveau du code.
je joins le fichier en pièce-jointe

Cijoint.fr - Service gratuit de dépôt de fichiers
 

Pièces jointes

  • cij67uNqn3.zip
    8.5 KB · Affichages: 36

kjin

XLDnaute Barbatruc
Re : explication vba SVP

Soirbon, sieur Robert :),
S'rait pas un peu bizarre ce code ?!

Edit : je vois que j'étais un peu dans le vrai vu ton dernier message
Re-Edit : le fichier est corrompu !
A+
kjin
 
Dernière édition:

kjin

XLDnaute Barbatruc
Re : explication vba SVP

Bonsoir,
Code:
Private Sub CommandButton1_Click()
Dim rngR As Range, c As Range, Adresse As String
Dim txtTotal As Integer
If TextBox1 = "" Then Exit Sub
ListView3.ListItems.Clear

Set rngR = Sheets("Base").Range("A2:L" & Range("A65000").End(xlUp).Row)
Set c = rngR.Find(TextBox1, lookat:=xlPart)
If Not c Is Nothing Then
    Adresse = c.Address
    Do
        With ListView3
            .ListItems.Add , , Sheets("Base").Cells(c.Row, 1).Value
            .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("Base").Cells(c.Row, 2)
            .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("Base").Cells(c.Row, 3)
            .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("Base").Cells(c.Row, 7)
            .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("Base").Cells(c.Row, 8)
        End With
        Set c = rngR.FindNext(c)
    Loop While Not c Is Nothing And c.Address <> Adresse
End If
txtTotal = ListView3.ListItems.Count
If txtTotal = 0 Then MsgBox "Rien trouvé !"

End Sub
Ici la plage de recherche rngR englobe les colonnes A à L d'où des doublons éventuels, donc à toi de voir...
La recherche s'effectue sur une partie du texte, sinon remplacer xlPart par xlWhole
A+
kjin
 

marleauc

XLDnaute Occasionnel
Re : explication vba SVP

ok merci, cela fonctionne en parti... J'ai effectivement la sélection via le texbox1 , qui s'inscrit dans le listview3. mais lorsque je click dans le listview3 sur le choix, ben le résultat inscrit dans les autres textbox, ne correspondent pas au click.

Bizarre, c'est comme si le listview3 initiale (affichage) des l'ouverture de USF demeurait actif.

assez difficile a expliquer

voir le fichier. inscrivez un chois de mot dans la textbox et ensuite click dans le listview et regarder... merci de m'orienter

bonne fin se soirée

Cijoint.fr - Service gratuit de dépôt de fichiers
 

TheProdigy

XLDnaute Impliqué
Re : explication vba SVP

Bonjour Marleauc, bonjour le forum,

Code:
Private Sub CommandButton1_Click() 'au clic sur le bouton "CommandButton1"
ListView3.ListItems.Clear 'vide la ListView3
If TextBox1 = "" Then Exit Sub 'si la TextBox1 est vide alors sort de la procédure
With Sheets("Base") 'prend en compte l'onglet "Base"
    i = 1 'initialise la variable i à 1
    Do 'exécute
    'définit la cellule c (recherche dans la plage A1:Ji la valeur inscrite dans la Textbox1)
    Set c = .Range(.Cells(i, 1), .Cells(i, 10)).Find(TextBox1, LookIn:=xlValues)
    If Not c Is Nothing Then 'condition : s'il existe au moins une occurrence de la valeur cherchée
        flag = True 'définit la variable booléenne flag comme "vrai"
        IniListview c.Row 'je suis pas sûr mais je pense que ça ajoute la ligne de la cellule c dans la Listview
    End If 'fin de la condition
    i = i + 1 'incrément i de 1
    Loop While .Cells(i, 1) <> "" 'boucle l'exécution tat que la cellule Ai est différente du vide
End With 'fin de la prise en compte de l'onglet "Base"
If Not flag Then MsgBox "Rien trouvé !" 'si la variable flg est "faux" alors message "Rien trouvé !"
txtTotal = ListView3.ListItems.Count 'définit la variable txtTotal (nombre d'éléments dans la ListView3)
flag = False 'reinitialise la variable à "faux"
End Sub

J'aurais juste déclaré mes variables en début de code avec:
Code:
Dim c As Range
Dim flag As Boolean
Dim txtTotal As Integer
Dim i As Integer

[Édition]

Bonjour Namzip on s'est croisé

J'apprécie bien l'explication de Robert. Tu feras un bon prof si tu ne l'es pas déjà ;)

Amicalement.
 

Discussions similaires

Réponses
11
Affichages
404

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 845
Messages
2 092 770
Membres
105 529
dernier inscrit
StarExcel