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 :

Macro RechercheV entre 2 fichiers


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chef de service Qualité
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de service Qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Par défaut Macro RechercheV entre 2 fichiers
    Bonjour,

    Je suis nouveau sur ce forum et je débute totalement en VBA;
    Je souhaiterais faire une macro RechercheV car pas possible en formule en raison du nombre de lignes de mon tableau source trop important (env 30000).

    J'ai 2 tableaux chacun situé dans 1 fichier différent , 1 premier qui est mon tableau de bord (Fichier "TdB", Feuille "GK1"), un second ma source de données actualisée régulièrement (Fichier "SOURCE", Feuille "Rapport1"). A noter que les 2 tableaux seront ouverts dans ma session lorsque je ferai tourner la macro.


    Je souhaite que la macro face les actions suivantes:

    1) Lire valeur dans la colonne D (à partir de la ligne 40) du tableau "GK1" et comparer avec valeur dans la colonne B (à partir de la ligne 5) du tableau "Rapport1"

    2) Si ça correspond, recopier valeur des colonnes U, X, Y, Z, AA du tableau "Rapport1" respectivement dans les colonnes G, H, J, K, M du tableau "GK1".


    Si quelqu'un sait me dire quel code VBA implementer pour réaliser cette macro, il me rendrait un ENORME service.


    Merci d'avance pour votre aide,

    Cordialement,

  2. #2
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut


    Bonjour !

    Si je comprend bien ta problématique :

    Pour chaque valeur de la colonne D de "GK1", tu recherche la valeur correspondante dans la colonne B de "Rapport1", ou tu regarde juste une seul ligne ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Chef de service Qualité
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de service Qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Par défaut
    Oui, absolument, j'ai omis de préciser, pour chaque valeur de la colonne D de "GK1", la macro devra parcourir la colonne B de "Rapport1".

    Merci de ton aide,

    Cordialement,

  4. #4
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut


    Tu as également beaucoup de données à parcourir ?

    On va directement partir sur des procédures un peu optimisées dans ce cas, sinon ça va prendre beaucoup de temps.

    As tu déjà écris des macro en VBA ? Sinon, on va commencer par créer notre macro :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub maSuperbeMacro ()
     
    end sub
    Ce code est à placer dans un "module". Il faut ouvrir l'environnement de Développement (Alt + f11), clic droit sur l'explorateur à gauche, et insérer / module :
    Nom : Capture.PNG
