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

Excel Discussion :

copier/coller cellule sous condition + élimine double


Sujet :

Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 10
    Points
    10
    Par défaut copier/coller cellule sous condition + élimine double
    Bonjour,

    Je souhaiterai avoir un code qui me permette de copier coller les cellules de la colonne A si et seulement si la colonne B indique une erreur.
    Dans ce cas, on copie la cellule en A et la colle dans une feuille 2.

    Complication supp.: ma colonne A a des valeurs doubles et je souhaiterai que les valeurs collés dans ma feuille 2 n'apparaissent que une fois tout en les conservant dans ma première feuille.

    Merci de m'aider.

  2. #2
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    As-tu déjà un bout de code? Où bloques-tu? As-tu une erreur ou ne sais-tu pas comment t'y prendre?

    Pour vérifier s'il y a une erreur, interesse-toi à la fonction isError.
    Pour copier-coller des données, utilise l'enregistreur de macro et adapte ton code.
    Quant à l'élimination des doublons, je pense que tu trouveras matière dans d'autres sujets du forum, mais tu peux, par exemple utiliser la fonctionnalité porposée par Excel (données > supprimer les doublons) et là aussi utiliser l'enregistreur de macro.

    Une fois que tu auras essayé tout cela, reviens vers nous et dis-nous si tout se passe bien
    Bon courage !

  3. #3
    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
    En plus de ce qu'à écrit Riaolle :

    Citation Envoyé par cgomesfe Voir le message
    Je souhaiterai avoir un code qui me permette de copier coller les cellules de la colonne A si et seulement si la colonne B indique une erreur.
    Dans ce cas, on copie la cellule en A et la colle dans une feuille 2.
    Pour scruter toutes les cellules : https://msdn.microsoft.com/fr-fr/lib.../gg264596.aspx
    Pour le test : https://msdn.microsoft.com/fr-fr/lib.../gg251599.aspx
    Pour la copie : https://msdn.microsoft.com/fr-fr/lib.../ff837760.aspx

    Complication supp.: ma colonne A a des valeurs doubles et je souhaiterai que les valeurs collés dans ma feuille 2 n'apparaissent que une fois tout en les conservant dans ma première feuille.
    Fais un test sur le résultat d'un Find pour savoir si ta valeur existe déjà dans la feuille destination.
    https://msdn.microsoft.com/fr-fr/lib.../ff839746.aspx
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    J'ai essayé ce code, mais cela ne semble pas marcher.

    Sub nouveauté()
    Dim i As Integer
    i = Cells(1, 2)
    For Each i In Sheets("CleanData").Range("B" & Rows.Count).End(xlUp).Row
    If IsError(i.Value) Then
    ActiveSheets.Cells(ActiveRow, "A").Select
    Selection.Copy
    Sheets("Classement").Activate
    Range("D" & Rows.Count).End(xlUp).Select
    Selection.PasteSpecial Paste:=xlPasteValues
    End If
    Exit For
    Next i

    Sheet("Classement").Range("D").RemoveDuplicates , Header:=xlYes

    End Sub[/INDENT]

  5. #5
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Bonjour!
    Que veut dire "cela ne marche pas"? As-tu un message d'erreur? Si oui lequel? Si non, que se passe-t-il? Le code tourne, mais rien ne se passe? Le code tourne, mais ne fait pas ce que tu veux? Il faut que tu nous donnes plus de précisions si tu veux qu'on t'aide.

    Néanmoins en regardant ton code :
    Tu veux faire une boucle sur des cellules (si j'ai bien compris), mais tu dimensionne i commen un entier (Integer) et ensuite tu mets des expressions qui sortent des entiers et parfois d'autres qui sont propores à une cellule. Là, Excel est perdu
    J'ai l'impression que dans ton cas, c'est plus simple de faire une boucle sur les lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim i As Integer
    For i = 1 To Sheets("CleanData").Range("B" & Rows.Count).End(xlUp).Row
        If IsError(Range("B" & i) Then
        ActiveSheets.Cells("A" & i).Copy      'Evite les Select
        Sheets("Classement").Range("D" & Rows.Count).End(xlUp).PasteSpecial Paste:=xlPasteValues
     End If
    'Là, si tu mets Exit For, tu sors de la boucle For dès le premier i, donc tu ne fais jamais ta boucle.
    Next i
    Je ne pense pas qu'on puisse écrire :
    J'écris toujours:
    Et si tu veux utiliser la lettre, utilise la syntaxe suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A1")    ' avec une variable:
    Range("A" & i)
    Evite (si possible) les Select et Activate, ça donne souvent des erreurs difficiles à gérer.

    Tu mets un "Exit For" juste avant le Next i. Exit For veut dire que tu sors de la boucle, donc, en fait, ici tu arrêtes ta boucle juste après i=1.

    J'espère que tu pourras déjà un peu avancer comme ça


    Autre précision liée au forum : quand tu écris du code, utilise les balises code. Il faut cliquer sur le bouton # et écrire (ou souvent plutôt copier-coller) ton code entre les balises. C'est plus simple à lire.

  6. #6
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    J'ai oublié autre chose : ne donne pas un nom avec des caractères "spéciaux" à ton sub, plutôt que "nouveauté" utilise "nouveaute".

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Merci de ta réponse! Je suis débutante sur l'outil. C'est pour ça qu'il y a autant de fautes en fait.


    J'ai réadapté le code comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub nouveaute()
    Dim i As Variant
    For i = 1 To Sheets("CleanData").Range("B" & Rows.Count).End(xlUp).Row
        If IsError(Range("B" & i)) = True Then
        ActiveSheets.Cells("A" & i).Copy
        Sheets("Classement").Range("D" & Rows.Count).End(xlUp).PasteSpecial Paste:=xlPasteValues
        End If
    Next i
     
    End Sub
    Mais il y a une erreur au niveau de la ligne ActiveSheets. Dans la fenêtre espion ça me met que la valeur est vide.

    Merci

  8. #8
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    C'est peut-être ma faute Il y a un "s" qui s'est glissé en trop dans le code, essaie avec ActiveSheet plutôt que ActiveSheets et dis-moi si ça marche

    Edit:
    et
    plutôt que

  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
    Pour les variables référent un numéro de ligne, je conseille de prendre l'habitude de les déclarer de type "Long" plutôt que "Integer", étant donné que le nombre de ligne peut (potentiellement) dépasser 32 000.
    C'est vrai que dans 99% des cas, Integer suffit, mais pour le 1% restant, ça fait un bug assez vicieux à régler. Donc, autant prendre l'habitude, ça ne mange pas de pain.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  10. #10
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    J'ai fait la correction mais la procédure ne me donne pas le résultat que je veux.
    En fait, elle ne me colle que la dernière ligne sur la colonne E. Alors que je voudrais coller à las suite toutes les cellules en A dont la cellule B est une erreur.

    J'ai cherché d'autres combinaisons mais sans succès

    C'est gentil de m'aider. Après ça j'irai prendre des cours.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub nouveaute()
    Dim i As Long
    For i = 1 To Sheets("CleanData").Range("B" & Rows.Count).End(xlUp).Row
        If IsError(Range("B" & i)) = True Then
        ActiveSheet.Range("A" & i).Copy
        Sheets("Classement").Range("E" & Rows.Count).End(xlUp).PasteSpecial Paste:=xlPasteValues
        End If
    Next i
     
    End Sub

  11. #11
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Quand tu dis "B est une erreur", il y a quoi exactement dans la cellule B?

    Peux-tu essayer avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If isError(Range("B" & i).Value) then ...
    Sinon, par soucis de simplification du code : au lieu de copier-coller la valeur comme tu le ferais "à la main" sur Excel, tu peux simplement écrire dans la colonne E la valeur de la colonne B (comme tu le ferais littéralement "à la main", sur un bout de papier ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Classement").Range("E" & Rows.Count).End(xlUp).Value = ActiveSheet.Range("A" & i).Value

  12. #12
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Dans ma colonne B il y a une formule RechercheV qui recherche A dans un tableau dans "Classement".
    Si la formule ne me trouve pas la valeur en A, ça veut dire que c'est nouveau que ça pas été encore recensé dans mon classement.

    J'ai essayé ta proposition mais ça a pas fonctionné.
    En revanche j'ai essayé autres chose qui marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub nouveaute()
    Dim i As Long
    For i = 1 To Sheets("CleanData").Range("B" & Rows.Count).End(xlUp).Row
        If IsError(Range("B" & i)) = True Then
        ActiveSheet.Range("A" & i).Copy
        Sheets("Classement").Range("E" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
        End If
    Next i
     
     
    End Sub

    Maintenant il ne me reste plus qu'à éliminer les doublons. Est-ce que tu pourrais m'aider ? J'ai essayé ça mais ça marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub nouveaute()
    Dim i As Long
    For i = 1 To Sheets("CleanData").Range("B" & Rows.Count).End(xlUp).Row
        If IsError(Range("B" & i)) = True Then
        ActiveSheet.Range("A" & i).Copy
        Sheets("Classement").Range("E" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
        End If
    Next i
    
    Sheet("Classement").Range("E").RemoveDuplicates , Header:=xlYes
    
    End Sub
    Merci

  13. #13
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    En fait quand tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Classement").Range("E" & Rows.Count).End(xlUp)
    Il remonte à la première ligne non vide, du coup à chaque fois, tu copiais sur la première ligne non vide, donc tu copiais toujours sur la même ligne. Il faudrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Classement").Range("E" & Rows.Count).End(xlUp) + 1
    ou ce que tu as proposé.

    Pour l'élimination des doublons. Que veut dire "ça ne marche pas"? Mesage d'erreur? Rien ne se passe? Mais essaie déjà cela : tu as oublié un "s" à Sheets("Classement").

  14. #14
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Haa d'accord merci de l'explication!

    Bon alors même avec le s j'ai un message d'erreur sur cette ligne. Dans la fenêtre Espion, rien ne s'affiche dans valeur je sais pas si ça a un lien.

  15. #15
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Quand tu veux faire référence à une colonne, il faut écrire :
    Et pas seulement
    Ainsi, ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range("E:E").RemoveDuplicates Columns:=1, Header:=xlYes
    marche chez moi

    N'oublie pas d'ajouter l'élement Columns:=1

  16. #16
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Oui merci c'est fantastique ça marche!

    Encore merci pour tout!!

  17. #17
    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 cgomesfe Voir le message
    J'ai fait la correction mais la procédure ne me donne pas le résultat que je veux.
    En fait, elle ne me colle que la dernière ligne sur la colonne E. Alors que je voudrais coller à las suite toutes les cellules en A dont la cellule B est une erreur.
    Tu fais tourné ton programme en pas-à-pas.
    A chaque ligne, tu vérifies l'effet du code, par exemple en allant regarder le contenu des variables dans la fenêtre de variables locales.
    Ca te permettra de localiser quel élément ne fait pas ce que tu souhaites.
    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. Copier des cellules sous condition et avec des reserves
    Par adibou37 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/03/2017, 16h16
  2. [XL-2013] Copier/Coller valeurs sous plusieurs conditions+sommes
    Par Mél3790 dans le forum Excel
    Réponses: 15
    Dernier message: 13/05/2016, 13h21
  3. [XL-2013] Copier plusieurs cellules sous condition et coller uniquement ces cellules
    Par Big75 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/11/2015, 21h23
  4. copier/coller lignes sous condition colonne vers autre feuille
    Par juniorglobal08 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/05/2009, 17h29
  5. copier des lignes sous conditions (dans 2 colonnes différentes)
    Par olive08 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 12/10/2007, 14h44

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