VBA excel Déplacer ligne sous condition

Résolu/Fermé
flynn - 25 avril 2012 à 16:56
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 - 2 mai 2012 à 15:22
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
A voir également:

23 réponses

Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
26 avril 2012 à 11:13
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
J'ai un message d erreur qui apparait: "La methode Autofiltrer de la classe range a échouer"
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
26 avril 2012 à 14:25
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
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
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
25 avril 2012 à 19:52
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
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 26/04/2012 à 09:55
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
Modifié par Mike-31 le 26/04/2012 à 11:54
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
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
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
Modifié par Mike-31 le 26/04/2012 à 14:45
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
C'est le numéro 89 qui ne s efface pas
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
26 avril 2012 à 15:14
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
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
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
26 avril 2012 à 15:33
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
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
Es que ce code est réalisable ?
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
26 avril 2012 à 18:09
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
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
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
27 avril 2012 à 10:27
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
Ok pas de problème merci d'avance
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
27 avril 2012 à 10:46
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
Mon tableau va de la colonne A à la colonne U,

La colonne F est entièrement renseignées
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
Modifié par Mike-31 le 27/04/2012 à 14:46
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
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
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
27 avril 2012 à 14:52
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
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
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
27 avril 2012 à 15:19
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
Je ne comprend pas comment il faut faire pour faire 1 message privé ?
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
27 avril 2012 à 15:35
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
http://cjoint.com/?3DBpKQo6Bgs

voici le lien
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
27 avril 2012 à 18:36
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
Il reste toujours les NON en D et les cellules vides en J après exportation des données
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
27 avril 2012 à 19:52
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
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
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
28 avril 2012 à 21:36
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
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
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
29 avril 2012 à 11:36
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
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
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
Modifié par Mike-31 le 29/04/2012 à 22:12
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
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
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
30 avril 2012 à 17:30
0
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
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
Modifié par Mike-31 le 30/04/2012 à 21:59
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
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
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
1 mai 2012 à 13:04
Re,

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