Affichages : 1237
Taille : 72,9 Ko

    Tous le code que l'on va écrire ensemble va s'insérer entre ces deux lignes là. J'ai créer le module dans le classeur "TdB", c'est donc depuis ce classeur que la macro va s'éxecuter.

    Pour plus de clarté, nous allons nommer nos classeurs et les feuilles. La procédure est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim Wbk_TdB As Workbook
    Dim Wbk_SOURCE As Workbook
    Dim Ws_GK1 As Worksheet
    Dim Ws_Rapport1 As Worksheet
     
    Set Wbk_TdB = ThisWorkbook
    Set Wbk_SOURCE = Workbooks("SOURCE.xlsm")
    Set Ws_GK1 = Wbk_TdB.Worksheets("GK1")
    Set Ws_Rapport1 = Wbk_SOURCE.Worksheets("Rapport1")
    Ensuite, nous allons définir la plage à parcourir. Nous pouvons aussi parcourir directement les cellules sans définir de plage dans le code, mais c'est beaucoup plus long. Nous passerons ici par des variables "tableaux", qui vont stocker les valeurs des cellules. Parcrourir des variables tableaux est 1000 fois plus rapide que de parcourir des cellules. Sur une centaine de cellule, ça n'a pas d'importance, mais sur 30 000, ça peut avoir un impact important !

    Afin de définir les plages, nous allons calculer la valeur de la dernière cellule remplie, puis nous allons leurs affecté un tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim derLig_GK1 As Single
    Dim derlig_Rapport1 As Single
    Dim plageTdB()
    Dim plageSOURCE()
     
    derLig_GK1 = Ws_GK1.Range("D" & Rows.Count).End(xlUp).Row
    derlig_Rapport1 = Ws_Rapport1.Range("B" & Rows.Count).End(xlUp).Row
    plageTdB = Ws_GK1.Range("D40:B" & derLig_GK1)
    plageSOURCE = Ws_Rapport1.Range("B5:B" & derlig_Rapport1)
    Maintenant que nous avons déclarer nos données, nous pouvons commencer à les parcourir ! Nous allons utiliser une boucle "For ... next". C'est à dire que nous allons effectuer une opération particulière un certain nombre de fois ! En français, ça donne "Pour chaque cellule de la colonne D, fais ..."

    Ces boucles fonctionnent avec des variables d'itération. Nous allons donc utiliser "I", une variable qui va servir à parcourir nos données. Nous allons également utiliser "Lbound" et "Ubound", qui symbolise les limites inférieur et supérieur de la plage de donnée. Ainsi, I va prendre toutes les valeurs entre Lbound et Ubound.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim I as single
    For I = LBound(plageTdB, 1) To UBound(plageTdB, 1)
     
    Next I
    Nous parcourerons la plage de TdB. Pour chacune des valeurs, nous voulons rechercher une correspondance dans le classeur Source ? [...]

    Je posterais la suite un peu plus tard, je cherche le meilleur moyen de parvenir à ce que tu veux faire sans que ça prenne 400ans ! (30 000 lignes c'est beaucoup, pourquoi ne pas être passé par un Access ?)


    Code complet :
    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
    Dim Ws_Rapport1 As Worksheet
     
    Dim plageTdB()
    Dim plageSOURCE()
    Dim derLig_GK1 As Single
    Dim derlig_Rapport1 As Single
     
    Dim myRow As Single
     
    Dim I As Single
     
    Set Wbk_TdB = ThisWorkbook
    Set Wbk_SOURCE = Workbooks("SOURCE.xlsm")
    Set Ws_GK1 = Wbk_TdB.Worksheets("GK1")
    Set Ws_Rapport1 = Wbk_SOURCE.Worksheets("Rapport1")
     
    derLig_GK1 = Ws_GK1.Range("D" & Rows.Count).End(xlUp).Row
    derlig_Rapport1 = Ws_Rapport1.Range("B" & Rows.Count).End(xlUp).Row
     
    plageTdB = Ws_GK1.Range("D40:D" & derLig_GK1)
    plageSOURCE = Ws_Rapport1.Range("B5:B" & derlig_Rapport1)
     
    For I = LBound(plageTdB, 1) To UBound(plageTdB, 1)
     
     
    Next I
    End Sub

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Bonjour,

    parcourir avec une boucle est bien plus lent que d'utiliser les fonctionnalités d'Excel comme par exemple la méthode Find



    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  6. #6
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut


    Bonjour Marc-L,

    J'y ai pensé aussi, mais il va bien falloir boucler sur quelque chose à un moment donné, puisqu'il faut refaire l'opération sur toutes les cellules de la colonne D. A moins que la taille de la colonne D de la feuille GK1 soit suffisante pour se passer de tableau ?

    Peut être que des filtres avancés font tout aussi bien le boulot ?

    @Waglid Combien de valeur contient la colonne D de la feuille "GK1" ? Je pense m'être lancer dans un bout de code un peu trop complexe pour tes besoins

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Oui une boucle pour traiter les cellules de la feuille source mais pas pour chercher dans la feuille à comparer.

    Cela demande effectivement une présentation claire & exhaustive avant de pouvoir orienter vers la solution appropriée …

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Chef de service Qualité
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de service Qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Par défaut
    Merci beaucoup Nico Chg pour ton implication!!
    Pour répondre à tes questions;
    Oui , j'ai déjà fait des macros, élaborées pour certaines, mais à l'école et ça date (+10ans).... J'ai presque tout oublié, depuis je bricole des macros en m'inspirant avec l'enregistreur, j'adapte le code ensuite, mais c'est vraiment pas propre... j'aimerais me replonger dans VBA et recoder proprement avec des algo optimisé, mais le temps me manque.

    En ce qui concerne plus précisément notre sujet, la colonne D ne comportera pas beaucoup plus de 200 valeurs à terme, en fait à ce jour il y en a 52, mais les sujets arrivent au fur et à mesure...
    Pas très grave si la macro met beaucoup de temps, le tout est de le savoir, je pourrais la faire tourner la nuit.

    Encore mille merci pour ton aide,

    Cordialement,

  9. #9
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut


    Damnit ! j'étais parti sur une colonne D contenant 50k valeurs, pour faire des tests grandeurs nature !

    Reprenons en ce cas :

    Nul besoins de tableaux, on va se servir de la méthode Find, comme l'a judicieusement précisé Marc-L :

    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
    Dim Wbk_TdB As Workbook
    Dim Wbk_SOURCE As Workbook
    Dim Ws_GK1 As Worksheet
    Dim Ws_Rapport1 As Worksheet
     
    Dim derLig_GK1 As Single
    Dim derlig_Rapport1 As Single
     
    Dim I As Single
    Dim rowCorres as single
     
    Set Wbk_TdB = ThisWorkbook
    Set Wbk_SOURCE = Workbooks("SOURCE.xlsm")
    Set Ws_GK1 = Wbk_TdB.Worksheets("GK1")
    Set Ws_Rapport1 = Wbk_SOURCE.Worksheets("Rapport1")
     
    derLig_GK1 = Ws_GK1.Range("D" & Rows.Count).End(xlUp).Row
    derlig_Rapport1 = Ws_Rapport1.Range("B" & Rows.Count).End(xlUp).Row
     
    For I = 40 to derLig_GK1
     
        rowCorres = Ws_Rapport1.Columns(2).Find(Ws_GK1.cells(I, 4).value, , , , xlByRows, xlPrevious).Row
     
        If rowCorres >= 1 then Ws_GK1.cells(I, 7) = Ws_Rapport1.cells(rowCorres, 21)
     
    Next I
    End Sub
    Ma boucle parcours donc les valeurs de 40 à la dernière cellule pleine de la colonne D (admettons 90). Pour chacune de ces valeurs, nous allons rechercher une correspondance dans la colonne B, et si elle est trouvé, nous allons garder la ligne en mémoire dans la variable "rowCorres". Avec cette ligne, nous allons simplement aller rechercher les valeurs ! Dans l'exemple, j'écris dans la colonne 7 (G), la valeur que je lis dans la colonne U (21) du second classeur.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Chef de service Qualité
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de service Qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Par défaut
    Encore merci pour ta réactivité !
    J'ai implémenté le code que tu m'a donné, en adaptant les noms de fichiers et Feuilles car un peu différents de l'énoncé que j'ai donné ce matin, mais en prenant bien soin de ne pas mettre d'espace ou sinon un _ .
    La macro plante avec le message d'erreur suivant "Erreur d'exécution '424': Objet requis" en revoyant à la ligne suivante:
    Set Ws_GK1 = Wbk_TdB.Worksheets("GK1")
    Je ne pense pas que cela soit lié aux changements de noms, je les aies bien tous remplacés, est-ce que cela tourne chez toi?

    Cordialement,

  11. #11
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    À ta place, je ne mettrais pas le nombre de lignes en Single. Single, c'est un nombre en virgule flottante. Tu ne peux pas avoir de demi-lignes et de demi-colonnes; du moins pas dans ce sens-là.

  12. #12
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut


    Bonjour

    Effectivement, j'ai l'habitude de tout mettre en Single, mais il est vrai que c'est plus logique de le déclarer en "Long".

    Et après avoir tester, je n'ai pas d'erreur, le code est bien dans le classeur TdB ?
    Essaie d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("GK1")

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Chef de service Qualité
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de service Qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Par défaut
    Bonjour Nico Chg,

    Il semblerait que cela ait amélioré les choses car la macro plante un peu plus tard;
    le message d'erreur à présent est: "Erreur d'exécution '1004': La méthode 'Range' de l'objet '_Worksheet' a échoué" et le debuggeur renvoie à la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    derlig_Rapport1 = Ws_Rapport1.Range("B" & Rows.Count).End(xlUp).Row
    Surprenant que cela fonctionne chez toi et pas chez moi, je me tâte de remettre tous les noms tels qu'ils étaient et de mettre en correspondance les noms de fichiers et feuilles au moins pour voir si cela proviendrait de mes changements, ton avis?

    Cordialement,

  14. #14
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut


    Bonjour !

    Dans ce cas, on va essayer une autre façon de calculer la dernière ligne. Essaie de remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    derlig_Rapport1 = Ws_Rapport1.Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Chef de service Qualité
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de service Qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Par défaut
    Bonjour Nico Chg,

    A présent le message de plantage est le suivant: "Erreur d'exécution '91' : Variable Objet ou variable de bloc With non définie" et le débuggeur renvoie sur cette même ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     derlig_Rapport1 = Ws_Rapport1.Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
    Je ne perds pas espoir que nous allons y arriver!

    Merci encore pour le temps passé,

    Cordialement,

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Chef de service Qualité
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de service Qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Par défaut
    Bonjour Nico Chg,

    Je me permets de revenir vers toi concernant la super macro que tu m'avais codée et en particulier la phase de debuggage;
    J'étais très pris ces derniers temps et j'avais laissé le sujet en suspend.

    J'ai tenté de renommer mes noms de fichiers et onglets en harmonie avec le code d'origine que tu m'avais fourni pour voir si le bugg ne venait pas de là, mais rien à faire la macro plante toujours au même endroit, à savoir: "Erreur d'exécution '91' : Variable Objet ou variable de bloc With non définie" à la ligne: derlig_Rapport1 = Ws_Rapport1.Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row

    Le code implémenté est celui-ci:

    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
    Dim Wbk_TdB As Workbook
    Dim Wbk_SOURCE As Workbook
    Dim Ws_GK1 As Worksheet
    Dim Ws_Rapport1 As Worksheet
     
    Dim derLig_GK1 As Single
    Dim derlig_Rapport1 As Single
     
    Dim I As Single
    Dim rowCorres As Single
     
    Set Wbk_TdB = ThisWorkbook
    Set Wbk_SOURCE = Workbooks("SOURCE.xlsx")
    Set Ws_GK1 = Wbk_TdB.Worksheets("GK1")
     
    Set Ws_Rapport1 = Wbk_SOURCE.Worksheets("Rapport1")
     
    derLig_GK1 = Ws_GK1.Range("D" & Rows.Count).End(xlUp).Row
    derlig_Rapport1 = Ws_Rapport1.Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
     
    For I = 40 To derLig_GK1
     
        rowCorres = Ws_Rapport1.Columns(2).Find(Ws_GK1.Cells(I, 4).Value, , , , xlByRows, xlPrevious).Row
     
        If rowCorres >= 1 Then Ws_GK1.Cells(I, 7) = Ws_Rapport1.Cells(rowCorres, 21)
     
    Next I
    End Sub
    Désolé d'insister, peut-être un peu lourdement, mais cette macro me ferait gagner un temps considérable.

    Merci d'avance pour ton aide,

  17. #17
    Invité
    Invité(e)

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Chef de service Qualité
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de service Qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    Bonjour rdurupt,

    Si je comprends bien il faut que j'ajoute cette partie de code juste avant ma macro?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function SerchXls(Myrange As Range, MyCellule As Range, strRecherche, EntierCell As Boolean, EnBoucle As Boolean) As Long '
    On Error Resume Next
    SerchXls = 0
    If EntierCell = False Then Entier = xlPart Else Entier = xlWhole
       SerchXls = Myrange.Cells.Find(What:=strRecherche, After:=MyCellule, LookIn:=xlFormulas, LookAt _
            :=Entier, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=EntierCell).Row
      If SerchXls <= MyCellule.Row And EnBoucle = False Then SerchXls = 0
    End Function
    Ca ne change rien, la macro plante toujours au même endroit, ça ne m'étonne pas trop non plus car je ne comprends pas comment le code de cette fonction est exécuté vu qu'il est en dehors de la "Sub" et que je lance la Sub seule, comment appeler les 2 codes en "même temps"?

    Merci d'avance pour ton aide,

  19. #19
    Invité
    Invité(e)
    Par défaut
    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
    sub test
    dim L as long
    L= SerchXls(Wb1.Sheets("Feuil1").Range("A:A"),Wb1.Sheets("Feuil1").Range("A1"),Wb2.Sheets("Feuil3").range("B5"),true,false)
    if L=0 then msgbox "Ko" else msgbox "Ok"
    end sub
     
    Function SerchXls(Myrange As Range, MyCellule As Range, strRecherche, EntierCell As Boolean, EnBoucle As Boolean) As Long '
    On Error Resume Next
    SerchXls = 0
    If EntierCell = False Then Entier = xlPart Else Entier = xlWhole
       SerchXls = Myrange.Cells.Find(What:=strRecherche, After:=MyCellule, LookIn:=xlFormulas, LookAt _
            :=Entier, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=EntierCell).Row
      If SerchXls <= MyCellule.Row And EnBoucle = False Then SerchXls = 0
    End Function

Discussions similaires

  1. macro entre plusieurs fichiers XL
    Par micks dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/07/2011, 10h55
  2. Copier coller entre deux fichiers excel par macro
    Par miss-o-21 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/11/2009, 14h45
  3. liaison entre deux fichier excel (macro)
    Par tamildark dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/12/2008, 17h17
  4. Macro RECHERCHEV entre 2 fichiers excel distincts
    Par paflolo dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 15/11/2006, 03h46
  5. Réponses: 1
    Dernier message: 15/09/2006, 16h23

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