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

AllXVI 14 Messages postés lundi 9 septembre 2013Date d'inscription 22 septembre 2013 Dernière intervention - 17 sept. 2013 à 19:09 - Dernière réponse : AllXVI 14 Messages postés lundi 9 septembre 2013Date d'inscription 22 septembre 2013 Dernière intervention
- 22 sept. 2013 à 15:39
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.
Afficher la suite 

Votre réponse

5 réponses

ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 17/09/2013 à 19:17
0
Utile
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.
Commenter la réponse de ucfoutu
AllXVI 14 Messages postés lundi 9 septembre 2013Date d'inscription 22 septembre 2013 Dernière intervention - 17 sept. 2013 à 19:55
0
Utile
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 ?
Commenter la réponse de AllXVI
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 17 sept. 2013 à 20:16
0
Utile
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 ...
Commenter la réponse de ucfoutu
AllXVI 14 Messages postés lundi 9 septembre 2013Date d'inscription 22 septembre 2013 Dernière intervention - 17 sept. 2013 à 20:24
0
Utile
Je comprends mieux le principe. Merci pour l'astuce, je m'y mets
Commenter la réponse de AllXVI
AllXVI 14 Messages postés lundi 9 septembre 2013Date d'inscription 22 septembre 2013 Dernière intervention - 22 sept. 2013 à 15:39
0
Utile
Cela fonctionne correctement. Effectivement l'utilisation d'un for est une bonne astuce. Merci
Commenter la réponse de AllXVI

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.