Excel 2007 VBA: RechercheV

Résolu
Eaheru Messages postés 205 Statut Membre -  
Eaheru Messages postés 205 Statut Membre -
Bonjour,

La fonction "rechercheV" me pose soucis ...
Voici ce que je souhaiterais faire :

Ouvrir le fichier test2
Ouvrir le fichier test1

- lire la valeur de la colonne "BK" (qui ne peut pas etre triée) pour la ligne 2 dans le fichier (test1)
- activer le fichier test2
- regarder dans la colonne "N" si cette valeur est présente
- si la valeur est présente, lire la valeur de la colonne "L" de la ligne concernée (dans le fichier test2) et l'écrire dans la colonne "BN" de la ligne concernée (pas triée non plus), lue en début de boucle (dans le fichier test1)
- passer à la ligne suivante jusqu'au la dernière ligne.

Voila... si quelqu'un sait coder cette fonction se serait super.
Merci d'avance pour votre aide !!

6 réponses

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Un petit exemple à adapter:

    Private Const fich2 = "D:\CCM\temp\data\test2" 
    
    Sub searchDonnees() 
    Dim wk2 As Workbook 
    Dim ws1 As Worksheet 
    Dim ws2 As Worksheet 
    Dim derlig1 As Long 
    Dim derlig2 As Long 
    Dim cel1 
    Dim cel2 
    
        Set wk2 = Workbooks.Open(fich2) 
        Set ws2 = wk2.Worksheets(1) 
        derlig2 = ws2.Range("N65536").End(xlUp).Row 
         
        Set ws1 = ThisWorkbook.Worksheets(1) 
        derlig1 = ws1.Range("BK65536").End(xlUp).Row 
         
        For Each cel1 In ws1.Range("BK2:BK" & derlig1) 
            For Each cel2 In ws2.Range("N2:N" & derlig2) 
                If cel1.Value = cel2.Value Then 
                    ws1.Range("BN" & cel1.Row).Value = ws2.Range("L" & cel2.Row).Value 
                End If 
            Next cel2 
        Next cel1 
    
    Set wk2 = Nothing
    Set ws2 = Nothing
    Set ws1 = Nothing
         
    End Sub


    ;o)
    «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
    Nicolas Boileau
    1
  2. Eaheru Messages postés 205 Statut Membre 20
     
    Pour simplifier, je vais copier la feuil1 de chaque fichier dans un troisième fichier.
    Ainsi, la rechercheV ne se fera qu'entre la feuil1 et la Feuil2 du meme fichier.

    quelqu'un a une idée sur la fonction de recherche ?
    0
  3. Eaheru Messages postés 205 Statut Membre 20
     
    Merci Polux,

    Je teste ça et je t'informe du résultat.
    0
  4. Eaheru Messages postés 205 Statut Membre 20
     
    Alors, voila le résultat :

    J'ai inséré cette macro dans un module et je l'appelle après la création du nouveau fichier contenant les 2 onglets à traiter.
    J'ai modifié le chemin + fichier pour l'expression "Private Const fich2"
    Et après l'exécution de la macro de creation du fichier, plus rien ne se passe.

    Je dois donc rater quelque chose quelque part, mais je ne vois pas quoi ... :/
    0
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Dans l'exemple que j'ai donné, la procédure est dans le fichier supposé être "test1".
      Si la macro est dans un classeur tiers, il faut ajouter ceci dans la procédure :

      Private Const fich1 = "C:\temp\data\test1.xls"
      ...
      ...
      Dim wk1 As Workbook
      ...
      Set wk1 = Workbooks.open(fich1)
      ....

      et remplacer :
      Set ws1 = ThisWorkbook.Worksheets(1)

      par
      Set ws1 = wk1.Worksheets(1)


      Dis moi si c'est ça.

      ;o)
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Eaheru Messages postés 205 Statut Membre 20
     
    Encore merci de ce retour rapide.
    Je viens de tester, il se passe 1 ou 2s ou on a l'impression que ça travaille, mais au final rien n'est fait.

    Je te donne le contexte :

    j'ai un fichier tiers qui se nomme "rechercheV.xlsm" dans lequel je travaille sur cette macro.
    le déroulé est comme suit :
    - Ouvrir le fichier "test1" et le sauvegarder en fichier "test3"
    - Ajouter un onglet (2) au fichier "test3"
    - Ouvrir le fichier "test2" et copie les cellules de la "feuil1" dans les cellules de la feuil2 du fichier "test3"
    - fermer les fichiers "test1" et "test2"
    Dans le fichier "test3" (toujours ouvert normalement).
    - sur l'onglet "feuil1", lire la valeur de la colonne "BK" (qui ne peut pas etre triée) pour la ligne 2
    - Regarder dans la colonne "N" de l'onglet "feuil2" si cette valeur est présente
    - Si la valeur est présente, lire la valeur de la colonne "L" de la ligne concernée (feuil2 toujours) et l'écrire dans la colonne "BN" de la ligne concernée (pas triée non plus), lue en début de boucle (dans l'onglet "feuil1")
    - passer à la ligne suivante jusqu'au la dernière ligne.

    je regarde de mon coté si je vois ce qui bloque. :)
    0
  7. Eaheru Messages postés 205 Statut Membre 20
     
    Alors j'ai tenté de repasser sur 2 fichiers et ca tourne pour le moment.
    Le premier problème venait donc de mon changement de stratégie (2 onglets d'un nouveau fichier plutôt que 2 fichiers).

    J'attends la fin pour voir comment ça se concrétise :)

    Est il possible d'adapter cette macro pour un fonctionnement tel que préciser au dessus ?
    0
    1. Eaheru Messages postés 205 Statut Membre 20
       
      Le résultat semble impeccable. Je vérifie entre le fichier d'origine et le fichier résultant de la macro.
      Si tout est ok, inutile de reprendre la macro.

      Merci pour cette aide et pour l'écriture tres sobre de cette macro :)
      0