Copier lignes avec condition dans autre feuille
Dernière réponse : dans Programmation
Bonjour,
Je cherche à copier les lignes d'un tableau contenant une valeur dans la colonne 3, sur une autre feuille, et supprimer les lignes vides sur cette dernière.
Concrètement : un tableau des règlements clients, recopiés sur une feuille banque où on trouvera que les règlements "cb"par exemple.
je me suis inspirée d'exemples, ce qui me donne :
Mais il ne se passe absolument rien quand je lance la macro depuis excel.
Avec ou sans la partie qui efface les lignes vierges, c'est pareil.
Ma feuille origine est "Sheet1", la feuille de destination "Sheet2".
Après des heures de tests et essais divers, je n'ai vraiment plus aucune idée, dans la mesure où en plus je débute...
Merci de votre aide !
Je cherche à copier les lignes d'un tableau contenant une valeur dans la colonne 3, sur une autre feuille, et supprimer les lignes vides sur cette dernière.
Concrètement : un tableau des règlements clients, recopiés sur une feuille banque où on trouvera que les règlements "cb"par exemple.
je me suis inspirée d'exemples, ce qui me donne :
Option Explicit Public Sub Copyreglements() ' COPIE DES LIGNES DESIREES DANS LES FEUILLES DE CALCUL DEDIEES Dim Rw As Range Dim Ligne As Long Dim f_destination As Worksheet Set f_destination = Worksheets("Sheet2") ' Sélectionne l'ensemble des données (utile pour qu'Excel ne "réfléchisse" pas sur les 65000 lignes) Sheets("Sheet1").Select ActiveCell.SpecialCells(xlLastCell).Select Range(Selection, Cells(1)).Select ' Boucle qui va passer sur chaque ligne de la sélection afin de déterminer si des lignes contiennent le flag voulu ' puis copie dans une deuxième feuille de calcul For Each Rw In Selection.Rows Ligne = Rw.Row If Rw.Cells(1, 3).Value = "cb" Then Rw.Copy Worksheets("Sheet2").Cells(Ligne, 1).EntireRow End If Next Rw ' Supression des lignes vierges dans les feuilles de calcul récemment constituées Dim derli Dim r Sheets("Sheet2").Activate With ActiveSheet.UsedRange derli = .Row + .Rows.Count - 1 End With Application.ScreenUpdating = False For r = derli To 1 Step -1 If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete Next r End Sub
Mais il ne se passe absolument rien quand je lance la macro depuis excel.
Avec ou sans la partie qui efface les lignes vierges, c'est pareil.
Ma feuille origine est "Sheet1", la feuille de destination "Sheet2".
Après des heures de tests et essais divers, je n'ai vraiment plus aucune idée, dans la mesure où en plus je débute...
Merci de votre aide !
Autres pages sur : copier lignes condition feuille
Lassé par la pub ? Créez un compte
Hum, intéressant. Un mélange de codes très bons et très mauvais. On voit le débutant éclairé qui cherche à bien faire. C'est donc avec plaisir que je vais t'aider.
Pour commencer, a chaque fois que tu as un des mots suivants, tu as fait une connerie : Select, Selection, Activate, ActiveTruc.
Lignes 10, 11, tu définies ta feuille de destination. C'est bien. Pourquoi ne pas t'en servir ? Définie de la même façon ta feuille d'origine et utilise-là aussi.
Ligne 14, tu sélectionnes une feuille (pourquoi la sélectionner ?)
Ligne 15, tu considères la cellule active (ActiveCell). Oui mais comment savoir que tu es sur la bonne cellule ?
Sinon, c'et vraiment moche, le coup de "je-copie-avec-des-trous-que-je-supprimerais-après".
Que dis-tu de ça ?
Pour commencer, a chaque fois que tu as un des mots suivants, tu as fait une connerie : Select, Selection, Activate, ActiveTruc.
Lignes 10, 11, tu définies ta feuille de destination. C'est bien. Pourquoi ne pas t'en servir ? Définie de la même façon ta feuille d'origine et utilise-là aussi.
Ligne 14, tu sélectionnes une feuille (pourquoi la sélectionner ?)
Ligne 15, tu considères la cellule active (ActiveCell). Oui mais comment savoir que tu es sur la bonne cellule ?
Sinon, c'et vraiment moche, le coup de "je-copie-avec-des-trous-que-je-supprimerais-après".
Option Explicit Public Sub CopieReglements() ' // Copie des lignes desirées dans les feuilles de calcul dédiées Dim PlageUtile As Range Dim Ligne As Range Dim Origine As Worksheet Dim Destination As Worksheet Dim LigneDestination As Integer Set Origine = Worksheets("Feuil1") Set Destination = Worksheets("Feuil2") Set PlageUtile = Range(Origine.Cells(1, 1), Origine.Cells(1, 1).SpecialCells(xlLastCell)) MsgBox "Attention, nous allons travailler sur la plage " & PlageUtile.Address LigneDestination = 1 For Each Ligne In PlageUtile.Rows If Ligne.Cells(1, 3).Value = "cb" Then Ligne.Copy Destination.Cells(LigneDestination, 1) LigneDestination = LigneDestination + 1 End If Next End Sub
Que dis-tu de ça ?
Bonjour Zeb,
Je cherche une autre méthode simple pour un besoin simple :
je veux copier une plage de cellule allant de A2 jusqu'à l'intersection de la colonne D et de la dernière ligne utilisée.
Et coller le tout en A2 d'une autre feuille.
je bute sur la sélection de la plage de cellule, pour le moment j'ai fait ça :
mais je copie toute la ligne, alors que je ne veux que les 4 premières colonnes.
je sais que "specialscells(xlastcell) n'est pas adapté, mais je n'arrive pas à trouver la bonne syntaxe.
si tu as encore le temps, ton aide sera appréciée une fois de plus.
Je cherche une autre méthode simple pour un besoin simple :
je veux copier une plage de cellule allant de A2 jusqu'à l'intersection de la colonne D et de la dernière ligne utilisée.
Et coller le tout en A2 d'une autre feuille.
je bute sur la sélection de la plage de cellule, pour le moment j'ai fait ça :
Dim PlageUtile As Range Dim Origine As Worksheet Dim Destination As Worksheet Set Origine = Worksheets("liste") Set Destination = Worksheets("exportation") Set PlageUtile = Range(Origine.Cells(2, 1), Origine.Cells(2, 4).SpecialCells(xlLastCell)) PlageUtile.Copy Destination.Cells(2, 1)
mais je copie toute la ligne, alors que je ne veux que les 4 premières colonnes.
je sais que "specialscells(xlastcell) n'est pas adapté, mais je n'arrive pas à trouver la bonne syntaxe.
si tu as encore le temps, ton aide sera appréciée une fois de plus.
j'ai ce code qui fonctionne, mais je pense qu'il y a mieux non ?
Option Explicit Public Sub copiedecellules() Dim PlageUtile As Range Dim Origine As Worksheet Dim Destination As Worksheet Set Origine = Worksheets("liste-orig") Set Destination = Worksheets("internet") Set PlageUtile = Range([A2], [D65635].End(xlUp)) PlageUtile.Copy Destination.Cells(2, 1) End Sub
Salut Emicoma,
Evite de dire "Salut Zeb", imagine que Mike (Salut Mike
) ait une solution, il pourrait ne pas se sentir concerné.
La soluce de Mike est excellente.
Mais attention à ceux que tu veux vraiment. La dernière ligne vide et la prochaine ligne vide, ce n'est pas la même chose. Là, je fais un topo : http://www.presence-pc.com/forum/ppc/Programmation/exce... . Le tout est de savoir si tu as le droit d'avoir des lignes vides ou pas dans ton bloc.
Quant à ton code http://www.presence-pc.com/forum/ppc/Programmation/copi... , il est très laid : Ligne 9, tu te sers de la feuille courante, pas du tout de ce que tu as mis dans Origine.
Plutôt que [A2], écris Origine.Range("A2").
Evite de dire "Salut Zeb", imagine que Mike (Salut Mike
) ait une solution, il pourrait ne pas se sentir concerné.
La soluce de Mike est excellente.
Mais attention à ceux que tu veux vraiment. La dernière ligne vide et la prochaine ligne vide, ce n'est pas la même chose. Là, je fais un topo : http://www.presence-pc.com/forum/ppc/Programmation/exce... . Le tout est de savoir si tu as le droit d'avoir des lignes vides ou pas dans ton bloc.
Quant à ton code http://www.presence-pc.com/forum/ppc/Programmation/copi... , il est très laid : Ligne 9, tu te sers de la feuille courante, pas du tout de ce que tu as mis dans Origine.
Plutôt que [A2], écris Origine.Range("A2").
Bien noté.
Ce que je souhaite, c'est sélectionner les lignes utilles. normalement je n'ai pas de lignes vides, mais je pourrais l'envisager.
Dans ce cas là, il faudrait sélectionner la dernière ligne vide ? comment ?
j'ai modifié le code ainsi, c'est correct ?
Ce que je souhaite, c'est sélectionner les lignes utilles. normalement je n'ai pas de lignes vides, mais je pourrais l'envisager.
Dans ce cas là, il faudrait sélectionner la dernière ligne vide ? comment ?
j'ai modifié le code ainsi, c'est correct ?
Option Explicit Public Sub copiedecellules() Dim PlageUtile As Range Dim Origine As Worksheet Dim Destination As Worksheet Set Origine = Worksheets("liste-orig") Set Destination = Worksheets("internet") Set PlageUtile = Origine.Range([A2], [D2].End(xlDown)) PlageUtile.Copy Destination.Cells(2, 1) End Sub
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumCopier des lignes automatiquement, sous condition...
- ForumCopier des lignes sous conditions
- Forummacro copier ligne dans autre onglet si condition respectée
- Forummacro excel 2010 ( copier une série de donnée changeante dans une feuille sur une ligne)
- ForumCopie de lignes sous trois conditions à partir de 2 feuilles
- ForumCopier une feuille excel dans un autre classeur apres filtrage
- ForumCopier&coller des cellules d'1 fichier à 1autre si condition remplie
- ForumCopier si condition 1remplie et coller sur un autre classeur si condition2 rempl
- ForumCopier coller lignes non masqué vers une autre feuille
- Voir plus