Un programme de recherche sur un fichier et puis un fichier de lien

Bonjour ,

Merci pour votre lecture, en effet, je suis entrain de faire un petit programme de test ou vérification si ce client est déjà demandé ce code d'article avec le VBA mais je suis bloqué .

Mon programme comme de suite :

J'ai un fichier excel qui contient des clients ( avec ses nom et ses numéro ) plus une cellule de lien de chaque client qui va m'afficher une autre feuille qui contient aussi tous les articles déjà commandés par ce client:

du coup, ce que je veux, c'est de faire un programme rapide pour gagner de temps de recherche ;

1) il va demander au utilisateur au début de choisir quel est le caractère de recherche (soit le nom du client soit son numéro), et il va le rechercher sur la 1ere feuille, il va continu s'il va le trouver sinon il va afficher ce client n'existe pas.

2)et puis, il va demander au client d'entrer le code d'article, et va y aller à la cellule de lien correspond à ce client pour rechercher dans cette feuille le code d'article entré par l'utilisateur qui se trouve au même fichier. et il va vérifier si ce code est existe sur cette nouvelle feuille, et afficher le résultat de recherche.

pouvez vous me aider SVP.

capture 11

Bonjour,

Les images c'est bien joli mas ça n'aide pas vraiment, un fichier aurait mieux convenu !

Donc, je n'ai fais que des suppositions, 2 boutons d'options, une zone de texte et un bouton de commande :

Private Sub CommandButton1_Click()

    Dim Fe As Worksheet
    Dim Plage As Range
    Dim Cel As Range
    Dim Code As String

    'le premier bouton représente les codes clients, si il est choisi, la plage est définie sur la colonne B à partir de B2
    If OptionButton1.Value Then
        With ActiveSheet: Set Plage = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With
    Else
        With ActiveSheet: Set Plage = .Range(.Cells(2, 3), .Cells(.Rows.Count, 3).End(xlUp)): End With
    End If

    'effectue la recherche
    Set Cel = Plage.Find(TextBox1.Text, , xlValues, xlWhole)

    'si trouvé...
    If Not Cel Is Nothing Then

        'extrait le nom de la feuille de l'adresse du lien
        Set Fe = Worksheets(Split(Cel.Offset(, IIf(OptionButton1.Value, 2, 1)).Hyperlinks(1).SubAddress, "!")(0))

        'défini la plage sur la colonne A à partir de A2
        With Fe: Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

        'demande du code, si rien inscrit, fin
        Code = InputBox("Indiquez le code article désiré !")
        If Code = "" Then Exit Sub

        'effectue la recherche
        Set Cel = Plage.Find(Code, , xlValues, xlWhole)

        'si trouvé...
        If Not Cel Is Nothing Then

            'affiche la valeur située à droite de la cellule (colonne B)
            MsgBox Cel.Offset(, 1).Value

        Else

            MsgBox "Code article non trouvé !"

        End If

    Else

        MsgBox "Valeur non trouvée !"

    End If

End Sub

salut , Theze merci pour votre réponse

Malheureusement le fichier trop volumineux , si vous avez un email je vais l'envoyer à vous.

Merci

Tu fais une copie de ton fichier, tu supprimes une grande partie des données (un vingtaine de clients avec une vingtaine de références produits devraient suffirent), tu anonymises les données restantes si nécessaire et tu postes le fichier car il se peut que d'autres intervenants aient de meilleures idées que moi !

D'accord, il est en joint

Merci beaucoup

Ton fichier en retour pour tests :

salut saluttt waw superrrr

vous être vraiment fort(e)

Merci Merci Merciiiiii

Je ne sais pas si je suis fort mais certainement pas.forte, je m'appelle Hervé !

Je suis content de t'avoir aidé

d'accord je suis désolé et merci encore une fois

Bonjour Theze,

j'ai une petite question concernant ce programme, est ce que on peut faire une liste de recherche pour les articles, parce que, parfois on a plus de 6 articles, et pour gagner le temps de recherche j'ai pensé de faire un liste.

Merci d'avance.

bonne journée .

Bonjour,

De ce que j'ai compris de ta demande, tu veux rechercher un client (par nom ou code) et plusieurs références d'article pour ce client !

Donc, pour faire ceci, dans le TextBox6 concernant les références articles il faut les rentrer en les séparant par une virgule comme ceci par exemple :

31791208,35120M32-67,3511X1-23

ou même :

31791208, 35120M32-67, 3511X1-23

ou encore :

31791208 , 35120M32-67 , 3511X1-23

Le résultat est affiché dans une ListView !

Voici le classeur :

bonsoir,

il marche plus, il m'affiche ce message

capture11

Bonjour,

Fais un clic droit sur la boîte d'outils dans un endroit vide puis "Contrôles supplémentaires..." et cherche dans la liste "Microsoft ListView Control version x.x et coche la case

