VBA excel Déplacer ligne sous condition

Résolu
flynn -  
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Actuellement j'ai un tableau qui fais a peu près 2000 ligne et plusieurs colonne en feuille1.

J'ai créer un commandbutton qui me permet quand je clique dessus de copier et coller intégralement mon tableau en feuille2.

Mon problème est que dans cette feuille2 je ne veux pas l ensemble de mon tableau. Je veux que lorsque en colonne T de la feuille1 quand il y a noté NON CONFORME je voudrais que cette ligne ne soit pas coller dans la feuille2

Je sais que ces possibles mais je n'arrive pas a trouvé le code

Merci d'avance

23 réponses

  • 1
  • 2
Résumé de la discussion

Pour copier un tableau Excel de Feuil1 vers Feuil2 tout en excluant les lignes où la colonne T indique NON CONFORME, il faut filtrer les données avant le transfert. Une solution utilise VBA avec AutoFilter sur le champ 20 pour masquer les lignes NON CONFORME, puis copie les données visibles dans Feuil2 à partir de A2 en remplaçant les données existantes. Le code cible Feuil1 comme source et Feuil2 comme destination, active le filtre sur la colonne T et colle les valeurs filtrées en A2. En cas de besoin, on peut ajuster la plage de données et remplacer la copie par une approche conditionnelle qui s'applique à d'autres colonnes ou à plusieurs feuilles.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Oui bien sur si tu tiens au VBA en supposant que ta feuille contenant les données se nomme Feuil1 et le transfert sur Feuil2, la colonne T contenant NON CONFORME est la dernière du tableau
    ce code copiera sur Feuil2 à partir de la cellule A2 tes données en remplaçant les données existantes

    Sub Sélectionne_exporte()
    Dim LigFin As Long
    Range([A1], [A5000].End(xlUp).Offset(0, 20)).AutoFilter
    Selection.AutoFilter Field:=20, Criteria1:= _
    "<>*NON CONFORME*"
    Range([A1], [A5000].End(xlUp).Offset(0, 20)).Copy
    Sheets("Feuil2").Select
    Range("A2").Select
    Selection.PasteSpecial Paste:=xlPasteValues
    Range("A2").Select
    Sheets("Feuil1").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    End Sub

    1
    1. flynn
       
      J'ai un message d erreur qui apparait: "La methode Autofiltrer de la classe range a échouer"
      0
  2. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Remplace le code par ce dernier voir si c'est ce que tu cherches

    Sub Sélectionne_exporte()
    Dim i As Variant
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Cells.Select
    Selection.Copy
    Sheets("Feuil2").Select
    Range("A1").Select
    ActiveSheet.Paste
    ActiveSheet.DrawingObjects.Delete
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    For i = 5000 To 2 Step -1
    If Cells(i, 20) = "NON CONFORME" Then Rows(i).EntireRow.Delete
    Next
    Range("A1").Select
    End Sub
    1
    1. flynn
       
      Oui c'est ce que je chercher par contre il me reste 1 NON CONFORME dans ma copie pourtant tous les autres on étais supprimé .

      Quel paramètres du code je dois modifié si je veux que quand je fais la copie si dans la colonne E feuil1 il y a noté NON pour pas qu il apparaisse dans la feuil 2 ?
      0
  3. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Salut,

    Que veux tu faire simplement copier ou déplacer les lignes qui en colonne T ne contiennent pas NON CONFORME.

    si c'est simplement copier il faudra mettre en colonne T un message pour ne pas recopier les même lignes
    0
    1. flynn
       
      Salut,

      Je voudrais copier dans une autre feuille toute les lignes qui en colonne T ne contiennent pas NON CONFORME pour avoir dans cette autre feuille un tableau épurée sans les lignes ou NON CONFORME apparait en colonne T
      0
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    et un simple filtre automatique pour masquer les non conformes ne te suffit pas ?
    Et si vraiment tu en veux une copie sur une autre feuille, une fois le filtre activé un simple copier-coller suffit, pas vraiment besoin de macro...
    eric
    0
    1. flynn
       
      J'ai deja un filtre automatique mais je voudrais que mon tableau ce copie automatiquement dans la feuille 2 lorsque l'on clique sur un bouton sans les NON CONFORMITE noté en colonne T.

      Actuellement j'ai un bouton de commande avec un code derrière qui me permet de copier tous mon tableau dans la feuille 2 mais je n arrive pas a rajouter la condition sur les NON CONFORME.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    pourquoi tu as mis "tes données en remplaçant les données existantes"

    pour savoir si les données de la feuille 2 sont remplacées par les données exportées ou si les données exportées sont collées à la suite des données existantes

    regarde le fichier joint rapidement fait

    https://www.cjoint.com/?BDAlZMz3pRt
    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    0
    1. flynn
       
      Sa fonctionne bien mais es que c'est possible que cette nouvelle feuille garde la même mise en page que celle ou on a fais la copie (couleur,format etc...) ?

      Dans la nouvelle feuille (feuil2) il reste les lignes ou étais notés NON CONFORME peux t on les supprimé automatiquement ?
      0
  7. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re
    sur ta feuil1, dans une colonne hors de ton tableau, la U par exemple en U1 tu saisis 1 en U2 tu saisis 2 et tu incrémentes ces deux cellules vers le bas ce qui généreras une série.
    active le code et donne moi le numéro de la liste correspondant à la série incrémentée qui ne s'éfface pas
    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    0
    1. flynn
       
      C'est le numéro 89 qui ne s efface pas
      0
  8. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    regarde la façon don NON CONFORME à été saisi, il doit y avoir un espace qui doit trainer

    dans le code déplace cette ligne et met là avant END Sub cela évitera le scintillement pendant le déroulement du code
    Application.ScreenUpdating = True

    Sub Sélectionne_exporte()
    Dim i As Variant
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Cells.Select
    Selection.Copy
    Sheets("Feuil2").Select
    Range("A1").Select
    ActiveSheet.Paste
    ActiveSheet.DrawingObjects.Delete
    Application.ScreenUpdating = True
    For i = 5000 To 2 Step -1
    If Cells(i, 20) = "NON CONFORME" Then Rows(i).EntireRow.Delete
    Next
    Range("A1").Select
    Application.DisplayAlerts = True
    End Sub

    0
    1. flynn
       
      Ok merci effectivement NON CONFORME étais mal saisi.

      Es que tu pourrais m'expliquer quel paramètre du code il faut modifier si dans ma colonne E feuil 1 il y a noté NON pour pas que ce NON ce copie dans la feuil 2 (même principe que pour le NON CONFORME) ?
      0
  9. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Le VBA est un code très précis, il faut au départ connaitre tous les paramètres pour écrire un code.
    Dans le cas présent je t'ai écrit plusieurs codes
    Le premier copierait uniquement les lignes ne contenant pas NON CONFORME
    Comme tu voulais également copier les mises en forme, le deuxième code copie la feuil1 sur la feuil2, filtre les données pour supprimer les lignes NON CONFORME
    Si au départ tu ne souhaites pas exporter certaines lignes il faut revoir le code mais pour cela explique moi en détail tous ce que tu veux faire pour ne pas écrire des codes inutilement mais surtout écrire un code cohérent
    0
    1. flynn
       
      A d'accord je pensais que l'on pouvais le modifier facilement

      Alors en plus des NON CONFORME je voudrais que lorsque en colonne D il y a noté NON la ligne ne se copie pas (2 choix possible soit OUI soit NON), en colonne J si la case est vide la ligne ne se copie pas,
      et en colonne L si 1 la ligne ne se copie pas ( 2 choix possible 0 ou 1 )
      0
    2. flynn
       
      Es que ce code est réalisable ?
      0
    3. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
       
      Oui certainement, mais en résumé c'est l'une ou l'autre des conditions ou faut il les trois conditions réunies pour ne pas copier la ligne

      exemple si en D il y a NON on ne copie pas la ligne même si J n'est pas vide et si en L il y a 0 ou faut il qu'il y ait NON en D, vide en J et 0 en L
      0
    4. flynn
       
      En faite si en D il y a NON on ne copie pas ou si en J la cellule est vide on ne copie pas ou si en L il y a 1 on ne copie pas c'est l 'une des 3 conditions
      0
  10. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Le code est plus complexe et demande un peu de temps, c'est tout à fait faisable et je te prépare un code dès que j'ai un moment dans la journée
    0
    1. flynn
       
      Ok pas de problème merci d'avance
      0
    2. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
       
      Tu peux me donner les limites des colonne de ton tableau s'il te plait, exemple de la colonne A à la colonne T
      Quel est la colonne ou toutes les cellules de ton tableau sont renseignées c'est à dire sans cellule vide de la première ligne à la dernière
      0
    3. flynn
       
      Mon tableau va de la colonne A à la colonne U,

      La colonne F est entièrement renseignées
      0
  11. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Regarde ce code, il copie les données de la feuille nommée Feuil1 sur la feuille nommée Feuil2

    Sub Exporte()
    Dim c As Range
    Application.ScreenUpdating = False
    For Each c In Range([F2], [F5000].End(xlUp))
    If c.Offset(0, -2) = "NON" Or c.Offset(0, 4) = "" Or c.Offset(0, 6) <> 1 _
    And c.Offset(0, 6) <> "" Then c.Offset(0, 16) = 1
    Next
    Range([A1], [F5000].End(xlUp).Offset(0, 16)).AutoFilter Field:=22, Criteria1:="1"
    Range([F1].Offset(0, -5), [F5000].End(xlUp).Offset(0, 15)).Copy
    Sheets("Feuil2").Select
    Range("A1").PasteSpecial Paste:=xlPasteFormats
    Range("A1").PasteSpecial Paste:=xlPasteValues
    Range("A2").Select
    Sheets("Feuil1").Select
    Selection.AutoFilter
    Columns("V:V").Clear
    Range("A2").Select
    Application.ScreenUpdating = True
    End Sub
    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    0
    1. flynn
       
      J'ai un message d'erreur qui me dit que cette ligne a échouer: la méthode AutoFilter

      Range([A1], [F5000].End(xlUp).Offset(0, 16)).AutoFilter Field:=22, Criteria1:="1"

      Pourquoi dans le code il y a marquer feuil3 ?
      0
    2. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
       
      Exact, je fais les tests sur la feuille3.
      J'ai rectifié le code dans le post précédent, recopie et teste le, mais il n'y a acune raison de disfonctionnement
      a part que tu ais déjà activé le filtre sur ta feuille. Si c'est le cas supprime le pour tester
      si tu souhaites le laisser actif sur ta feuille je devrai en tenir compte dans le code
      0
    3. flynn
       
      Y a toujours le même problème sur la même ligne, et je n'est pas activé le filtre sur ma feuille
      0
  12. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Bizarre, tu n'as pas te protection sur ta feuille ?

    Peux tu m'envoyer ton fichier sans notes confidentielles que tu peux effacer, soit dans un post ou en message privé (pour ça clic sur mon post et message privé) que je vois sa structure avec ce lien

    https://www.cjoint.com/
    0
    1. flynn
       
      Je ne comprend pas comment il faut faire pour faire 1 message privé ?
      0
  13. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Tu clic sur le lien du post précédent/puis sur parcourir pour sélectionner ton fichier/clic sur créer le lien.
    Un lien sera généré il suffit de faire un copier coller dans un post.
    Si tu veux le me l'envoyer en message privé, clic sur mon pseudo en haut à gauche de chacun de mes post Mike-31, clic sur messge privé tu mets un titre au message et tu colles le lien généré
    0
    1. flynn
       
      http://cjoint.com/?3DBpKQo6Bgs

      voici le lien
      0
  14. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Récupère ton fichier, il est possible d'insérer l'enregistrement automatique après le transfert, ou la protection de la feuille si elle est importante

    https://www.cjoint.com/?BDBsKTl7WiJ
    0
    1. flynn
       
      Il reste toujours les NON en D et les cellules vides en J après exportation des données
      0
  15. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    remplace le code par celui ci, en Fait c'est colonne D ou les données sont saisies avec la première lettre majuscule alors que dans le code le mot était en Majuscule NON
    j'ai réctifié le code pour prendre en compte Non. s'il y a des possibilités de saisir non ou NON on peu l'inclure dans le code. pour les colonne J et L il ne devrait pas y avoir de problème

    Sub Exporte()
    Dim c As Range
    Application.ScreenUpdating = False
    Worksheets("Feuil2").Select
    Range([A2], [F5000].End(xlUp).Offset(1, 15)).ClearContents
    Worksheets("Feuil1").Select
    For Each c In Range([F2], [F5000].End(xlUp))
    If c.Offset(0, -2) = "Non" Or c.Offset(0, 4) = "" Or c.Offset(0, 6) <> 1 _
    And c.Offset(0, 6) <> "" Then c.Offset(0, 16) = 1
    Next
    Range([A1], [F5000].End(xlUp).Offset(0, 16)).AutoFilter Field:=22, Criteria1:="1"
    Range([F1].Offset(0, -5), [F5000].End(xlUp).Offset(0, 15)).Copy
    Sheets("Feuil2").Select
    Range("A1").Select
    ActiveSheet.Paste
    Range("A2").Select
    Sheets("Feuil1").Select
    Selection.AutoFilter
    Columns("V:V").Clear
    Application.ScreenUpdating = True
    Range("A2").Select
    MsgBox "Données ont été correctement transférées"
    End Sub
    0
    1. flynn
       
      Désoler mais ton code ne fonctionne pas quand je clique sur le bouton ils me disent que les données ont été exporté et quand je vais voir dans la feuille 2 il reste des Non en colonne D et des 1 en colonne J
      0
  16. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re

    je viens de recontrôler le fichier tout me semble normal, j'ai compté les lignes à transférer de la feuille1, pour la colonne D il y a 55 Non, colonne J 669 cellules vides et colonne L 1186 cellules ne contenant pas la valeur 1.
    après le transfert le nombre de lignes correspond exactement aux valeurs de la première feuille soit 1099 lignes de données transférées, 1 seule colonne D impose le transfert (c'est la ligne 1171), 462 en colonne J et 736 en colonne L ce qui nous fait bien 1099 lignes.

    tu utilises bien de ce fichier

    https://www.cjoint.com/?BDCvJOQ3GG0
    0
    1. flynn
       
      Oui j'utilise bien ce fichier mais quand je clique sur le bouton il me dise données bien exportés mais quand je vais voir dans la feuille 2 il reste des Non dans en colonne D, il reste des cases vides en J et des 1 en L
      0
  17. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    pourtant ?

    les données doivent être copiées pas coupées, c'est bien cela nous parlons le même langage !

    regarde ce fichier,

    https://www.cjoint.com/?BDDlIXHQXaK
    0
    1. flynn
       
      Elles doivent être copier mais pas toutes les lignes quand il y a Non on copie pas dans la feuille 2 ou si y a 1 copie pas ou si vide on ne copie pas c'est ligne dans la feuille 2 alors que actuellement il reste des Non , des 1 etc.. dans la feuille 2 après copie
      0
  18. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    je crois qu'on ne parle pas de la même chose.

    Colonne D si cellule contient Non on copie

    Colonne J si cellule vide on copie

    Colonne L si cellule contient 1 on ne copie pas

    répond à ces 3 questions
    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    0
    1. flynn
       
      Pour les 2 premières ces l'inverse:

      Colonne D si cellule contient Non on ne copie pas

      Colonne J si cellule vide on ne copie pas

      Colonne L ces bon, si cellule contient 1 on ne copie pas
      0
  19. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    0
    1. flynn
       
      Cela ne fonctionne toujours pas quand je clique sur le bouton exporter les données, il y a autant de ligne en feuille 1 qu en feuille 2, aucune ligne n'a étais supprimé
      0
  20. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Alors il y a un problème dans ton fichier ou dans tes explications.
    en début de discussion tu écrivais si une des trois conditions est vrai on copie

    dons si en colonne D on rencontre une valeur différente de Non (donc contient Oui ou vide on copie)

    en J si la cellule est différente de rien (donc contient du texte on copie)

    en L si la cellule est différente de 1 (donc contient 0 ou vide on copie)

    j'ai parcouru ton tableau et sur toutes tes lignes au moins une des conditions est vrai
    ou en D il y a Non ou vide, en J contient du texte et en L soit vide soit 0 mais chaque ligne répond à un critère à moins que les cellules vides des colonnes D et L ne se copient pas mais cela n'a pas été précisé ?
    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    0
    1. flynn
       
      En faite si par exemple en ligne ...: il y a en colonne D Non mais qu il y a en colonne J du texte et en colonne L un 0 on ne copie pas

      On copie juste quand en colonne D il y a Oui, en colonne J du texte et en colonne L un 0 il faut que ces 3 conditions soit réuni pour copier
      0
  21. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    C'est différent de ce que tu as écrit plus haut, je revois le code
    0
    1. flynn
       
      Ok merci
      0
  • 1
  • 2