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 :

Recherche valeur entre feuilles et copier/coller [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Assistante de direction
    Inscrit en
    Août 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Assistante de direction
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Recherche valeur entre feuilles et copier/coller
    Bonjour,
    Il est fort probable que le sujet est été déjà abordé .. mais je suis perdue dans tous ces forums, réponses je ne sais plus ce qui pourrait convenir pour ma macro.

    Mon objectif : copier coller certaines cellules d'une ligne d'une feuille à une autre, selon une valeur dans ma première colonne trouvée dans ma première feuille

    je m'explique en terme plus binaire :
    pour chaque ligne de ma colonne A dans ma feuille 2 (2016) rechercher la valeur cette cellule si elle existe dans la colonne A de ma première feuille (2015)
    si elle existe alors copier colonne certaines cellule de la ligne où a été trouvé la valeur, dans ma feuille 2
    si non ne rien faire et passer à la ligne suivante de ma feuille 2.

    Je joins un exemple de mon problème avec un excel simplifié (données confidentielles).

    Merci à ceux qui pourront m'aider.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par nanims Voir le message
    pour chaque ligne de ma colonne A dans ma feuille 2 (2016) rechercher la valeur cette cellule si elle existe dans la colonne A de ma première feuille (2015)
    si elle existe alors copier colonne certaines cellule de la ligne où a été trouvé la valeur, dans ma feuille 2
    si non ne rien faire et passer à la ligne suivante de ma feuille 2.
    Ce que tu décris là, c'est exactement ce que fait la fonction RECHERCHEV().
    Pourquoi vouloir absolument du VBA ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Assistante de direction
    Inscrit en
    Août 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Assistante de direction
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Je ne veux pas de fonction dans mon tableau seulement les valeurs.
    j'étais partie sur ça au départ, mais je me retrouve avec des formules dans mon tableau ce que je ne veux pas.
    et il s'agit d'un tableau excel qui va être utilisé par pire que moi en terme de connaissances excel. Le but est que ce tableau soit à jour des infos entre 2015 et 2016 dès l'ouverture du fichier.

    Merci si vous pouvez m'aider.

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par nanims Voir le message
    et il s'agit d'un tableau excel qui va être utilisé par pire que moi en terme de connaissances excel. Le but est que ce tableau soit à jour des infos entre 2015 et 2016 dès l'ouverture du fichier.
    C'est un argument qui plaide en faveur d'une solution par fonctions puisque, avec les fonctions, les mises à jours sont instantanées sans qu'il n'y ait rien à faire.

    Mais si ce n'est pas la solution qui te convient, je ne vais pas lourdement insister.

    Citation Envoyé par nanims Voir le message
    pour chaque ligne de ma colonne A dans ma feuille 2 (2016)
    Commencer par déterminer le nombre de ligne à traiter avec une propriété End(xlUp) sur un Range(Rows.Count, 1) de la feuille 2.

    Puis faire une boucle pour scruter chaque ligne, soit avec un For to pour scruter par numéro de ligne, soit avec For Each pour scruter par cellule (perso, je préfère la première solution, moins élégante mais plus simple et plus souple).

    rechercher la valeur cette cellule si elle existe dans la colonne A de ma première feuille (2015)
    Mettre dans une variable (ne pas oublier le Set) le résultat d'une méthode Find appliquée à ta plage de recherche de ta première feuille.

    si elle existe alors copier colonne certaines cellule de la ligne où a été trouvé la valeur, dans ma feuille 2
    Avec un test If, vérifier que la variable précédente est différente de Nothing.
    Si c'est le cas, prendre le numéro de la cellule trouver pour récupérer la valeur de la cellule de même ligne à la colonne souhaitée ou le faire par un Offset sur la cellule trouvée.

    Je joins un exemple de mon problème avec un excel simplifié (données confidentielles).
    http://www.developpez.net/forums/d84...s-discussions/
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Assistante de direction
    Inscrit en
    Août 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Assistante de direction
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    J'avance bien merci.

    Mon dernier problème vient du choix dans la cellule que je veux qu'il copie !
    c'est pourtant pas la première fois que je fais un copier coller en vba mais là j'ai du louper qqc !

    le fichier que j'avais mis ne contenait pas de données confidentielles, il était surtout là pour étayer mon propos et l'illustrer. j'ai bien vu le message comme quoi "il est inutile et malvenu de joindre un fichier" mais on dit aussi souvent que "L'exemple parle mieux qu'un long discours".

    Je continue ma tâche, je finirai bien par trouver ma boulette .....

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par nanims Voir le message
    Mon dernier problème vient du choix dans la cellule que je veux qu'il copie !
    Pour essayer de corriger ce problème, il faudrait que tu copies ton code dans un message, de préférence avec des balises CODE.

    le fichier que j'avais mis ne contenait pas de données confidentielles, il était surtout là pour étayer mon propos et l'illustrer. j'ai bien vu le message comme quoi "il est inutile et malvenu de joindre un fichier" mais on dit aussi souvent que "L'exemple parle mieux qu'un long discours".
    La dernière fois que j'ai ouvert un fichier xlsm en pièces jointes sur ce forum, le posteur avait oublié de précisé qu'il avait mis dans son fichier une toute petite macro supplémentaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Workbook_BeforeClose(Cancel as Boolean) 
        Application.DisplayAlerts = False 
        Application.Quit
    End Sub
    Quand j'ai voulu fermer son fichier, ça a quitté Excel sans message d'alerte et sans demander si je voulais sauvegarder mes autres fichiers.
    Deux heures de boulots de perdu.
    Je me suis juré de ne plus recommencer.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Assistante de direction
    Inscrit en
    Août 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Assistante de direction
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour,
    bon finalement j'ai pas tant avancé que ça !
    et comme ça commence à s’embrouiller dans ma tête niveau logique, je baisse les bras et m'en remet à vos lumières !

    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
    Sub copie()
    Dim mavaleur As Integer
    Dim marecherche As Range
    Dim a As Integer
    Dim b As Integer
    Set wsh2015 = Worksheets("2015")
    Set wsh2016 = Worksheets("2016")
     
     
     
    Dim l As Integer
     
        Sheets("2016").Activate
        For l = 2 To Application.CountA(Range("Suivi2016[N°]"))
     
        mavaleur = Range("A" & l).Value
        With wsh2015.Range("Suivi2015[N°]")
     
           Set marecherche = .Find(what:=mavaleur, Lookat:=xlWhole)
                 a = marecherche.Row
                 b = marecherche.Column
                If marecherche Is Nothing Then
                Else
    jusque là ça va c'est après je n'arrive pas à lui dire de sélectionner la cellule de la même ligne mais une colonne à droite !
    pour copier cette cellule dans mon autre feuille une colonne à droite et même ligne par rapport à ma cellule de recherche de départ (cellule de "mavaleur")

    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
                Set wsh2015 = Worksheets("2015")
                wsh2015.Activate
     
     
        Cells(marecherche.Row, marecherche.Column).Select
     
        Selection.Copy
        Sheets("2016").Activate
        Range("b" & l).Select
        ActiveSheet.Paste
     
     
        End If
     
      End With
     
      Next l
     
    End Sub
    En espérant ne pas être trop ridicule avec ma petite macro pour débutant !
    merci pour l'aide que l'on pourra m'apporter !

  8. #8
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut
    Bonjour !

    Citation Envoyé par nanims Voir le message
    je n'arrive pas à lui dire de sélectionner la cellule de la même ligne mais une colonne à droite !
    Utiliser la propriété Range.Offset comme documentée dans l'aide VBA …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  9. #9
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    J'ai ajouté à ton code l'Offset dont a parlé Marc
    Il y a de nombreuses solutions pour faire ça mais, effectivement, c'est la plus simple dans le cas présent.

    Je me suis permis de retoucher deux ou trois détails, entre autre pour te montrer qu'il est préférable de minimiser l'usage des Select et qu'un Not permet d'éviter de mettre un Else.

    Autre détail : il est préférable d'éviter de faire référence au résultat d'un Find avant d'avoir vérifié que ce résultat est probant.
    Pour parler plus clairement, dans ton code, les a=... et b=... aurait du se trouver après le If (mais dans mon code, je m'en suis passé).

    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
    Sub copie()
     
    Dim mavaleur As Integer
    Dim marecherche As Range
    Dim l As Integer
     
    Set wsh2015 = Worksheets("2015")
    Set wsh2016 = Worksheets("2016")
     
    wsh2016.Activate
     
    For l = 2 To Application.CountA(Range("Suivi2016[N°]"))
        mavaleur = Range("A" & l).Value
        Set marecherche = wsh2015.Range("Suivi2015[N°]").Find(what:=mavaleur, Lookat:=xlWhole)
        If Not marecherche Is Nothing Then
            marecherche.Offset(0, 1).Copy wsh2016.Range("b" & l)
        End If
    Next l
     
    End Sub
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  10. #10
    Futur Membre du Club
    Femme Profil pro
    Assistante de direction
    Inscrit en
    Août 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Assistante de direction
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    un immense merci pour ce nettoyage de macro et l'avoir rendu fonctionnelle !
    me reste plus qu'à l'adapter sur le vrai fichier et ses multiples colonnes à recopier.

    j'y ai ajouté une petite condition au moment de la copie ça à l'air de fonctionner ... croisons les doigts pour que j'arrive à adapter tout ça sur le vrai fichier et ne pas faire tout péter !

    encore merci !

  11. #11
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par nanims Voir le message
    ne pas faire tout péter !
    Teste sur une copie.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

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

Discussions similaires

  1. [XL-2007] Réaliser une recherche dans une colonne et copier coller les lignes
    Par Georges50 dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 13/11/2013, 15h39
  2. Rechercher valeur entre 2 balises dans un fichier XML
    Par sachadee dans le forum FAQs Windows
    Réponses: 0
    Dernier message: 08/02/2013, 02h13
  3. [XL-2010] Recherche de données valides et copier / coller
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/04/2012, 17h54
  4. [XL-2010] recherche valeur entre 2 colonnes
    Par gilou41 dans le forum Macros et VBA Excel
    Réponses: 30
    Dernier message: 23/03/2012, 19h01
  5. [XL-2000] Erreur lors de recopie de valeurs entre feuilles
    Par Tydher dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/06/2011, 14h13

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