Cc

c'est bon merciiii , en effet est que c'est possible d'afficher les articles non commandés (C-à-d non trouvé parmi les articles) ?

A quoi tu reconnais qu'un article n'est pas commandé ?

pour savoir les articles jamais commandés, et on va contacter le client et confirmer ce code d'article avant de livrer la commande chez le client.

par exemple :

Dans la ListView 1 : Voilà les articles déjà commandés

Dans une autre ListView : voilà les articles jamais commandés

Parce que parfois on a une commande avec plusieurs code articles, et ça va prendre plus de temps de recherche

Merci beaucoup en avance et je suis vraiment désolé à chaque fois

salut salut , il y a des nouvelles ??

Bonjour,

Je ne comprend toujours pas comment tu fais la différence entre les articles commandés et ceux que le client n'a jamais commandé !

Exemple, si je prend le client ATEC dont la feuille "Feuil3" lui est rattachée, toute la liste contient des valeurs positives dans la colonne Quantité donc j'en déduis que tous ces articles ont déjà étés commandés !

salut,

bon par exemple je fais un recherche avec le client ATEC, je mis les codes d'articles à rechercher, si je trouve ces codes parmi les code d'articles sur la feuille rattacher à ce client ( c'est la feuille de tous les articles commandés par ce client) c-à-d ce client a déjà commandé ces code, si je ne trouve pas ces code dans cette feuille rattaché a ce client, donc il n'a jamais les commandés.

c'est bien là ?

Bonjour,

OK, donc, dans la ListView1 les articles correspondants aux références qu'il a déjà commandé mais dans la ListView2 elle est où la liste des articles qu'il n'a jamais commandé mais qu'il souhaite avoir dès à présent ? Cette liste est sur une autre feuille servant de base de données ou alors tu veux simplement voir apparaître les références manquantes car si c'est le cas, une ListView n'a pas lieu d'être, une simple ListBox suffit ou alors, mettre simplement en évidence les références manquantes dans la ListView1 par un formatage (gras, couleur, etc...). Le code du bouton de recherche avec mise en évidence des références manquantes dans la ListView1 qui vient en remplacement de l'existant :

Private Sub CommandButton1_Click()

    Dim Fe As Worksheet
    Dim Plage As Range
    Dim Cel As Range
    Dim Tbl
    Dim Code As String
    Dim I As Integer
    Dim J As Integer

    If TextBox1.Text = "" Then Exit Sub
    If TextBox6.Text = "" Then Exit Sub

    'le premier bouton représente les codes clients, si il est choisi, la plage est définie sur la colonne B à partir de B2
    If OptNum.Value Then
        With Worksheets("Sheet1"): Set Plage = .Range(.Cells(6, 5), .Cells(.Rows.Count, 5).End(xlUp)): End With
    Else
        With Worksheets("Sheet1"): Set Plage = .Range(.Cells(6, 6), .Cells(.Rows.Count, 6).End(xlUp)): End With
    End If

    'effectue la recherche du client
    Set Cel = Plage.Find(TextBox1.Text, , xlValues, xlWhole)

    If Cel Is Nothing Then MsgBox "Client non trouvé !": Exit Sub

    'extrait le nom de la feuille de l'adresse du lien
    Set Fe = Worksheets(Split(Cel.Offset(, IIf(OptNum.Value, 2, 1)).Hyperlinks(1).SubAddress, "!")(0))

    'défini la plage sur la colonne A à partir de A2
    With Fe: Set Plage = .Range(.Cells(7, 5), .Cells(.Rows.Count, 5).End(xlUp)): End With

    Tbl = Split(TextBox6.Text, ",")

    For I = 0 To UBound(Tbl)

        'effectue la recherche
        Set Cel = Plage.Find(Trim(Tbl(I)), , xlValues, xlWhole)

        With ListView1

            'si trouvé...
            If Not Cel Is Nothing Then

                With .ListItems: .Add , , Trim(Tbl(I)): End With

                J = J + 1

                'Remplissage des colonnes
                .ListItems(J).ListSubItems.Add , , Cel.Offset(, 1).Value
                .ListItems(J).ListSubItems.Add , , Cel.Offset(, 2).Value
                .ListItems(J).ListSubItems.Add , , Cel.Offset(, 3).Value
                .ListItems(J).ListSubItems.Add , , Cel.Offset(, 5).Value

            'si les références sont manquantes, les inscrit en gras et rouge
            Else

                With .ListItems: .Add , , Trim(Tbl(I)): End With

                J = J + 1
                .ListItems(J).Bold = True
                .ListItems(J).ForeColor = &HFF&

            End If

        End With

    Next I

End Sub
Rechercher des sujets similaires à "programme recherche fichier puis lien"