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 :

Copier des données avec conditions


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Par défaut Copier des données avec conditions
    Bonjour,

    Je souhaiterai copier des données sur une autre feuille de mon classeur en incluant les conditions :
    S'il trouve dans la colonne A de ma feuille "Source", le chiffre 7, il doit prendre toutes les lignes au dessus (de 1 à 6 inclus) et les copier sur ma feuille "Tranche" en cellule A7.
    Autre condition :
    S'il trouve dans la colonne A de ma feuille "Source", le chiffre 6, il doit prendre toutes les lignes en dessous (de 7 à ....) et les copier sur ma feuille "Tranche" en cellule A23.
    Je me mélange les pédales avec les boucles..et conditions..
    Merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour Anana, et bienvenu sur ce Forum,

    Tout est clairement dit dans ton énoncé.

    Pour "trouver" (traduit en anglais) et "copier", regarde les méthodes décrites dans cet espace documentaire.
    Objet Range.

    Essaie de développer et reviens si nécessaire.

  3. #3
    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
    Citation Envoyé par ANANA49 Voir le message
    Je me mélange les pédales avec les boucles..et conditions..
    Peut-être pourrais-tu montrer le code que tu as réalisé pour qu'on puisse t'indiquer ce qui est incorrect et comment le corriger.

  4. #4
    Membre confirmé
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Par défaut
    Bonjour,

    Ci-dessous mon bout de code mais c'est mal parti.. Car je ne sais pas comment lui dire de me copier toutes les lignes au dessus de la valeur 6 qu'il trouve etc..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub SourceTranche()
     
    For i = 1 To 6
    If Cells(i, 1).Value = "6" Then
    Sheets("Tranche").Range("A7").Value = Sheets("Source").Cells(i, 6).Value
     
    End If
    End Sub

  5. #5
    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
    Déjà, une boucle For doit être fermée par un Next.
    https://docs.microsoft.com/fr-fr/off...next-statement

    Ensuite, à chaque tour de boucle, tu inscris le contenu de la cellule courante dans A7.
    Ce qui fait, au final, que seule la dernière valeur scrutée sera inscrite, chaque autre aura été écrasée par la suivante.

  6. #6
    Membre confirmé
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Par défaut
    Merci Menhir,

    J'ai bien compris l'explication pour la boucle For - Next mais par contre je ne vois pas comment je peux lui dire de me copier toutes les lignes au dessus de la valeur 6 sur ma feuille "Tranche" en "A7" car je ne veux pas qu'une seule valeur mais toutes les valeurs des lignes ??

    Merci pour ton aide car j'ai consulté les liens et plus j'en consultes plus je me perds (Boucle For Each...)

  7. #7
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    A mon avis, mieux vaut utiliser la méthode Find (voir le lien que je t'ai indiqué).
    Cette méthode Find retourne un objet Range dont tu peux récupérer la ligne.
    Ne reste plus alors qu'à copier le champ
    A2:A& cette ligne
    (à adapter)

  8. #8
    Membre confirmé
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Par défaut
    Merci Marcel,

    Ok il me trouve la valeur 6 mais à partir de cette valeur trouvée : quel est la fonction qui me permet de récupérer toutes le lignes du dessus pour les coller sur la feuille "Tranche" à partir de "A7" ?

    Je suis novice et essaie de comprendre.. et ne comprends RIEN !

  9. #9
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut ANANA,

    Comme tu l'as vu, la méthode Find te retourne un objet Range. Autrement dit, une cellule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set t = Worksheets("lawks").Range("A1:A100").Find(What:="mercatog", Lookin:=xlValues)
    Tu remarqueras que t est précédé de Set.
    C'est le cas de toutes les variables affectées à des objets.
    A la fi du code, on libère cette variable est libérée.t est une cellule. On peut donc en récupérer sa ligne.

    Si tu effectues une copie, alors tu peux entrer cette valeur dans l'argumentation de la méthode Copy.
    Si tu veux copier les lignes précédentes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("lawks").Range("A2:A" & t.Row).Copy Dextination:=.....
    Si tu veux copier les lignes suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("lawks").Range("A" & t.Row&":A100").Copy Dextination:=.....
    Ici, le numéro de ligne est concaténé, avec "&", aux autres éléments pour retourner une chaine de caractères (String) comme argument du Range à copier.

    Plus clair?

    S'il te plaît.
    En utilisant la méthode Find décrite dans le lien que je t'ai indiqué (Objet Range)
    En utilisant la méthode Copy décrite dans le même lien.
    En utilisant ces indications.
    Essaie de développer, en adaptant (adresses, colonnes) les éléments de codes ci-dessus, ne serait-ce qu'un début de code et reviens.

    (On va y arriver)

  10. #10
    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
    Citation Envoyé par ANANA49 Voir le message
    J'ai bien compris l'explication pour la boucle For - Next mais par contre je ne vois pas comment je peux lui dire de me copier toutes les lignes au dessus de la valeur 6 sur ma feuille "Tranche" en "A7" car je ne veux pas qu'une seule valeur mais toutes les valeurs des lignes ??
    Au lieu de transférer une valeur, copie toute la zone avec la méthode Copy.
    https://msdn.microsoft.com/fr-fr/lib...0(v=office.15)
    La ligne contenant la valeur cible te fixe la ligne du haut.
    La propriété End(xlUp) te donnera la ligne du bas.
    https://msdn.microsoft.com/fr-fr/lib...9(v=office.15)
    Tu fixes toi-même les colonnes à copier.

  11. #11
    Membre confirmé
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Par défaut
    J'ai revu mon code mais j'ai besoin de votre aide pour lui indiquer qu'il doit coller les lignes en "A7" sur la feuille "Tranche" ?
    Je pense que j'y suis presque.. et je dois refaire la même boucle pour lui dire de coller les lignes après la valeur "6" en "A23" ??
    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
     
    Sub CopierTranches()
     
    Dim xlWsh1 As Object, xlWsh2 As Object
    Dim L As Long
    Dim lgDerlig1 As Long
    Dim lgDerLig2 As Long
     
    'feuilles du traitement
    Set xlWsh1 = Worksheets("Source")
    Set xlWsh2 = Worksheets("Tranche")
     
    lgDerlig1 = xlWsh1.UsedRange.Rows.Count
    lgDerLig2 = xlWsh2.UsedRange.Rows.Count
     
    With xlWsh1
     
        For L = 1 To lgDerlig1
     
            If .Cells(L, 1).Value = "7" Then
                Exit For
            Else
     
                If .Cells(L, 1).Value <> "" Then
                    .Rows(L).Copy xlWsh2.Rows(lgDerLig2)
                    lgDerLig2 = lgDerLig2 + 1
                End If
            End If
        Next L
    End With
    End Sub

  12. #12
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Désolé, mais tu ne suis pas les recommandations qui te sont fournies.
    J'ai investi quelque temps pour rédiger mon dernier post.
    Dans ce cas....

  13. #13
    Membre confirmé
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Par défaut
    J'ai modifié avec la méthode Copy Destination mais c'est un peu long à l'exécution..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     If .Cells(L, 1).Value <> "" Then
                    .Rows(L).Copy Destination:=Worksheets("Tranche").Range("A7").Rows(lgDerLig2)
                    lgDerLig2 = lgDerLig2 + 1
    Merci pour votre aide..

  14. #14
    Membre confirmé
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Par défaut
    Marcel,

    Je n'ai vraiment pas voulu vous vexer en interprétant un autre code. C'est juste que j'ai préféré me diriger en terrain connu..
    Surement aussi pour une question de timing..
    Je vous remercie d'avoir pris de votre temps pour m'expliquer votre applicatif et j'espère que vous ne m'en tiendrai pas rigueur.
    A très bientôt

    Je vous transmets mon code final :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Sub CopierTranches()
     
    Dim xlWsh1 As Object, xlWsh2 As Object
    Dim L As Long
    Dim lgDerlig1 As Long
    Dim lgDerLig2 As Long
     
    'feuilles du traitement
    Set xlWsh1 = Worksheets("Source")
    Set xlWsh2 = Worksheets("Tranche")
    'récupération du dernier enregistrement de chaque feuille
    lgDerlig1 = xlWsh1.UsedRange.Rows.Count
    lgDerLig2 = xlWsh2.UsedRange.Rows.Count
     
     
    With xlWsh1
        'lecture du classeur source à parir de la ligne 1
        For L = 1 To lgDerlig1
            ' fin du traitement si valeur est trouvé en cellule A
            If .Cells(L, 1).Value = "7" Then
                Exit For
            Else
            'copie des lignes de la feuille 1 si cellule A n'est pas vide
                If .Cells(L, 1).Value <> "" Then
                    .Rows(L).Copy Destination:=xlWsh2.Range("A7").Rows(lgDerLig2)
                    lgDerLig2 = lgDerLig2 + 1
                End If
            End If
        Next L
     
          For L = 8 To lgDerlig1
            ' fin du traitement si valeur est trouvé en cellule A
            If .Cells(L, 1).Value = "6" Then
                Exit For
            Else
            'copie des lignes de la feuille 1 si cellule A n'est pas vide
                If .Cells(L, 1).Value <> "" Then
                    .Rows(L).Copy Destination:=xlWsh2.Range("A16").Rows(lgDerLig2)
                    lgDerLig2 = lgDerLig2 + 1
                End If
            End If
        Next L
    End With
    End Sub

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

Discussions similaires

  1. Grouper des données avec condition
    Par jzb10n dans le forum Excel
    Réponses: 3
    Dernier message: 21/01/2015, 11h01
  2. copier des infos avec condition entre deux feuilles
    Par suikasensei dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/07/2011, 17h36
  3. Copier des données sous condition
    Par delphine1987 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/04/2011, 22h17
  4. Copier des données selon conditions
    Par BOU59000 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/07/2009, 17h15
  5. copier des données avec conditions
    Par captaine93 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/12/2007, 16h47

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