Code vba : recherche en H et V en même temps

Résolu
Tshims -  
 Tshims -
Bonjour à tous ,

Je souhaiterai chercher les villes dè mon fichier "Patri" à mon fichier "Principal". Ensuite chercher les articles qui se trouve dans le Patri pour récuperer les contenus et le placer dans la colonne D (nommé Information) de mon fichier "Principal ". La difficulté est que dans mon fichier "Principal", les villes sont placés en une seule colonne et plusieurs lignes tandisque le fichier "Patri" en une ligne et plusieurs colonnes.

Voir mes deux fichiers : "Principal": http://www.cjoint.com/c/FBlkWCrkQxl
"Patri" : http://www.cjoint.com/c/FBlkXCvjqYl



Bien Cordialement et Merci d'avancé.

8 réponses

  1. Pierre1310 Messages postés 8854 Statut Membre 652
     
    Bonjour,

    Pourquoi n'utilises-tu pas 2 feuilles dans un fichier plutôt que 2 fichiers d'une feuille?
    0
    1. Tshims
       
      Ré Pierre1310,

      Parce que j'aurais toujours appelé à travailler avec un fichier en entrée et l'autre en sortie. Mais si tu as une solution avec 2 fichiers dans une même feuille. Je pourrai l'adapter à mon problème.

      Bien Cdlt.
      0
    2. Pierre1310 Messages postés 8854 Statut Membre 652
       
      Si tu prends toutes les données dans le 1er fichier et que tu les colles dans la feuille n°2 du fichier N°1 ce sera plus simple pour un traitement.
      0
    3. Tshims > Pierre1310 Messages postés 8854 Statut Membre
       
      J'aimerai bien mais je souhaite l'automatser parce que j'aurai à faire à un fichier avec plusieurs lignes. Donc le code sera mieux.
      0
    4. Pierre1310 Messages postés 8854 Statut Membre 652
       
      Tu peux toujours automatisé dans le même ficher je ne vois pas ce que ça dérange.
      Si tu utilise une macro, elle mettra plus de temps à switch de fichier donc une perte de temps que tu n'aura pas si tu travaille dans le même fichier.
      0
    5. Tshims
       
      C'est ce que je t'ai répondu précemment c'est ce macro que je cherche. Si aujourd'hui j'ai un code, je veux me débrouiller.
      Dans le temps, j'aurai à faire tout le temps aux deux fichiers et les données changeront tout le temps. Le macro de faire appel à un fichier , je l'ai déjà.
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    Les 2 classeurs sont ils dans le m^mr dossier?

    Si "non"
    me donner le dossier par ex "C:\fff\bbbb\"
    0
    1. Tshims
       
      Ré Michel_m,

      Non, ce n'est pas dans le même fichier. Je te joins tous les deux fichiers ci-dessus:

      Pour le fichier Patri d'entré : C:\Users\C07076\Documents\Patri.xlsx ou version CJOINT : http://www.cjoint.com/c/FBlkXCvjqYl

      Et Fichier de sorti, "Principal": http://www.cjoint.com/c/FBlkWCrkQxl ou C:\Users\C07076\Documents\Principal.xlsx

      Merci d'avancé et Bien Cdlt.
      0
      1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > Tshims
         
        Ok
        encore 1 question
        combien de lignes dans "principal" ?
        0
      2. Tshims > michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Dans mon fichier princinpal, il y a 24 lignes (dans mon fichier que je suis appelle à travailler quotidiennement j'en ai plus de 5000). Mais pour 'instant, on part d'abord avec 24 lignes.
        0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour à tous les deux

    Tu n'as pas forcément besoin d'une macro
    Les deux fichiers étant ouverts dans la même session d'excel
    En D3 du fichier Principal
    =SI(ESTNA(INDEX([Patri.xls]Feuil1!$C$4:$G$14;EQUIV($B3;[Patri.xls]Feuil1!$B:$B;0)-3;EQUIV($A3;[Patri.xls]Feuil1!$2:$2;0)-2));"";INDEX([Patri.xls]Feuil1!$C$4:$G$14;EQUIV($B3;[Patri.xls]Feuil1!$B:$B;0)-3;EQUIV($A3;[Patri.xls]Feuil1!$2:$2;0)-2))
    devrait aller (il te suffira de changer l'extension .xls (mon vieil excel 2003) par .xlsx

    Cdlmnt
    0
    1. Tshims
       
      Ré ccm81,

      Merci beaucoup la formule fonctionne à merveiller.

      Cordialement.
      0
      1. Tshims > Tshims
         
        Bonjour ccm81,

        J'ai un soucis avec ta formule quand j'essaie d'adapter à mon fichier original. Je souhaiterai comprendre la signification de "-3" et "-2" dans la fromule EQUIV($B3;[Patri.xls]Feuil1!$B:$B;0)-3

        Cdlt.
        0
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bon, on m'a demandé du VBA, vla du VBA sans philosopher dans le salon de thé

    Option Explicit
    '--------------------------
    Sub informer()
    Dim Chemin As String, Fich As String
    Dim Derlig As Byte, Lig As Byte, Ville As String, Article As String

    Application.ScreenUpdating = False
    Chemin = ThisWorkbook.Path
    Workbooks.Open (Chemin & "\patri.xlsx")

    With ThisWorkbook.Sheets(1)
    Derlig = .Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
    For Lig = 3 To Derlig
    Ville = .Cells(Lig, "A")
    Article = .Cells(Lig, "B")
    .Cells(Lig, "D") = ChercherHV(Ville, Article)
    Next
    .Activate
    End With
    Workbooks("patri.xlsx").Close
    End Sub
    '------------
    Function ChercherHV(Cite, Arti) As String
    Dim Col As Byte, Lig As Byte
    With ActiveWorkbook.Sheets(1)
    On Error GoTo inconnu
    Col = .Rows(2).Find(Cite, .Range("B2"), xlValues).Column
    Lig = .Columns("B").Find(Arti, .Range("B3"), xlValues).Row
    ChercherHV = .Cells(Lig, Col).Value
    End With
    Exit Function
    inconnu:
    ChercherHV = "Article ou Ville inconnu""
    End Function


    Un seuk artickle(ville Oui et beaucoup d'article inconnus dans patri pour les quels j'ai écrit " article ou ville inconnu"
     Michel
    0
    1. Tshims
       
      Merci beaucoup Michel_m, effectivement tu as raison qu'il y a beaucoup des articles inconnues. C'est fait exprès.

      Je peux définir le fichier Partie : par l'extention de la propriété du fichier : nomsource="Patri.xlsx"

      Une fois de plus Un grand merci.


      Cordialement.
      0
      1. Tshims > Tshims
         
        Bonsoir Michel_m,

        Désolé, je viens une fois encore te dérange car ton code ci-dessus ne fonctionne pas dans mon fichier original. Peux-tu le commenter stp? et je change pour simplier, je crée une feuille dans mon fichier de travailler "Principal" dans lequel je fais appeler dans toutes les données de Patri. Donc je travaille sur un mem fichier mais de feuilles différentes?

        Merci d'avancé et Bon Weenkend.
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ccm81 Messages postés 11033 Statut Membre 2 434
     
    1. INDEX([Patri.xls]Feuil1!$C$4:$G$14, ....
    va rechercher une cellule dans le tableau C4:G14 (de Patri) dont
    2. le n° de ligne est donné par
    EQUIV($B3;[Patri.xls]Feuil1!$B:$B;0)-3
    Or EQUIV($B3;[Patri.xls]Feuil1!$B:$B;0)- renvoie le n° de ligne dans la colonne B où se trouve $B3 (l'article du Principal) ; comme le tableau dans Patri commence à la ligne 4, il faut enlever 3 pour obtenir la bonne ligne dans le tableau de Patri
    2. le numéro de colonne est donné par
    EQUIV($A3;[Patri.xls]Feuil1!$2:$2;0)-2
    même chose : le tableau dans Partri commence à la colonne 3 , donc il faut enlever 2

    RQ. tu devrais jeter une oeil sur l'aide en ce qui concerne les fonctions INDEX et EQUIV

    Salutations à michel en passant, qui ne devrait pas tarder à t'envoyer la rectification de la macro

    Cdlmnt
    0
    1. Tshims
       
      Ré CCM81;

      Je regarde les fonctions INDEX et EQUIV même je change ESTNA à ESTERREUR pour ne pas obtenir #NA.

      j'essaie d'adapter mais ça ne me renvoie rien :

      Voici mes données actuelles :

      Fichier Principal : Ville => A3 : A 2800 et Article => N3 : N2800
      Fichier Patri : Ville => E2 : Z2 et Article => D3 : D200 et mes réponses ("ce que je souhaite récuperer) => E3 : Z200.

      Comment calculer deviendra tes -3 et -2 car là ils sont au même niveau.

      Je crois que tu vas me comprendre; Désole pour le dérange encore.

      Cdlmnt.
      0
  7. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour, CCM, ca va ?

    Bon, on va rester sur ta solution par formule qui parait + adaptée. ;o)
    0
  8. ccm81 Messages postés 11033 Statut Membre 2 434
     
    > michel. merci, tout va ... pour le moment du moins et j'espère qu'il en est de même pour toi
    Je ne vais pas avoir beaucoup de temps ces jours ci (encore de la programmation, mais des activités de mes petits enfants, et c'est au moins aussi compliqué que vba !), donc si tu veux bien prendre le relai sur ce coup là..... En plus, tu pourras lui fournir la solution avec SIERREUR, plus concise, que mon toujours vieil excel 2003 ne connaît pas

    > Tschims.
    1. post #16.Donc je travaille sur un mem fichier mais de feuilles différentes?
    post #20 Fichier Principal : Ville => A3 : A 2800 et Article => N3 : N2800
    2. Fichier Patri : Ville => E2 : Z2 et Article => D3 : D200 et mes réponses ("ce que je souhaite récuperer) => E3 : Z200.
    Il va falloir choisir !
    3. Tu devrais envoyer un bour de ton (tes) vrai(s) fichier(s), ça faciliterait bien les choses

    Cdlmnt
    0
    1. Tshims
       
      Bonjour CCM,

      Voici mon bout de fichier : http://www.cjoint.com/c/FBqpJFvWTbj

      Je souhaite remplir la colonne D de la feuille "Principal" à partir de données de la feuille Patri.
      En cherchant la ville et les articles pour

      le fichier Principal : Colonne A => Villes et colonne L => Articles
      le fichier Patri : C2:G2 => Villes et B':B14 => Articles

      MErci d'avancé et Cdlmnt.
      0
  9. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Il suffit de repmlacer la référence au fichier patri par la référence à la feuille Patri et de modifier la colonne article de la feuille Principal
    Ce qui donne en D3
    =SI(ESTNA(INDEX(Patri!$C$4:$G$14;EQUIV(Principal!$L3;Patri!B:B;0)-3;EQUIV(Principal!$A3;Patri!$2:$2;0)-2));"";INDEX(Patri!$C$4:$G$14;EQUIV(Principal!$L3;Patri!B:B;0)-3;EQUIV(Principal!$A3;Patri!$2:$2;0)-2))

    avec sierreur, ça devrait ressemble à ça (sans garantie)
    =SIERREUR(INDEX(Patri!$C$4:$G$14;EQUIV(Principal!$L12;Patri!B:B;0)-3;EQUIV(Principal!$A12;Patri!$2:$2;0)-2));"")

    Cdlmnt
    0
    1. Tshims
       
      Bonjour CCM,

      Je reviens encore vers toi, je sais que j'en fais un peu trop mais j'aimerai finir avec ce fichier et bien le comprendre pour m'en sortir tout seul. J'ai compris pour quoi je n'obtiens pas mes réponses.
      Voici mon fichier cJoint : http://www.cjoint.com/c/FBriKnCyYQl

      Je modifie un peu la feuille Patri au niveau de colonnes et de lignes;
      le fichier Principal : Colonne A => Villes et colonne L => Articles
      le fichier Patri : E2:I2 => Villes et D:D17 => Articles

      Dans ma feuille Patri, j'ai de doublons donc je souhaiterai récupere que les cellules ayant les "Oui" ou "Non" pas de cellules vides.

      Exemple le cas de bonbon dans la ligne D3 et D4 de la feuille Patri. Je souhaiterai récuperer que les D3 car j'ai de cellules avec les "Oui" et "Non".

      Merci d'avancé et désolé une fois pour le dérangement.

      Cdlmnt.
      0