Couper/Insérer ligne (déplacer ligne) [Résolu]

Signaler
Messages postés
14
Date d'inscription
lundi 9 septembre 2013
Statut
Membre
Dernière intervention
22 septembre 2013
-
Messages postés
14
Date d'inscription
lundi 9 septembre 2013
Statut
Membre
Dernière intervention
22 septembre 2013
-
Bonjour,

Je rencontre un petit problème lorsque je veux faire des insertions de lignes à savoir couper/coller ou copier/coller.
Voila mon bout de code :
        Cells(m, 1).EntireRow.Select
        Selection.Cut
        Cells(n, 1).EntireRow.Select
        Selection.EntireRow.Insert shift:=xlDown
        n = n + 1

La ligne ou l'erreur est rencontrée est la ligne d'insertion.
Le message d'erreur affiché est :
"Erreur d'exécution 1004
Cette sélection n'est pas valide.
Raisons possibles :
- Les zones de copies et de collage ne peuvent se superposer que si elles sont de dimensions et de formes identiques
- Si vous utilisez la commande Créer du menu Insertion Nom, la ligne ou la colonne qui contiennent les noms proposés ne seront pas incluses"

Aucune des deux raisons ne me parait être la bonne.

Cordialement.

5 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bonjour,
on devine une boucle, mais on ne la voit pas dans le code montré
Un principe fondamental à toujours respecter si l'on ne veut pas se faire des "croche-pieds" avec la numérotation des lignes.
Tant en ce qui concerne les suppressions que les insertions : toujours commencer par la dernière ligne et remonter en boucle vers la première.
Messages postés
14
Date d'inscription
lundi 9 septembre 2013
Statut
Membre
Dernière intervention
22 septembre 2013

Voici la boucle en entier :
Do While Worksheets("Stock").Cells(m, 1) <> ""
    If Worksheets("Stock").Cells(m, 1) Like "*FILM*" And Worksheets("Stock").Cells(m, 1) Like "*0G*" Then
        Cells(m, 1).EntireRow.Select
        Selection.Cut
        Cells(n, 1).EntireRow.Select
        Selection.EntireRow.Insert shift:=xlDown
        n = n + 1
    End If
    m = m + 1
Loop


Je ne comprends pas trop le principe de remonter. Il faut d'abord récupérer le nombre de lignes par une boucle puis boucler en décroissant ? Pourquoi ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
fais donc une boucle for... to...next
en partant de la dernière ligne remplie (derlig)
et en remontant vers la première à traiter (premlig)
+++>>
For i = derlig do premlig step - 1
....
Next

je te laisse y travailler, hein ...
Messages postés
14
Date d'inscription
lundi 9 septembre 2013
Statut
Membre
Dernière intervention
22 septembre 2013

Je comprends mieux le principe. Merci pour l'astuce, je m'y mets
Messages postés
14
Date d'inscription
lundi 9 septembre 2013
Statut
Membre
Dernière intervention
22 septembre 2013

Cela fonctionne correctement. Effectivement l'utilisation d'un for est une bonne astuce. Merci