Deplacer des lignes en debut de tableau

  • Initiateur de la discussion Initiateur de la discussion yves03
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

yves03

XLDnaute Occasionnel
Bonjour à tous,
J'ai actuellment un tableau qui comporte 12 colonnes et 3000 lignes, je voudrais savoir si il est possible par VBA de deplacer certaines lignes ( selon un critere qui se trouve en colonne A ) en debut de tableau, les unes a la suite des autres.
En fait il s'agit tout simplement d'un filtre, mais sans effacer les autres lignes
Merci d'avance de votre aide
 
Re : Deplacer des lignes en debut de tableau

Bonsoir,
Un tri ne ferait-il pas l'affaire?
Sinon donne-nous plus de détails (concernant ce fameux critère), et je suis sur que c'est réalisable.

Cordialement
 
Re : Deplacer des lignes en debut de tableau

Re,
Ce fichier fait remonter les lignes si ce qui est en A est égal à ce que tu rentres dans l'inputbox....Est-ce celà que tu désires?
Ou bien faire remonter tout mot qui commence par ce qui est rentré dans l'inputbox?
 

Pièces jointes

Re : Deplacer des lignes en debut de tableau

Bien sûr, on est là pour ça, non? 🙂
Bon, déjà, j'ai enlevé les 2 dernières lignes....j'ai du oublier d'arrêter mon enregistreur de macro à temps....

Code:
Sub tri()      [COLOR="Lime"]'  là, c'est le nom de la fonction[/COLOR]
crit = InputBox("Valeur a faire remonter?")    [COLOR="Lime"]' Je donne un nom (crit) à la valeur  saisie dans l'inputbox[/COLOR]
taille = ActiveSheet.UsedRange.Rows.Count   [COLOR="Lime"]' Je compte le nombre de lignes utilisées (UsedRange) de la feuille active[/COLOR]

For i = 4 To taille         [COLOR="Lime"] ' La c'est une boucle....à chaque fois que la valeur dans la colonne A convient, je la ferais remonter. Je parcours donc mon tableau entier, de la ligne 4 (ou je l'ai fait commencer), à la fin (taille)[/COLOR]
    If Range("A" & i).Value = crit Then    [COLOR="Lime"]' Si la valeur en Ai (i étant l'index de ligne, sur lequel je boucle) est égal à crit  -> c'est donc le cas d'une ligne à faire remonter[/COLOR]
        If i <> 4 Then  [COLOR="Lime"]' La je teste que ce ne soit pas la 1re ligne, sinon, inutile de la faire remonter (en fait c'est pire, sans ce test, ça plante)[/COLOR]
            Rows(i & ":" & i).Cut  [COLOR="Lime"] ' Donc, si la valeur en Ai est celle choisie, alors, je coupe la ligne i.....[/COLOR]
            Rows("4:4").Select      [COLOR="Lime"]' ......pour aller l'insérer avant la ligne 4[/COLOR]
            Selection.Insert Shift:=xlDown   [COLOR="Lime"]' .....en faisant descendre le reste du tableau[/COLOR]
        End If    [COLOR="Lime"]' Pas de Else, puisqu'il n'y a rien à faire si la valeur est différente de crit, ou si c'est la 1re ligne (ligne 4 en fait dans mon exemple)[/COLOR]
    End If
Next i      [COLOR="Lime"] ' Quand j'arrive ici, i est incrémenté de 1 : je teste la ligne suivante[/COLOR]
End Sub    [COLOR="Lime"]' Fin de la procédure[/COLOR]

N'hésite pas à demander s'il te reste des doutes.

Cordialement
 
Re : Deplacer des lignes en debut de tableau

J'ai une petite question encore, lorsque la maro me remonte les lignes, elle met les dernieres lignes en premier.
Serait il possible de garder les lignes dans le meme ordre, la premiere trouvé, serait le premiere et ainsi de suite;
Merci d'avance
 
Re : Deplacer des lignes en debut de tableau

Bonsoir,
Ce n'est pas beau, mais alors pas beau du tout...mais en attendant mieux (il est possible de faire comme précédemment, en remplaçant
For i = 4 To taille
par
For i = taille To 4 by -1
mais c'est (un peu) plus compliqué, puisque par exemple, si tu "remontes" ta ligne 30, la ligne 29 va passer en 30 (essaye si tu ne comprends pas ce que je veux dire.....), et on risque de ne pas traiter à nouveau la ligne 30 😱

Je te propose de faire tourner la macro précédente 2 fois (j'vais dit que ce n'était pas beau)....pour ce soir.....je réfléchis à autre chose, mais demain si tu veux bien....

Code:
Sub tri()
crit = InputBox("Valeur a faire remonter?")
taille = ActiveSheet.UsedRange.Rows.Count

For j = 1 to 2
For i = 4 To taille
    If Range("A" & i).Value = crit Then
        If i <> 4 Then
            Rows(i & ":" & i).Cut
            Rows("4:4").Select
            Selection.Insert Shift:=xlDown
        End If 
    End If
Next i
Next j
End Sub

Suffisant pour effectuer le tri....après niveau temps d'éxecution, si tu recherches la performance, peut mieux faire....

Cordialement
 
Re : Deplacer des lignes en debut de tableau

Une petite astuce que j'aurais du te donner plus tôt :
Tu mets
Application.ScreenUpdating = False
à la 2me ligne (juste après le Sub tri() )
et
Application.ScreenUpdating = True
à l'avant dernière ligne (avant le End Sub).
Ca désactive le rafraichissement de l'affichage, et ta macro s'exécute nettement plus vite.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
513
Réponses
12
Affichages
445
Retour