Macro couper lignes selon conditions

Bonjour à tous,

Pouvez vous svp m'aider avec une macro pour le besoin suivant :

Si dans la feuille N, les premières lignes avec la colonne A en dessous de l'entête donc à partir de A2 sont vides = couper toutes ces lignes et les coller à la fin de la feuille N-1 et supprimer ces lignes qui deviennent vide de la feuille N.

Ci-joint un petit fichier explicatif.

Merci.

13test.xlsx (14.16 Ko)

Bonjour,

Essayez avec ce code

Sub test()
Dim dlg As Integer
Dim i As Byte

dlg = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row + 1
i = 2
With Sheets("Feuil2")
    While .Range("A" & i) = ""
        .Range("A" & i & ":N" & i).Copy Sheets("feuil1").Range("A" & dlg)
        .Rows(i).Delete
        dlg = dlg + 1
    Wend
End With
End Sub

Le code commence à la ligne 2 (par rapport à votre fichier) et s'arrête dès qu'il y aura une valeur en colonne A

Si ok-->

Cordialement

Bonjour,

Merci pour la réponse.

J'ai ce message d'erreur lors de l'exécution :

image

pour les numéros de feuille ça sera en dynamique ou c'est fixé sur feuille1 et feuille2 ? Merci

Je n'ai pas d'erreur.

Vous avez bien enregistré votre fichier au format XLSM ?
Votre fichier est bien celui envoyé ici ?

Vous devez placer le code dans un module

Désolé. J'ai essayé sur un autre PC c'est ok avec le fichier test. Par contre avec un autre fichier qui contient plusieurs feuilles j'ai ce message :

image

J'ai essayé sur un autre PC c'est ok avec le fichier test. Par contre avec un autre fichier qui contient plusieurs feuilles j'ai ce message :

C'est un souci de déclaration de variable. Vous avez combien de ligne vide en colonne A ?
Puis la première ligne est toujours la ligne 2 ?

Si vous savez me montrer sur quelle ligne le code s'arrête

Le nombre de cellules en colonne A vide est diffèrent d'une feuille a une autre et il y a des feuilles ou il n'y a pas de vide aussi.

Oui la première ligne est toujours la 2, si la cellule A2 est vide, sinon pas de traitement de la feuille.

image

Bizarre tout de même.

Essayez en changeant ceci

Dim dlg as long

... et il y a des feuilles ou il n'y a pas de vide aussi.

Le code ne fera rien dans ce cas.

Merci, le blocage en question a été levé.

mais pour tester j'ai remplacé le nom des feuilles dans le code suite à l'erreur ci-dessous.

SVP est-ce possible de ne pas fixer le nom des feuilles et que ça soit en fonction de la feuille en cours et feuille en cours-1

image

SVP est-ce possible de ne pas fixer le nom des feuilles et que ça soit en fonction de la feuille en cours et feuille en cours-1

Il faut que je connaisse le nom des feuilles voire savoir combien de feuilles vous avez mais surtout savoir si le nom de la feuille qui reçoit les infos est toujours bien feuil1 ou placé en 1er position dans le fichier.

Le nom des feuilles est du genre '2021-1' jusqu'à '2021-2000'.

La copie se fait dans la feuille précédente, exemple : lignes de la feuille '2021-150' sont repris dans la feuille '2021-149' ainsi de suite.

La copie se fait dans la feuille précédente, exemple : lignes de la feuille '2021-150' sont repris dans la feuille '2021-149' ainsi de suite.

Ok. Donc mettons que vous avez 5 feuilles nommées comme ceci :

2021-1, 2021-2, 2021-3, 2021-4 et 2021-5

Vous copiez de 5 vers 4, de 4 vers 3 etc ...
Lorsque vous arrivez sur la feuille 2021-1 et que vous avez aussi A2 et A3 vide, vous faites quoi dans ce cas

C'est exactement ça. La feuille 2021-1 ne contient jamais de vide au début.

J'ai essayé de modifier votre code avec un truc du genre ci-dessous mais je suis loin du compte lol

Sub test()
Dim dlg As Long
Dim i As Byte
Dim bb As Long
Dim cc As Long

bb = ActiveSheet
cc = ActiveSheet(Index - 1)

dlg = cc.Range("A" & Rows.Count).End(xlUp).Row + 1
i = 2
With bb
While .Range("A" & i) = ""
.Range("A" & i & ":N" & i).Copy cc.Range("A" & dlg)
.Rows(i).Delete
dlg = dlg + 1
Wend
End With
End Sub

C'est exactement ça. La feuille 2021-1 ne contient jamais de vide au début.

Ok. Le code comme ceci :

Sub test()
Dim dlg As Long
Dim i As Byte
Dim j As Integer
Dim sh As Worksheet

i = 2
For j = Sheets.Count To 1 Step -1

    If j = 1 Then Exit Sub
    dlg = Sheets(j - 1).Range("A" & Rows.Count).End(xlUp).Row + 1

    With Sheets(j)
        While .Range("A" & i) = ""
            .Range("A" & i & ":N" & i).Copy Sheets(j - 1).Range("A" & dlg)
            .Rows(i).Delete
            dlg = dlg + 1
        Wend
    End With

Next j
End Sub

Si ok -->

Cordialement

NB : Si vous placez un code, cliquez sur l'icône code </> disponible dans le menu et coller le code dans la fenentre

Super ça fonctionne à merveille !! Chapeau l'artiste

Un grand merci à vous, vous me sauvez la vie !

Rechercher des sujets similaires à "macro couper lignes conditions"