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 une valeur et copier une autre valeur de la meme ligne [XL-2016]


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
    Responsable de compte
    Inscrit en
    Mai 2018
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Mai 2018
    Messages : 55
    Par défaut recherche une valeur et copier une autre valeur de la meme ligne
    Bonjour,

    J'ai récupéré une macro que j'ai modifiée, cependant mon problème est la lenteur de la macro quand le fichier est important + 20 000 ligne en feuille 2.

    une autre idée? macro?

    il s'agit de rechercher une valeur(feuille1) dans une autre feuille(feuille2) et de copier certaines valeurs de la ligne trouvée dans la feuille1

    merci de votre aide

    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
    Sub test()
     
    Dim lineNumber As Long
     
    For lineNumber = 2 To Feuil1.Rows.Count Step 1
      If Feuil1.Range("A" & lineNumber) = "" Then Exit For
     
    Worksheets("feuil2").Activate 'activer la feuille
     
        nomcherche = Sheets("Feuil1").Range("A" & lineNumber) 'valeur recherchée
     
        With Sheets("feuil2").Cells ' le point cells indique que nous cherchons la valeur dans tout la feuille
     
        Set cellule = .Find(nomcherche, LookIn:=xlValues)
                If Not cellule Is Nothing Then
                      i = cellule.Row 'n ligne de la valeur
                      Range("A" & i).Copy Worksheets("Feuil1").Range("B" & lineNumber) 'récupérer et copier la date
                      i = Empty 'on vide la variable
                  Else
                End If
        End With
     
     
    Next lineNumber
     
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent 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
    Par défaut
    Quelques petites améliorations dans le code suivant.
    Mais il ne faut pas rêver : quand on traites de grosses quantités de données, ça prend forcément du temps. VBA (et les différent Basic en général) n'est pas un langage réputé pour sa rapidité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    Dim Cible As Range, Trouve As Range
     
    For Each Cible in Worksheets("Feuil1").Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))
        Set Trouve = Worksheets("feuil2").UsedRange.Find(Cible.Value, LookIn:=xlValues)
        If Not Trouve Is Nothing Then Worksheets("feuil2").Cells(Trouve.Row, 1).Copy Worksheets("Feuil1").Cible.Offset(0, 1)
    Next Cible
     
    End Sub
    Pour gagner du temps, il faudrait remplacer le UsedRange du Find par une zone de recherche plus précise.

    Cela dit, une combinaison de fonctions INDEX() et EQUIV() directement dans la feuille de calcul serait certainement plus rapide.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 254
    Par défaut
    Bonjour,

    Les données que vous cherchez sont toujours dans la même colonne ?

    Sinon, dans un premier temps, vous pouvez essayer ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub VotreMacro
     
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
     
    'Procédure
     
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    Bonne journée,

  4. #4
    Membre averti
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mai 2018
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Mai 2018
    Messages : 55
    Par défaut
    Merci pour vos retours,

    Malheureusement la valeur peut'être n'importe ou j'ai donc modifié

    Effectivement INDEX et EQUIV peuvent fonctionner mais je voudrais tout automatiser dans ma macro,

    merci pour votre code plus rapide

  5. #5
    Membre averti
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mai 2018
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Mai 2018
    Messages : 55
    Par défaut
    Bonjour,

    dans le code précédemment transmis j'ai une erreur que je n'arrive pas à résoudre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("feuil2").Cells(Trouve.Row, 1).Copy Worksheets("Feuil1").Cible.Offset(0, 1)
    erreur d'exécution '438' Propriété ou methode non gérée par cvet objet

    Merci de votre aide

  6. #6
    Expert éminent 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
    Par défaut
    Retire le Worksheets("Feuil1").

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 27/08/2019, 06h03
  2. [XL-2010] VBA: Rechercher une valeur et copier une chaine de caractères
    Par Gatche dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/10/2018, 11h45
  3. Réponses: 1
    Dernier message: 13/10/2017, 12h47
  4. Copier une table Access d'une base de données à une autre
    Par Marie S. dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 23/05/2007, 13h09
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 22h24

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