Faire remonter les lignes automatiquement dans un tableau Excel 365

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 !

Fradet1990

XLDnaute Nouveau
Bonjour,

Je suis à la recherche d'un pro qui saura me donner un coup de main.

Je suis en train de faire un fichier afin de faire un suivi de connexions à différents serveurs. Nous sommes plusieurs usagers, nous avons plusieurs serveurs mais le nombre de connexions est limités à 10 par serveur (Canal 1 à Canal 10). Chaque usager entre manuellement son nom (col.A), le canal utilisé (Col.B) et le nom du serveur (Col.C).

Dans la colonne "D" et "E", la date et l'heure s'affichent et se figent automatique dès qu'il y a une valeur dans la colonne C (Nom du serveur) à l'Aide d'une formule itérative. J'ai besoin de l'heure à laquelle la connexion est entrée afin de faire un suivi des connexions inactives si nous manquons de connexions pour accéder a un serveur. Si la connexion a été utilisée la matin a 06h et que nous sommes le soir à 19h, la connexion est fort probablement inutilisée en ce moment et l'usager à probablement oublier d'Effacer ses entrées.

Mon problème est que j'aimerais que dès qu'un utilisateur efface ses informations (Colonnes A-B et C), la ligne vide disparaisse afin de faire remonter l'ensemble des lignes contenant de l'information.

Dans le fichier en pièce jointe, J'ai 23 lignes remplies sur 31. Je voudrais qu'automatiquement (Ou à l'Aide d'un bouton), les 23 lignes avec valeurs remontent afin d'être consécutives et qu'il n'y ait plus de lignes vides entre elles.

Toutes les solutions sont les bienvenues

Merci 🙂
 

Pièces jointes

Bonjour Fradet, Roblochon,
Un essai en PJ avec :
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("A3:B1000")) Is Nothing Then
        If Cells(Target.Row, "A") = "" And Cells(Target.Row, "B") = "" And Cells(Target.Row, "C") = "" Then
            Rows(Target.Row).Delete shift:=xlUp
        End If
    End If
End Sub
 

Pièces jointes

Bonjour Fradet1990, Roblochon, sylvanu,

Voyez le fichier .xlsm joint et cette macro, très classique :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
With ListObjects(1).Range 'tableau structuré
    .Columns(1).Insert 'insère une colonne auxiliaire
    .Columns(0) = "=1/COUNTIF(" & .Rows(1).Address(0, 0) & ",""><"")"
    .Columns(0) = .Columns(0).Value 'supprime les formules
    Union(.Columns(0), .Cells).Sort .Columns(0), xlAscending, Header:=xlYes 'tri pour accélérer
    On Error Resume Next 'si aucune SpecialCell
    Intersect(.Columns(0).SpecialCells(xlCellTypeConstants, 16).EntireRow, .Cells).Delete xlUp
    .Columns(0).Delete xlToLeft 'supprime la colonne auxiliaire
End With
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub
Elle se déclenche quand on modifie une cellule quelconque et elle est très rapide.

A+
 

Pièces jointes

La macro précédente supprime toutes les formules quand toutes les lignes du tableau sont vides.

Celle-ci conserve dans ce cas les formules en ligne 2 :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
With ListObjects(1).Range 'tableau structuré
    .Columns(1).Insert 'insère une colonne auxiliaire
    .Columns(0) = "=1/SIGN(COUNTA(" & .Rows(1).Resize(, 3).Address(0, 0) & "))" 'test sur 3 colonnes
    .Columns(0) = .Columns(0).Value 'supprime les formules
    If Application.Count(.Columns(0)) = 0 Then .Cells(2, 0) = 1 'pour éviter de supprimer toutes les formules
    Union(.Columns(0), .Cells).Sort .Columns(0), xlAscending, Header:=xlYes 'tri pour accélérer
    On Error Resume Next 'si aucune SpecialCell
    Intersect(.Columns(0).SpecialCells(xlCellTypeConstants, 16).EntireRow, .Cells).Delete xlUp
    .Columns(0).Delete xlToLeft 'supprime la colonne auxiliaire
End With
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub
Edit : j'ai aussi amélioré la formule en remplaçant COUNTIF par COUNTA appliqué sur 3 colonnes.
 

Pièces jointes

Dernière édition:
Merci pour cette réponse rapide à tous. @job75 Le code fonctionne, toutes les lignes avec données se collent ensemble.

Est- ce possible de conserver le même nombre de lignes totales ? Par exemple, que le tableau comptent toujours un total de 125 lignes ? même si cela implique disons que les 25 premières contiennent des valeurs mais que les 100 suivantes sont vides ?

Le but est de permettre au prochain usager d'ajouter ses informations de connexion.

Un gros merci 🙂
 
- 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

Retour