Couper/coller des lignes

vince_nus -  
 vince_nus -
Windows XP - Excel VBA 2007

Bonjour à tous,

j'ai écris un code tout simple. si dans la colonne n°6, il y a le texte "10-Soldé", alors la macro coupe la ligne et la colle après la dernière ligne du tableau.
mon problème c'est que le code me laisse la ligne que j'ai coupé!! j'aimerai qui me la supprime au fur et à mesure.

voici le code sous VBA Excel 2007:

Sub solde()

'clique automatiquement sur le + pour déplier toutes les lignes
ActiveSheet.Outline.ShowLevels RowLevels:=3

LigneSuivi = 1

NbLignes = 25000
For i = 1 To NbLignes
' Test sur la colonne F
If Cells(i, 6).Value = "10-Soldé" Then
Rows(i).Cut
'Cells(i, 6).EntireRow.Cut
Range("A1").Select
Selection.End(xlDown).Select
'ligne de commande pour descendre à la ligne du dessous
ActiveCell.Offset(1, 0).Activate
'Cells(LigneFeuille2, 1).EntireRow.Select
ActiveSheet.Paste
LigneSuivi = LigneSuivi + 1
NbLignes = NbLignes - 1
End If
Next i
End Sub

Merci pour votre aide.

7 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    bonjour
    essaies ceci (après avoir fait quelques modifs)
    pour 25000 lignes çà devrait prendre un peu de temps

    Const cotest = 1
    Const vtest = "10-Soldé"
    Const lideb = 1
    
    Public Sub Deplace()
    Dim li As Long, lifin As Long
    Application.ScreenUpdating = False
    lifin = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
    li = lifin
    Do
      If Sheets(1).Cells(li, cotest).Value = vtest Then
        Sheets(1).Cells(li, cotest).EntireRow.Copy Sheets(1).Cells(lifin + 1, 1)
        Sheets(1).Cells(li, cotest).EntireRow.Delete
      End If
      li = li - 1
    Loop Until li = lideb - 1
    Application.ScreenUpdating = True
    End Sub

    bonne suite
    0
  2. vince_nus
     
    bonjour

    il se passe absolument rien :-(

    le seul pb avec mon code de départ c'est qu'il me laisse la ligne que je coupe!

    help me :-(
    0
  3. vince_nus
     
    bon finalement c'est bon j'ai fais une nouvelle modif

    j'ai juste un denrier problème. Je résume rapide le sujet :
    - je contrôle la colonne 6 (F) pour voir si il y a écrit "10-soldé"
    - je sélectionne la cellule A1, je descends à la dernière ligne de la colonne A (ctrl + flèche du bas) et je descends de +1
    - j'insère la ligne que je viens de couper

    --> Pb : la macro tourne en boucle car il contrôle la colonne F et mon nombres de lignes et variables donc je ne peux pas lui dire de s'arrêter à une ligne en particulier.

    comment faire ?

    voici le code modifié:

    Sub solde2()
    ActiveSheet.Outline.ShowLevels RowLevels:=3

    LigneSuivi = 1
    NbLignes = 25000
    For i = 1 To NbLignes
    If Cells(i, 6).Value = "10-Soldé" Then
    Rows(i).Select
    Selection.Cut
    Range("A1").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Activate

    Selection.Insert Shift:=xlDown

    LigneSuivi = LigneSuivi + 1
    NbLignes = NbLignes - 1

    i = 3
    End If
    Next i
    End Sub


    je pense que je peux, dans un 1er temps filtré les "10-soldé" faire un CTRL+SHIFT+flèche du bas pour qu'il sache le nombre de ligne avec "10-soldé", défiltrer à nouveau et le faire tourner jusqu'à cette valeur!

    est-ce possible??

    Merci
    0
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    tu devrais utiliser le principe que je t'ai suggéré plus haut
    RQ1. le nombre total de lignes ne doit pas varier puisque tu ajoutes et supprimes une ligne
    RQ2. il vaut mieux partir de la dernière ligne en décrémentant le numéro de ligne , ça te permet de t'arrêter lorsque tu as testé la ligne 1, et ça t'éviterait de modifier NbLignes
    RQ3. une fois la valeur "10-Soldé" trouvé
    - tu copies sa ligne après la dernière ligne (voir mon code)
    - tu supprime sa ligne (idem)
    RQ4. Je ne vois pas à quoi sert LigneSuivi

    bonne site
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. vince_nus
     
    le nombre de lignes va changé car par exemple si au départ j'ai 100 ligne avec le "10-Soldé" dans la colonne F, quand je fais la mise à jour de mon tableau de bord, je peux avoir, par exemple la ligne 10 qui passe en "10-Soldé" et disons la n°50. donc je passe à 102. c'est pour ça que je veux filtrer d'abord en fonction du statut en colonne.

    mais du coup en code ça donne quoi?? je découvre au fur et à mesure !!

    merci pour l'aide
    0
  7. ccm81 Messages postés 11033 Statut Membre 2 434
     
    je ne comprends plus très bien

    si dans la colonne n°6, il y a le texte "10-Soldé", alors la macro coupe la ligne et la colle après la dernière ligne du tableau.
    cet exemple répond à cette question
    https://www.cjoint.com/?0CEoQtXDu7A .

    bonne suite
    0
  8. vince_nus
     
    je vais ce que je peux faire!

    oui c pas évident à expliquer

    encore merci
    0