Excel 2007 VBA: RechercheV

Résolu/Fermé
Eaheru Messages postés 197 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 - Modifié par Eaheru le 25/08/2010 à 09:59
Eaheru Messages postés 197 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 - 25 août 2010 à 16:07
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 mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
Modifié par Polux31 le 25/08/2010 à 11:49
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 mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 20
25 août 2010 à 10:37
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 mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 20
25 août 2010 à 13:52
Merci Polux,

Je teste ça et je t'informe du résultat.
0
Eaheru Messages postés 197 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 20
25 août 2010 à 14:47
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 mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
25 août 2010 à 15:00
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 mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 20
25 août 2010 à 15:44
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 mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 20
25 août 2010 à 16:01
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 mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 20
25 août 2010 à 16:07
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