IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Recherche verticale multicolonnes


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2005
    Messages : 81
    Par défaut Recherche verticale multicolonnes
    Bonsoir,

    Sous Excel 2003, j'aimerais retrouver dans la feuille "données" tous les numéros de produits et leur prix (2 colonnes seulement) qui se retrouvent dans la feuille "Liste de Prix Pièces".

    Ma difficulté, a part que je ne connais pas beaucoup Excel, est que dans la feuille "Liste de Prix Pièces", les produits se retrouvent dans la colonne A et F et les prix dans la colonne C et H.
    Donc le but est de regrouper tous les Product # et leur prix dans la feuille "données" et en 2 colonnes seulement.


    Autre demande :

    Si mon patron modifie un prix, j'aimerais qu'il y est une notification dans la colonne C de la feuille "Données".

    Si mon patron ajoute un no de produit, il y a t'il une façon que le produit se retrouve dans la feuille "données".

    Je me permets de vous joindre mon fichier Excel.

    Tout ça dépasse mon niveau de compétence en Excel.

    Avec toute mon appréciation...

    Merci

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Ta feuille "Liste de Prix Pièces" n'est pas uniforme et est hétérogène

    manuellement serait plus facile!
    bon, c'est à première vue

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je n'ai pas regardé ton fichier mais RechercheV n'irait pas pour ce que tu as ?
    (Peut également s'utiliser par macro -> VLookup)
    Bonne journée

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2005
    Messages : 81
    Par défaut
    J'ai comme formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RECHERCHEV(A5;'Liste de Prix Pièces'!A$5:H13;8;FAUX)
    ça fonctionne pour certains mais comme certain product se retrouve dans une autre colonne on ne pourrait pas ajouter dans la formule :

    siNA .... et mentionner une autre plage de recherche ?

    Si c'est possible j'aurais besoin de vous pour compléter la formule


    merci

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    J'ai pas le décodeur Rar (et je n'en veux pas)
    Si tu peu joindre un Zip ?
    Mais pour ton problème je verrais mieux une macro VBA et la méthode Find.
    A+

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2005
    Messages : 81
    Par défaut
    Je suis tres green en VBA alors le find ....
    mets je te soumets quand même un fichier test en format zip

    merci

  7. #7
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Dans le code de la feuille 1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Call Données
     
    End Sub
    Et dans un module:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Sub données()
     
    Dim derligA As Integer, derligF As Integer
    Dim Plage As Range, PlageF As Range, c As Range
    Dim derligD As Integer, Ldest As Integer, Cdest As Integer
    Dim Product As String
    Dim Prix As Variant
     
    derligA = Range("A65536").End(xlUp).Row
    Set Plage = Range(Cells(2, 1), Cells(derligA, 1))
    derligF = Range("F65536").End(xlUp).Row
    Set PlageF = Range(Cells(2, 6), Cells(derligF, 6))
    Set Plage = Application.Union(Plage, PlageF)
     
    For Each c In Plage
    i = c.Row
    j = c.Column
     
    If c.Value <> "" And Cells(i, j + 3).Value <> "" Then
     
        Product = c.Value
        Prix = Cells(i, j + 3).Value
        With Worksheets("Données")
     
            derligD = Range("A65536").End(xlUp).Row
            Set PlageD = Range(Cells(1, 1), Cells(derligD, 1))
            Set trouve = PlageD.Find(Product, PlageD.Cells(1), xlValues, xlWhole, xlByColumns, xlNext)
     
            If Not trouve Is Nothing Then
                Ldets = trouve.Row
                Cdest = trouve.Column
                Cells(Ldets, Cdest + 1).Value = Prix
            Else
                Cells(derligD + 1, 1).Value = Product
                Cells(derligD + 1, 2).Value = Prix
            End If
     
        End With
     
    End If
     
    Next c
     
    End Sub
    Chez moi ça marche
    Edit:
    Cette macro fonctionnera même si tu rajoute des infos dans ta feuille de prix si tu respectes ceci:

    Nom du produit colonne A ou F, prix du produit, Colonne C ou H
    Exemple:
    Si il y a quelque chose en A1 et pas en C1, rien ne se passe.
    Si il y a un truc en A1 et en C1, respectivement en F1 et H1, la macro considère que c'est un produit et son prix et va le mettre sur la feuille données. Si le produit figure déja sur la feuille donnée il remplace le prix existant sinon il rajoute une ligne

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Par défaut
    Citation Envoyé par Line Voir le message
    Si c'est possible j'aurais besoin de vous pour compléter la formule
    Essaye ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTNA(RECHERCHEV(A2;'Liste de Prix Pièces'!A:C;3;FAUX));SI(ESTNA(RECHERCHEV(A2;'Liste de Prix Pièces'!F:H;3;FAUX));"Ce produit n'est pas listé";RECHERCHEV(A2;'Liste de Prix Pièces'!F:H;3;FAUX));RECHERCHEV(A2;'Liste de Prix Pièces'!A:C;3;FAUX))
    (vérifie que je n'ai pas fait de bourde en traduisant les fonction vu que mon excel est en anglais)

    en francais ca donnerait "Si tu ne trouve pas dans la premiere rangé de chiffre, alors chercher dans la seconde rangée. Si tu ne trouve pas non plus dans la seconde rangée, indique <Ce produit n'est pas listé>. Si tu as trouvé dans la seconde rangée, met le prix. Si tu as trouvé dans la premiere rangée, met le prix"

  9. #9
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour,
    Si vous permettez,
    Avec la 2ème version de ton fichier (Diffère de ton premier fichier), le code de diude54 marche avec une petite modification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Sub Donnees()
     
    Dim derligA As Integer, derligF As Integer
    Dim Plage As Range, PlageF As Range, c As Range
    Dim derligD As Integer, Ldest As Integer, Cdest As Integer
    Dim Product As String
    Dim Prix As Variant
     
    derligA = Range("A65536").End(xlUp).Row
    Set Plage = Range(Cells(2, 1), Cells(derligA, 1))
    derligF = Range("F65536").End(xlUp).Row
    Set PlageF = Range(Cells(2, 6), Cells(derligF, 6))
    Set Plage = Application.Union(Plage, PlageF)
     
    For Each c In Plage
    i = c.Row
    j = c.Column
     
    If c.Value <> "" And Cells(i, j + 2).Value <> "" Then  'ici j+2 à la place de j+3 (ou c.offset(0,2) sans passer par i et j)
     
        Product = c.Value
        Prix = Cells(i, j + 2).Value   'ici aussi j+2 à la place de j+3
        With Worksheets("Données")   'à Partir d'ici, ajouter des .  aux ranges
     
            derligD = .Range("A65536").End(xlUp).Row
            Set PlageD = .Range(.Cells(1, 1), .Cells(derligD, 1))
            Set trouve = PlageD.Find(Product, PlageD.Cells(1), xlValues, xlWhole, xlByColumns, xlNext)
     
            If Not trouve Is Nothing Then
                Ldets = trouve.Row
                Cdest = trouve.Column
                .Cells(Ldets, Cdest + 1).Value = Prix
            Else
                .Cells(derligD + 1, 1).Value = Product
                .Cells(derligD + 1, 2).Value = Prix
            End If
     
        End With
     
    End If
     
    Next c
     
    End Sub

  10. #10
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Exact, en fait moi j'avais modifié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with worksheets("Données")
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    worksheets("Données").select
    et le
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    worksheets("Feuille de prix").select
    Je sais pas pourquoi j'ai collé ce code la dans mon post c'était une erreur de ma part.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2005
    Messages : 81
    Par défaut
    Merci des solutions.
    J'ai opté pour celle d'Emmanuelle C qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTNA(RECHERCHEV(A2;'Liste de Prix Pièces'!A:C;3;FAUX));SI(ESTNA(RECHERCHEV(A2;'Liste de Prix Pièces'!F:H;3;FAUX));"Ce produit n'est pas listé";RECHERCHEV(A2;'Liste de Prix Pièces'!F:H;3;FAUX));RECHERCHEV(A2;'Liste de Prix Pièces'!A:C;3;FAUX))
    Ca fonctionne mais je dois rajouter une condition dans le cas ou la cellule est a zéro.

    Du genre si le résultat de la cellule de la colonne B (Prix = 0) je dois étendre ma recherche du genre pour trouver le prix dans la colonne H.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SI(B204=0;RECHERCHEV(A204;'Liste de Prix Pièces'!A:H;8;FAUX))
    Ca fonctionne mais lorsque je l'integre a la formule d'Emanuelle ca ne fonctionne pas


    Quelqu'un peut m'inder svp ?

    Encore mille mercis car j'y suis presque

  12. #12
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Essai ma solution qui elle FONCTIONNE avec les modifs de mercatog.
    Si tu ne sais pas comment mettre ça sous vba je te mets le fichier que j'ai, je ne vois pas quoi faire de mieux.
    La seule chose que mon programme ne fais pas c'est supprimer les produits qui ne figurent pas dans la liste de prix et qui sont sur la feuille données.

  13. #13
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Par défaut
    Citation Envoyé par Line Voir le message
    Du genre si le résultat de la cellule de la colonne B (Prix = 0) je dois étendre ma recherche du genre pour trouver le prix dans la colonne H.
    Donc si je comprend bien, l'idée c'est de faire ce que j'ai mis plus haut, sauf si la cellule dans la colonne B = 0, au quel cas on fait fait autre chose a la place?

    Si oui, alors l'idée c'est de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =si(b2=0; alors faire autre chose ; sinon, faire le code que j'ai mis plus haut)
    ce qui donne ce code la au final (j'ai juste copié coller ton code et le mien apres les ";" du SI)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(B2=0;RECHERCHEV(A204;'Liste de Prix Pièces'!A:H;8;FAUX);SI(ESTNA(RECHERCHEV(A2;'Liste de Prix Pièces'!A:C;3;FAUX));SI(ESTNA(RECHERCHEV(A2;'Liste de Prix Pièces'!F:H;3;FAUX));"Ce produit n'est pas listé";RECHERCHEV(A2;'Liste de Prix Pièces'!F:H;3;FAUX));RECHERCHEV(A2;'Liste de Prix Pièces'!A:C;3;FAUX)))

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2005
    Messages : 81
    Par défaut
    En faite lc'est lorsque le resultat de la recherche verticale (ta formule) donne 0 il faut que je dois faire autre chose, soit d'étendre ma recherche sur une autre plage.
    Dois-je utiliser la derniere formule que tu m'as envoyé ?

    merci

  15. #15
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Par défaut
    Ah , et bien alors il faut une autre formule, mais on va la composer avec la meme logique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =si(la formule = 0; alors faire autre chose ; sinon, faire la formule)
    ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(SI(ESTNA(RECHERCHEV(A2;'Liste de Prix Pièces'!A:C;3;FAUX));SI(ESTNA(RECHERCHEV(A2;'Liste de Prix Pièces'!F:H;3;FAUX));"Ce produit n'est pas liste";RECHERCHEV(A2;'Liste de Prix Pièces'!F:H;3;FAUX));RECHERCHEV(A2;'Liste de Prix Pièces'!A:C;3;FAUX))=0;RECHERCHEV(A204;'Liste de Prix Pièces'!A:H;8;FAUX);SI(ESTNA(RECHERCHEV(A2;'Liste de Prix Pièces'!A:C;3;FAUX));SI(ESTNA(RECHERCHEV(A2;'Liste de Prix Pièces'!F:H;3;FAUX));"Ce produit n'est pas liste";RECHERCHEV(A2;'Liste de Prix Pièces'!F:H;3;FAUX));RECHERCHEV(A2;'Liste de Prix Pièces'!A:C;3;FAUX)))

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2005
    Messages : 81
    Par défaut
    Bonjour Emmanuelle et surout merci.

    J'ai copié la formule et j'obtiens une erreur,

    Je te joins une partie mon fichier test. Voir feuille DATA.

    Colonne B.

    P's' J'ai remis la formule originale

    Mille mercis
    Fichiers attachés Fichiers attachés

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2005
    Messages : 81
    Par défaut
    Merci Emmanuelle.
    Tout fonctionne a merveille grace a toi.

    Encore et encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. recherche verticale multicriteres
    Par foulla dans le forum Excel
    Réponses: 3
    Dernier message: 15/07/2011, 15h13
  2. Boucle Macro _ Recherche Verticale
    Par JoleBP dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 29/09/2008, 17h49
  3. recherche verticale plusieurs critères
    Par marco858 dans le forum Excel
    Réponses: 4
    Dernier message: 16/09/2008, 01h32
  4. recherche verticale dynamique
    Par lox dans le forum Excel
    Réponses: 4
    Dernier message: 18/04/2008, 16h54
  5. Recherche verticale sur plusieurs feuilles
    Par topiane dans le forum Excel
    Réponses: 9
    Dernier message: 15/04/2008, 09h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo