Excel 2007 VBA: RechercheV

Résolu
Eaheru Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   -  
Eaheru Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   -
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 !!
A voir également:

6 réponses

Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   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
Eaheru Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   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
Eaheru Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   20
 
Merci Polux,

Je teste ça et je t'informe du résultat.
0
Eaheru Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   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
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Eaheru Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   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
Eaheru Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   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
Eaheru Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   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