VBA-Copier/couper entre deux feuilles

Bonjour,

J'ai actuellement un code qui me permet de copier/couper une ligne entière de la feuille "Outillage" à la feuille "Scrap", à condition qu'il y est le mot "Scrap" dans la colonne F de la feuille "Outillage" et ce code s'active après enregistrement.

Sub Scrap()

Dim Lig As Long

Dim Col As String

Dim NbrLig As Long

Dim NumLig As Long

Sheets("Scrap").Activate ' feuille de destination

Col = "F" ' colonne de la donnée non vide à tester

NumLig = 0

With Sheets("Outillage") ' feuille source

NbrLig = .Cells(65536, Col).End(xlUp).Row

For Lig = 1 To NbrLig

If .Cells(Lig, Col).Value = "SCRAP" Then

.Cells(Lig, Col).EntireRow.Cut

NumLig = NumLig + 1

Cells(NumLig, 1).Select

ActiveSheet.Paste

End If

Next

End With

End Sub

Or j'ai un problème c'est que les lignes se copie/coupe sur des lignes déjà remplit, j'aimerai que les lignes se copient sur la dernière ligne vide de la feuille "Scrap".

Mais avec mes connaissances de débutant en VBA je n'y arrive pas :s

Merci d'avance.

Bonjour,

avec un filtre avancé, pas besoin de boucle : les lignes sont traitées en une seule opération !

Bonjour,

j'ai regarder avec un filtre avancé on peut juste copier et non couper ?

C'est exact ! Dans ce cas, filtre avancé sur place puis Couper / Coller

Puis méthode ShowAllData pour annuler le filtre.

Je comprend pas trop ce que tu veux dire, elle est où l'option couper/coller dans filtre avancé, et la méthode showall sa consiste en quoi ?

Non, utiliser le filtre avancé sur place (l'un de ses deux modes, l'autre étant la copie) puis effectuer un simple Couper / Coller.

Consulter l'aide VBA de la méthode Range.Cut pour effectuer le Couper / Coller en une seule instruction !

Quant à ShowAllData, cette méthode est aussi documentée dans l'aide VBA …

Ensuite pour tester la dernière cellule, soit avec la méthode Find, soit avec la propriété CurrentRegion,

soit encore via la propriété Range.End, tout dépend comment sont organisées les données …

Mais j'aimerais garder le code on peut pas juste modifier le code pour qu'il copie/coupe après la dernière ligne remplit car avec ce code copie coupe sur des lignes déjà remplit.

Oui tu peux conserver l'usine à gaz; j'espère qu'il n'y a pas beaucoup de lignes dans la feuille de calculs

sinon cela va ramer comparativement à un filtre avancé au résultat instantané !

Donc par exemple avec la propriété Range.End détecter la dernière saisie :

NumLig = .Cells(.Rows.Count, 1).End(xlUp).Row … (car NumLig = 0 c'est vraiment du lourd ‼)

Du reste je ne comprends même pas ta question vu que tu as déjà cette méthode dans le code !

Si le code avait été balisé comme il se doit - il y a pourtant une icône ! - je m'y serais intéressé

Beh enfaite, ce code va s'activer quand j'enregistre mon fichier, il va automatiquement déplacer les lignes dans la feuille "Scrap" si il y a scrap dans la colonne F de la feuille "Outillage". Mais ici si jamais j'ai déjà ma liste de scrap et que j'en enregistre un plus tard il va venir remplacer le premier de la liste et l'autre va disparaître.

Je sais pas trop où remplacer la ligne de code que tu viens de me donner tu pourrais me l'insérer dans le code en entier ?

Merci de l'aide et du temps que tu m'apportes !

Cordialement

Snakiss

Et je l'ai pourtant indiqué !

Combien de ligne NumLig = 0 ? …

Bonjour,

désolé de répondre si tard je n'étais pas disponible, j'ai essayé de remplacer Numlig = 0 par le code que tu m'as donner il me fait une erreur de debogage. Tu saurais pourquoi ?

Ma base de donnée comprend a peu prés 300 lignes.

Encore merci de l'aide apportée !

Sans savoir le numéro de l'erreur et son message exact ni la ligne la déclenchant …

… je ne peux envisager que l'erreur de conception !

Et dire qu'en deux lignes de code le filtre avancé effectue la même opération …

Rebonjour Marc L,

J'aimerai bien utilisé ta méthode qui m'a l'air vraiment plus légère mais je ne comprend pas comment il faut procéder avec le filtre avancé, je ne l'ai encore jamais utilisé...

L'appeler en manuel depuis la feuille de calculs, il dispose d'un assistant !

Et c'est documenté dans l'aide d'Excel, sans compter les tutoriels sur le net …

Une fois la manipulation au point, activer le Générateur de macros et la reproduire : une base de code est livrée sur un plateau !

Bon j'ai beau regarder les tutos sur les filtres élaborés rien ne marche et je n'y arrive pas, rien ne se filtre.

Je pense que modifier le code serait plus simple.

Sa me rend fouu aaaah

Suivre la progression du code en mode pas à pas via la touche F8 tout en vérifiant le contenu de la fenêtre des Variables locales

Soit dit en passant, des gamins de CM2 (10-11 ans) ont récemment eu aucune difficulté avec l'utilisation d'un filtre avancé !

L'erreur se trouve au niveau de .Row dans la ligne NumLig = .Cells(.Rows.Count, 1).End(xlUp).Row, erreur de compilation: référence incorrecte ou non qualifiée.

Quelqu'un saurait pourquoi il y a cette erreur quand je rentre le code ?

Personne ?

Rechercher des sujets similaires à "vba copier couper entre deux feuilles"