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 :

VBA Chercher valeur de fichier1 dans fichier2 [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 33
    Par défaut VBA Chercher valeur de fichier1 dans fichier2
    Bonjour à tous

    J'essaye de créer une routine qui me permettra à terme de :
    ->fichier de départ fichier1 qui contient la macro
    1-parcourir un répertoire et ses sous répertoires
    2-chercher des fichiers excel qui portent un nom particulier + suffixe : fichier2
    3-les ouvrir un à un
    4-chercher dans fichier1 la cellule qui porte la même valeur que la cellule D04 de fichier2
    5-cellule trouvée : descendre de 2 lignes (2 cellules)
    6-copier coller une plage de données de fichier2 vers fichier1

    Je sais faire les étapes 1, 2, 3 et 6. Il me manque les étapes 4 et 5.

    Dans un premier temps, je veux améliorer le code ci dessous qui permet uniquement de chercher puis d'afficher les coordonnées de la cellule de fichier1 dont la valeur est égale à la valeur de la cellule D04 du fichier2. Problème : le code me retourne l'emplacement en fichier2 (à savoir colonne 4, ligne 4 qui correspond à D04)
    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
    29
    30
    31
    32
    33
    Sub search()
     
    Dim periode As String
    Dim celluletrouvee As Range
    Dim ligne As Integer
    Dim col As Integer
    Dim wbSource, wbFichierUsager As Workbook
     
    'PDM jardin.xlsm (fichier1) est affecté à wbFichierUsager
    Set wbFichierUsager = ThisWorkbook
     
    'ouvrir le fichier2 et cibler la cellule periode
    Workbooks.Open "C:\Users\fichier2.xls"
    Set wbSource = ActiveWorkbook
    periode = Workbooks("fichier2.xls").Worksheets("feuil1").Range("$D$4").Value
     
    'revenir vers le fichier1.xlsm
     
    Set wbFichierUsager = ActiveWorkbook
    'probleme ici
    Set celluletrouvee = Range("1:99").Find(periode, lookat:=xlWhole)
     
    If celluletrouvee Is Nothing Then
    MsgBox ("pas trouvé")
    Else
    ligne = celluletrouvee.Row
    col = celluletrouvee.Column
    MsgBox ("trouvé : ligne = " & ligne & " , colonne = " & col)
    End If
     
    wbSource.Close SaveChanges:=False
     
    End Sub
    Quelqu'un pourrait me dire ce qui ne va pas ?

    J'essaye de procéder par étapes. Si je suis sur la mauvaise piste, n'hésitez pas à me recadrer.

    Merci beaucoup

  2. #2
    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
    Citation Envoyé par yuva.iuva Voir le message
    Il me manque les étapes 4 et 5.
    Bonjour,

    pour l"étape 4, voir la méthode Find … Et pour la 5, voir la propriété Offset


    _____________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse

  3. #3
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 112
    Par défaut
    Bonjour,
    il y a plusieurs problèmes dans ton code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set wbFichierUsager = ThisWorkbook
    Cette ligne ne sert à rien, ThisWorkbook est une variable définie par défaut et pointera toujours vers le classeur qui contient la macro.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Workbooks.Open "C:\Users\fichier2.xls"
    Set wbSource = ActiveWorkbook
    periode = Workbooks("fichier2.xls").Worksheets("feuil1").Range("$D$4").Value
    ça marche mais c'est étrange.
    Tu déclare une variable, que tu n'utilise pas. Et, comme tu en fais l'expérience plus loin dans ton code, ActiveWorkbook est un objet délicat à utiliser.
    Il vaut mieux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set wbSource = Workbooks.Open("C:\Users\fichier2.xls")
    periode = wbSource.Worksheets("feuil1").Range("$D$4").Value
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set wbFichierUsager = ActiveWorkbook
    'probleme ici
    Set celluletrouvee = Range("1:99").Find(periode, lookat:=xlWhole)
    Ici on peut voir le problème du ActiveWorkbook, juste avant on se dit que activeworkbook c'est fichier2, dans tous les cas tu as déjà une variable pour chacun de tes fichiers : fichier1 = thisWorkbook, fichier2 = wbSource

    Concernant celluletrouvee j'arrive pas trop à savoir ce que tu cherches à faire.
    Qu'est ce que Range("1:99") ? C'est une plage nommée ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    celluletrouvee = ThisWorkbook.Sheets(maFeuille).Range(maPlage).Find(periode,lookat:=xlWhole)
    'Aller deux lignes en dessous
    Dim Ligne as Long
    Ligne = celluletrouvee.row + 2
    Etienne

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 33
    Par défaut ça te parait meilleur comme ça ?
    Bonjour Etienne,

    Merci pour tes réponses, elles m'ont permis d'épurer un peu le code, sur lequel j'ai déjà un peu plus avancé. Inutile de préciser que j'y connais pas grand chose au vba, je crois que ça ce sent

    j'ai viré la variable "wbFichierUsager" et tout ce qui y est lié

    ça marche mais c'est étrange. Il vaut mieux écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set wbSource = Workbooks.Open "C:\Users\fichier2.xls"
    periode = wbSource.Worksheets("feuil1").Range("$D$4").Value
    J'ai essayé mais la ligne se met en rouge et un message d'erreur apparait sur la partie "C:\..." : <Erreur de compilation. Attendu : fin d'instruction>

    Concernant celluletrouvee j'arrive pas trop à savoir ce que tu cherches à faire.
    je cherche à trouver la même valeur que fichier2.D4 dans fichier1 et j'y suis arrivé
    Qu'est ce que Range("1:99") ? C'est une plage nommée ?
    c'est la plage dans laquelle je cherche une valeur = fichier2.D4

    En somme, j'obtiens ça :

    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
    29
    30
    31
    32
    33
    Sub b_search()
     
    Dim periode As String
    Dim celluletrouvee As Range
    Dim saut As Long 'j'ai changé ligne par saut et j'ai enlevé col qui ne m'est d'aucune utilité
    Dim wbSource As Workbook
     
    'ouvrir le fichier2 et cibler la cellule periode
    'wbSource = Workbooks.Open "C:\Users\fichier2.xls" ne marche pas
     
    Workbooks.Open "C:\Users\fichier2.xls"
    Set wbSource = ActiveWorkbook
    periode = wbSource.Worksheets("feuil1").Range("$D$4").Value
     
     
    'revenir vers le fichier1.xlsm
     
    Set celluletrouvee = ThisWorkbook.Sheets("feuil1").Range("1:99").Find(periode, lookat:=xlWhole)
     
    	If celluletrouvee Is Nothing Then
    	  MsgBox ("pas trouvé")
    	Else
     
    	'saut de 2 lignes
    	  saut = celluletrouvee.Row + 2
     
    	  'copier coller 2 lignes plus bas que la cellule = fichier2.D4
     
    	   Call c_copier_coller
     
    	End If
     
    End Sub

  5. #5
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 112
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wbSource = Workbooks.Open("C:\Users\fichier2.xls")
    J'avais oublié les parenthèses.

    Le problème est donc résolu ?

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 33
    Par défaut
    Oui, merci

    Mais je vais poster une autre question parce que c'est pas fini

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/05/2011, 06h33
  2. Vba envoi valeur à un textbox dans un etat
    Par en_gel_ho dans le forum IHM
    Réponses: 7
    Dernier message: 04/01/2007, 13h58
  3. Réponses: 7
    Dernier message: 23/06/2006, 14h52
  4. Réponses: 2
    Dernier message: 02/06/2006, 13h47
  5. Réponses: 2
    Dernier message: 25/02/2006, 11h04

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