VBA excel Déplacer ligne sous condition
Résolu
flynn
-
Mike-31 Messages postés 18405 Date d'inscription Statut Contributeur Dernière intervention -
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
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
A voir également:
- Déplacer ligne excel sous condition
- Déplacer colonne excel - Guide
- Excel cellule couleur si condition texte - Guide
- Aller à la ligne excel - Guide
- Liste déroulante excel - Guide
- Partager photos en ligne - Guide
23 réponses
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
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
flynn
J'ai un message d erreur qui apparait: "La methode Autofiltrer de la classe range a échouer"
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
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
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
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
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
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
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
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.
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.
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
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
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
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
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 )
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 )
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
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
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.
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.
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
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
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/
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/
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é
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é
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
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
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
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
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
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
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
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
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.
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.
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.
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.