• Publicité

copier/coller certaines lignes en fonction d'un critère

Dans ce forum, vous pouvez poser toutes vos questions concernant l'utilisation de logiciels de bureautique (Microsoft Office, Open Office, etc.)

Modérateurs: Sebastien, Stéphane, Christophe

copier/coller certaines lignes en fonction d'un critère

Messagepar CS1 » 27 Avr 2012 14:33

Bonjour à tous,

Je suis novice et je bloque pour copier/coller automatiquement des données.
J'ai besoin de repérer certaines lignes d'un tableau de données en fonction de la valeur d'une des colonnes (mon critère étant dans la 6ème colonne), de copier une partie des lignes (les 6 premières colonnes) et de les coller dans une autre feuille.

Sachant que mon tableau de données est mis à jour plusieurs fois par mois, je voudrais aussi éviter les doublons lors des mises à jour.

Ci-dessous, le code que j'avais commencé à faire mais qui ne fonctionne pas (et qui ne prend pas en compte l'aspect mise à jour/doublons).

Quelqu'un peut-il m'aider??
EN vous remerciant par avance.


Code: Tout sélectionner
Sub Equip42()

For i = 1 To 10000
If Left(Worksheets("extract").Range("F" & i), 13) = "Equip42" Then
LastRow = (Worksheets("Equip42").Range("A1").SpecialCells(xlCellTypeLastCell).Row)


For j = 1 To 6
Sheets("extract").Cells(i, j).Select
Selection.Copy
Selection.Paste Destination:=Worksheets("Equip42").Cells(LastRow, j+1)

Next j
End If
Next i

End Sub
Modifié en dernier par Sebastien le 27 Avr 2012 18:41, modifié 2 fois.
Raison: Déplacement du sujet dans le bon forum
CS1
No0b
No0b
 
Messages: 8
Enregistré le: 27 Avr 2012 12:23

Re: copier/coller certaines lignes en fonction d'un critère

Messagepar Sebastien » 27 Avr 2012 18:55

Bonjour,

Vous avez la possibilité d'utiliser la fonction RemoveDuplicates. Elle permet de supprimer les lignes en doublons d'un tableau. Par contre, il semble que cette fonction soit disponible dans Excel 2007 et 2010.

J'ai fait un petit test en utilisant l'enregistreur de macro afin d'obtenir le code :
Code: Tout sélectionner
    Cells.Select
    ActiveSheet.Range("$A$1:$B$6").RemoveDuplicates Columns:=Array(1, 2), Header _
        :=xlNo
    Range("A1").Select
End Sub


Sinon, une solution alternative consisterait en sélectionner, avec une macro, les lignes à copier et de vérifier leur existence avant de les coller. Parmi les 6 colonnes que vous collez, y a-t-il une colonne ayant une donnée unique permettant de vérifier la présence de la donnée dans la feuille de destination ?

@+
Image
Avatar de l’utilisateur
Sebastien
Administrateur
Administrateur
 
Messages: 5507
Enregistré le: 14 Fév 2005 19:17
Localisation: LILLE

Re: copier/coller certaines lignes en fonction d'un critère

Messagepar CS1 » 01 Mai 2012 18:37

Bonjour,

Merci Sébastien pour votre réponse.
Effectivement, j'ai bien une colonne (la 5ème) avec un code unique qui peut servir pour éviter les doublons.

Mais comment copier certaines lignes seulement et les coller dans une autre feuille?

Pour essayer de clarifier mon idée, voici un lien vers le fichier excel: http://dl.free.fr/getfile.pl?file=/g7FUWMZy
sur la 1ère feuille, un exemple du tableau de données brutes et sur les feuilles suivantes, les données telles que j'ai besoin qu'elles apparaissent.
Là pour le moment, je peux le traiter manuellement puisqu'il n'y a pas beaucoup de données mais ça ne va pas durer.

Merci à vous.
CS1
No0b
No0b
 
Messages: 8
Enregistré le: 27 Avr 2012 12:23

Re: copier/coller certaines lignes en fonction d'un critère

Messagepar Sebastien » 01 Mai 2012 19:42

Bonjour,

Nous pouvons tenter de créer une macro afin d'automatiser la recopie et le contrôle des doublons.
Afin de ne pas développer une macro ne répondant pas à votre besoin, pourriez-vous confirmer et au besoin compléter les éléments ci-dessous.

:arrow: L'objectif est de sélectionner des données dans la feuille extract et de les coller dans la feuille equip42
:arrow: Seules les données dont la valeur "Equip42" est présente dans la colonne F de la feuille extract doivent être copiées.
:arrow: Le numéro FI contenu dans la colonne 5 de la feuille extract contient une donnée unique qui peut servir afin de vérifier si la ligne a déjà été sauvegardée.

Mais comment copier certaines lignes seulement et les coller dans une autre feuille?

On peut le faire par macro ou bien par filtrage. Vu que vous voulez contrôler les doublons, il vaut mieux faire une macro.

Je peux essayer de créer un code pour ça, par contre j'ai besoin d'une précision. Le critère de sélection est "Equip42". Ce critère doit-il pouvoir être modifiable ou bien seul "Equip42" sera utilisé ?

Tenez-nous au courant.

@+
Image
Avatar de l’utilisateur
Sebastien
Administrateur
Administrateur
 
Messages: 5507
Enregistré le: 14 Fév 2005 19:17
Localisation: LILLE

Re: copier/coller certaines lignes en fonction d'un critère

Messagepar CS1 » 02 Mai 2012 11:57

