Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Faire remonter les lignes automatiquement dans un tableau Excel 365

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

  • Suivi_Des_Connexion_Aux_Serveurs.xlsx
    30.8 KB · Affichages: 22

Hasco

XLDnaute Barbatruc
Repose en paix

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • Suivi_Des_Connexion_Aux_Serveurs.xlsm
    35 KB · Affichages: 6

job75

XLDnaute Barbatruc
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

  • Suivi_Des_Connexion_Aux_Serveurs(1).xlsm
    38.3 KB · Affichages: 9

job75

XLDnaute Barbatruc
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

  • Suivi_Des_Connexion_Aux_Serveurs(2).xlsm
    36.4 KB · Affichages: 10
Dernière édition:

Fradet1990

XLDnaute Nouveau
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
 

job75

XLDnaute Barbatruc
Visiblement vous n'avez pas compris ce qu'est un tableau structuré ni son utilité.

Il s'agrandit automatiquement quand on entre des données dessous et les formules se recopient.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…