Couper/Insérer ligne (déplacer ligne)

Résolu
AllXVI Messages postés 14 Date d'inscription lundi 9 septembre 2013 Statut Membre Dernière intervention 22 septembre 2013 - Modifié par AllXVI le 17/09/2013 à 19:10
AllXVI Messages postés 14 Date d'inscription lundi 9 septembre 2013 Statut Membre Dernière intervention 22 septembre 2013 - 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.

5 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 17/09/2013 à 19:17
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.
0
AllXVI Messages postés 14 Date d'inscription lundi 9 septembre 2013 Statut Membre Dernière intervention 22 septembre 2013
17 sept. 2013 à 19:55
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 ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 sept. 2013 à 20:16
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 ...
0
AllXVI Messages postés 14 Date d'inscription lundi 9 septembre 2013 Statut Membre Dernière intervention 22 septembre 2013
17 sept. 2013 à 20:24
Je comprends mieux le principe. Merci pour l'astuce, je m'y mets
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
AllXVI Messages postés 14 Date d'inscription lundi 9 septembre 2013 Statut Membre Dernière intervention 22 septembre 2013
22 sept. 2013 à 15:39
Cela fonctionne correctement. Effectivement l'utilisation d'un for est une bonne astuce. Merci
0
Rejoignez-nous