Bonjour,

point 1: c'est bien ça mon objectif.
point 2: sélectionner les données dont la chaine de caratères en colonne F contient "Equip V642"
point 3: oui le "numéro FI" en colonnes 5 est unique

point 4: seul le critère "Equip V642" sera utilisé pour selctionner les données à coller dans la feuille "EquipV42". Ensuite, je pensais réutiliser le code pour les autres onglets (en modifiant la valeur du critère et la destination du collage à ce moment là).

Merci à vous
CS1
No0b
No0b
 
Messages: 8
Enregistré le: 27 Avr 2012 12:23

Re: copier/coller certaines lignes en fonction d'un critère

Messagepar Sebastien » 04 Mai 2012 19:23

Bonjour,

Ci-dessous une macro permettant la recopie des données. Par contre, elle ne gère pas encore la gestion des doublons.

Voici tout de même le code pour avancer.

Code: Tout sélectionner
Sub copie()

Sheets("extract").Select
Range("F2").Select
 
Do While ActiveCell.Value <> ""
    If ActiveCell.Value Like "Equip V642*" Then
        ligne = ActiveCell.Row
        Range(Cells(ligne, 1), Cells(ligne, 6)).Copy
        Sheets("EquipV42").Activate
        Range("B9").Select
        If ActiveCell.Offset(1, 0).Value = "" Then
            ActiveCell.Offset(1, 0).Select
            ActiveSheet.Paste
            Sheets("extract").Select
            ActiveCell.Offset(1, 0).Select
        Else
            Selection.End(xlDown).Select
            ActiveCell.Offset(1, 0).Select
            ActiveSheet.Paste
            Sheets("extract").Select
            ActiveCell.Offset(1, 0).Select
        End If
    Else
        ActiveCell.Offset(1, 0).Select
    End If
Loop
   
End Sub


Je reposterai une modification quand j'aurai trouvé un code permettant de gérer les doublons.

@+
Image
Avatar de l’utilisateur
Sebastien
Administrateur
Administrateur
 
Messages: 5507
Enregistré le: 14 Fév 2005 19:17
Localisation: LILLE

Re: copier/coller certaines lignes en fonction d'un critère

Messagepar Sebastien » 05 Mai 2012 20:05

Bonjour,

Voici la macro modifiée, avec la fonction permettant de gérer les doublons.
Je vous ai commenté le code afin de bien comprendre comment elle fonctionne.

Code: Tout sélectionner
Dim ligne As Integer
Dim controle As String


Sub copie()

'Sélection de la feuille Extract
Sheets("extract").Select
Range("F2").Select
 
'Vérification du critère de sélection Equip V642
Do While ActiveCell.Value <> "" 'Boucle tant qu'on ne tombe pas sur une cellule vide
        If ActiveCell.Value Like "Equip V642*" Then
           
            ligne = ActiveCell.Row              'on stoke le numéro de ligne
            controle = Cells(ligne, 5).Value    'on stocke le numéro fi pour vérification des doublons
           
            'copie de la ligne (colonne A à F
            Range(Cells(ligne, 1), Cells(ligne, 6)).Copy
            Sheets("EquipV42").Activate
            Range("B9").Select
           
            'cas numero 1 : aucune ligne n'a déjà été exportée
            If ActiveCell.Offset(1, 0).Value = "" Then
                ActiveCell.Offset(1, 0).Select
               
                'controle doublon
                If Application.WorksheetFunction. _
                    CountIf(Range("F:F"), controle) = 0 Then
               
                    'Pas de doublon : collage de la ligne
                    ActiveSheet.Paste
                    Sheets("extract").Select
                    ActiveCell.Offset(1, 0).Select
                   
                    'Doublon détecté
                Else: GoTo doublon:
                End If
               
            'cas numero 2 : des lignes ont déjà été exportées
            Else
                Selection.End(xlDown).Select
                ActiveCell.Offset(1, 0).Select
               
                'controle doublon
                If Application.WorksheetFunction. _
                    CountIf(Range("F:F"), controle) = 0 Then
                   
                    'Pas de doublon : collage de la ligne
                    ActiveSheet.Paste
                    Sheets("extract").Select
                    ActiveCell.Offset(1, 0).Select
                   
                'Doublon détecté
                Else: GoTo doublon:
                End If
               
            End If
       
        'pas de Equip V642 dans la cellule
        Else
            ActiveCell.Offset(1, 0).Select
    End If
   
GoTo boucle:

doublon:
Sheets("extract").Select
ActiveCell.Offset(1, 0).Select
   
boucle:
Loop
   
End Sub


La macro doit être placée dans un module VBA. Il ne vous restera plus qu'à créer un bouton pour la lancer plus facilement.
Tenez-nous au courant.

@+
Image
Avatar de l’utilisateur
Sebastien
Administrateur
Administrateur
 
Messages: 5507
Enregistré le: 14 Fév 2005 19:17
Localisation: LILLE

Re: copier/coller certaines lignes en fonction d'un critère

Messagepar CS1 » 07 Mai 2012 08:16

Bonjour,

Un grand merci pour ce code qui fonctionne et qui correspond à ce dont j'ai besoin!!!
Ca faisait un moment que je butais dessus et ne voyant pas comment procéder, je commençais un peu à perdre espoir.

Encore merci :-D
CS1
No0b
No0b
 
Messages: 8
Enregistré le: 27 Avr 2012 12:23


Retourner vers Forum d'entraide : Bureautique

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités

  • Publicité