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 coller des lignes d'un classeur à un autre, avec condition


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Resnponsable projet d'amélioration continue
    Inscrit en
    Novembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Resnponsable projet d'amélioration continue

    Informations forums :
    Inscription : Novembre 2018
    Messages : 5
    Par défaut Copier coller des lignes d'un classeur à un autre, avec condition
    Bonjour,

    Novice dans le VBA je cherche actuellement à copier les lignes de ma feuille1 du classeur1, lorsque la condition "oui" apparaît dans la colonne "A". Puis, les supprimer et les coller dans la feuille1 du classeur2, tout en conservant les lignes qui seraient déjà présentes dans la feuille1 du classeur2.


    PS: J'avais dans un premier temps utilisé un code tout simple pour copier des lignes d'une feuille1 à une feuille2 du même classeur, pour améliorer ma compréhension. Cependant les lignes existantes de la feuille2 étaient écrasées. Le code ci-dessous.

    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 CouperColler()
    'definition de la dernière ligne
    dernligne = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
    k = 2
     
    'Condition pour copier/coller
    For i = 1 To dernligne
    If Sheets(1).Cells(i, 1) = "oui" Then
    Sheets(1).Cells(i, 1).EntireRow.Copy Sheets(2).Cells(k, 1)
    k = k + 1
    End If
    Next i
     
    'condition pour supprimer
    For i = dernligne To 1 Step -1
    If Sheets(1).Cells(i, 1) = "oui" Then
    Sheets(1).Cells(i, 1).EntireRow.Delete
    End If
    Next i
    End Sub
    Merci d'avance de vos réponses

  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 Bruno,

    A mon avis ta variable k est incorrectement initialisée.
    Il te faut la définir comme la dernière ligne non informée de la feuille de destination, comme tu l'as fait pour ta feuille initiale (derligne2)

  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 MarcelG Voir le message
    Il te faut la définir comme la dernière ligne non informée de la feuille de destination, comme tu l'as fait pour ta feuille initiale (derligne2)
    En ajoutant +1 au numéro de ligne puisqu'on ne cherche pas la dernière ligne remplie mais la première ligne vide.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Resnponsable projet d'amélioration continue
    Inscrit en
    Novembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Resnponsable projet d'amélioration continue

    Informations forums :
    Inscription : Novembre 2018
    Messages : 5
    Par défaut
    Merci pour vos réponses, j'ai trouvé un autre code qui marche pour copier/coller/supprimer avec condition, des lignes d'une feuille à une autre du même classeur. Code plus bas.

    Mais je n'arrive pas à l'adapter pour changer la destination du collage dans une feuille d'un autre classeur.

    En résumé je cherche à copier des ligne de la Feuille1 du classeur1, dans la Feuille1 du classeur2.


    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
    Sub CouperColler_classeur()
     
        Dim r As Long
        Dim derniereLigne As Long
        Dim wks1 As Worksheet
        Dim rng As Range
     
        Set wks1 = Worksheets("Feuille1")
        derniereLigne = wks1.UsedRange.Rows.Count
        For r = derniereLigne To 1 Step -1
            If wks1.Range("A" & r).Value = "oui" Then
                wks1.Cells(r, 1).Resize(1, wks1.UsedRange.Columns.Count).Copy
                Set rng = Worksheets("Feuille2").UsedRange
                If rng.Cells.Count = 1 Then
                    rng.PasteSpecial
                Else
                    rng.Cells(rng.Rows.Count + 1, 1).PasteSpecial
                End If
                wks1.Cells(r, 1).EntireRow.Delete
            End If
        Next r
    End Sub

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonjour,

    Sans trop rentrer dans le détail du code, je fais quelques remarques / suggestions:

    1. Ca peut marcher en absolu mais ça risque d'être très lent (parcours cellule par cellule)
    2. Vous utilisez excel? Et bien, profitez-en! Filtrez sur votre valeur "Oui" et récupérer le résultat en une seule passe (en jouant sur le specialcells)

    regardez les tuto sur les fonctions filtrages et filtrages avancés, comme https://philippetulliez.developpez.c...dvancedfilter/

    Bonne continuation

  6. #6
    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 à vous, Bonjour au Forum,

    Oui, vinc_bilb.
    Sauf erreur de ma part.
    Dans ce cas les lignes ne sont pas supprimées.
    La boîte de dialogue indique "copier vers un autre emplacement"
    Ou j'ai peut-être mal lu.

    Parallèlement.
    Bruno, regarde ce code et reviens pour toute question

    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
    Sub Marcel_CopierColler_classeur()
     
    Dim r As Long
    Dim derniereLigne As Long, dernierecol As Long
    Dim wks1 As Worksheet, wks2 As Worksheet
    Dim k As Long
     
    Set wks1 = Worksheets("Feuille1")
    Set wks2 = Worksheets("Feuille2")
     
    With wks2
     
            k = .Cells(.Rows.Count, 1).End(xlUp).Row
            If k > 1 Then k = k + 1
     
    End With
     
    With wks1
     
            derniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row
            dernierecol = .Cells(1, .Columns.Count).End(xlToLeft).Column
     
            For r = derniereLigne To 1 Step -1
                    With .Range("A" & r)
                            If .Value = "oui" Then
                                    .Resize(1, dernierecol).Copy
                                    wks2.Paste Destination:=wks2.Cells(k, 1)
                                    Application.CutCopyMode = False
                                    .EntireRow.Delete
                                    k = k + 1
                            End If
                    End With
            Next r
     
    End With
     
    Set wks1 = Nothing
    Set wks2 = Nothing
     
    End Sub

  7. #7
    Membre à l'essai
    Homme Profil pro
    Resnponsable projet d'amélioration continue
    Inscrit en
    Novembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Resnponsable projet d'amélioration continue

    Informations forums :
    Inscription : Novembre 2018
    Messages : 5
    Par défaut
    Merci Marcel pour ta réponse.
    Le soucis c'est que j'aimerais copier les lignes non pas vers la feuille2 du même classeur mais vers la feuille1 d'un autre classeur.

    PS: Pour la copie dans le même classeur c'est ok

    Vinc merci pour ta réponse, pour ce qui est de la lenteur ça devrait aller je pense, les lignes à copier ne seront pas nombreuses.
    Pour le filtrage avancé, le problème reste le même je n'arrive pas à adapter le code pour copier les lignes du premier classeur vers un autre classeur.

Discussions similaires

  1. Copier coller avec condition if and then
    Par blackty1 dans le forum Excel
    Réponses: 7
    Dernier message: 18/07/2013, 10h20
  2. [XL-2007] Macro- Copier-coller avec conditions
    Par natou_pc dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 12/05/2013, 18h57
  3. Utilisation de Copier/Coller avec Condition
    Par teritor dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/11/2012, 11h58
  4. copier coller avec condition
    Par ons1402 dans le forum Excel
    Réponses: 4
    Dernier message: 14/09/2012, 12h45
  5. [XL-2000] macro copier coller avec condition ne marche pas
    Par antfo dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 17/03/2010, 10h54

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