Déplacer une ligne en haut de tableau en fonction de la valeur d'une cellul

Bonjour à tous,

Ma question va probablement sembler simple pour certains mais je ne manipule pas encore les macros (j'ai l'ambition d'apprendre !) : je voudrai déplacer automatiquement une ligne entière en haut de tableau dès que la valeur d'une cellule (ici, celle de la colonne D) n'est plus vide. J'imagine que c'est faisable mais je ne sais pas comment m'y prendre...

Merci d'avance,

Bob, en formation excel

Bonjour bOb

Pourquoi ne pas faire un simple tri décroissant sur la colonne D !?

A+

Je voudrai que ça se mette à jour en automatique car c'est un fichier qui sera partagé avec d'autres utilisateurs : ça permettra nous permettre d'être efficaces plus rapidement sans manipulations supplémentaires, d'autant que tout le monde n'a pas le même niveau de compétences...

Merci d'avance !

bonjour BrunoM45,bob.dindons,

au lieu d'un tri, un autofilter qui est lancé par un double-clicque dans la cellule D1 (et pour le désactiver, aussi duboul-clicque)

Merci Bart,

C'est intéressant mais du coup les autres lignes, celles pour lesquelles la colonne est vide, ne sont plus visibles par les utilisateurs... Ici, je voudrais "simplement" mettre en partie supérieure du tableau les lignes dont la colonne n'est plus vide (idéalement, la plus ancienne tout en haut et la plus récente en bas) puis les autres en dessous. On conserve le même nombre de lignes mais elles se classent en automatique au fur et à mesure qu'on renseigne le fichier... De nouvelles lignes peuvent être ajoutées à n'importe quel moment tout en bas.

Un grand merci d'avance !

Bob

Bonjour bob.dindons, bienvenue sur XLP ,

Moins simple qu'il n'y parait. Un essai qui gère :

  • la modification d'une ou plusieurs cellules dans la colonne D
  • les modifications peuvent être la saisie d'une ou plusieurs valeurs dans la colonne D
  • les modifications peuvent être aussi l'effacement d'une ou plusieurs valeurs dans la colonne D
  1. On regroupe les lignes avec les valeurs de la colonne D non vides en tête de tableau puis viennent les lignes avec aucune valeur en colonne D.
  2. Les lignes en tête de tableau sont colorées avec un fond en gris
  3. Les dernières lignes avec des valeurs saisies non vides en D sont bien positionnées en haut du tableau devant les valeurs précédentes déjà présentes.

Le code est dans le module de "Feuille 1". On utilise une colonne auxiliaire. Cette colonne est précisée dans la constante Colxxx (en tête du code). Pour l'exemple, on a pris la colonne X. Modifiez cette colonne pour indiquer une colonne qui ne sera jamais utilisée par l'utilisateur.

le code :

Private Sub Worksheet_Change(ByVal Target As Range)
Const Colxxx = "X"
Dim xrg As Range, der&, colval As Range, Zonetri As Range, x, prem As Range
   Set xrg = Intersect(Target, Columns("d:d"))
   If xrg Is Nothing Then Exit Sub
   Application.ScreenUpdating = False
   If Me.FilterMode Then Me.ShowAllData
   der = Cells(Rows.Count, "a").End(xlUp).Row
   Set colval = Range(Cells(2, Colxxx), Cells(der, Colxxx))
   Set Zonetri = Range(Cells(1, 1), Cells(der, Colxxx))
   If der = 1 Then Exit Sub
   On Error GoTo Err01
   Application.EnableEvents = False
   colval.Formula = "=IF(d2="""",10^10,ROW())"
   For Each x In xrg
      If x <> "" Then Cells(x.Row, Colxxx) = -1
   Next x
   colval.Value = colval.Value
   Zonetri.Sort key1:=Cells(1, Colxxx), order1:=xlAscending, Header:=xlYes
   On Error Resume Next
   Set prem = Columns("d:d").Find(what:="")
   If Not prem Is Nothing Then If prem.Row - 1 <= der And prem.Row - 1 > 1 Then Range(Cells(2, "a"), Cells(prem.Row - 1, "g")).Interior.Color = RGB(200, 200, 200)
Err01:
   colval.EntireColumn.Clear
   Application.EnableEvents = True
End Sub

re, salut mafraise,

un autre essai avec la colonne AA comme colonne auxiliaire. Il faut lancer la macro avec un bouton ou manuel, parce que je pense que ce sera trop ambetant autrement.

Sub Trier()
     With Sheets("Feuille 1").UsedRange.Resize(, 27)     'les données = 27 colonnes
          With .Columns(27)                  'la colonne 27 = auxiliaire
               .FormulaR1C1 = "=--(Rc4<>"""")"     ''1 si colonne D n'est pas vide, 0 = vide
               .Value = .Value
          End With
          .Sort .Cells(1, 27), xlDescending, Header:=xlYes     'trier tout avec colonne 27
     End With
End Sub

EDIT : quand je lis la macro à mafraise, c'est environ la même chose ....

Re,

Une version v2 qui déplace la ligne non pas tout en haut mais juste après le paquet des lignes qui étaient déjà grisées.

Re ,

La version v2 avec les commentaires du code.

Rien à redire, c'est parfait ! Merci infiniment mafraise !!!

Rechercher des sujets similaires à "deplacer ligne haut tableau fonction valeur cellul"