XL 2019 Code VBA

Sanni

XLDnaute Junior
Bonsoir à tous! je voudrais savoir s'il est possible de toujours masquer automatiquement la 1ère ligne visible sous excel avec un code VBA? J'ai une base de donnée et je voudrais qu'à chaque fois que j'ajoute une donnée la 1ère ligne non vide de mon tableau se masque automatiquement ..merci
 
Solution
Je reconnais que ce n'est pas trivial.

Si tu utilises un tableau structuré (Accueil / Mise sous forme de tableau / Choisir un style de tableau) c'est plus simple car Excel nomme ce tableau (par défaut "Tableau1" modifiable) et connait sa position et son nombre de lignes.
C'est ce que j'ai fait avec le fichier Feuil1.xlsm.

Si tu n'utilises pas de tableau structuré, c'est un peu plus compliqué car il faut:
- paramétrer le numéro de la ligne d'entête du tableau,
- paramétrer le numéro de colonne qui va servir à déterminer le nombre de lignes du tableau.
C'est ce que j'ai fait avec le fichier Feuil2.xlsm.

Dudu2

XLDnaute Barbatruc
Bonjour Sanni, kiki29,

La page que tu indiques me semble un peu douteuse.
NbLignes = ActiveSheet.UsedRange.Rows.Count
Le <Feuille>.UsedRange est parfois capricieux peut aller au-delà de la dernière/première ligne/colonne valorisée.
DerniereLigne = Range("A65536").End(xlUp).Row
Le truc classiquement utilisé et à éviter car ne fonctionne pas si les dernières lignes sont filtrées.

Sur la base d'un code Internet vérifié, voici une fonction qui te donne la première et dernière ligne d'une plage (pour une feuille complète c'est <Feuille>.Cells), résistante aux filtres et masquages.

VB:
Sub Test_PremièreEtDernièreLigne()
    Dim PremièreLigne As Long
    Dim DernièreLigne As Long
    
    Call PremièreEtDernièreLigne(ActiveSheet.Cells, PremièreLigne, DernièreLigne)
    
    MsgBox "PremièreLigne = " & PremièreLigne & ", DernièreLigne = " & DernièreLigne
End Sub

'------------------------------------------------------------------
'Fonction de recherche de la première et dernière ligne d'une plage
'Les 2 valeurs sont retournées dans les 2 arguments ByRef
'------------------------------------------------------------------

Sub PremièreEtDernièreLigne(ByVal Plage As Range, _
                            ByRef PremièreLigne As Long, _
                            ByRef DernièreLigne As Long, _
                            Optional ByVal Constantes As Boolean = True, _
                            Optional ByVal Formules As Boolean = True)
    
    'Si Plage non valorisée, exit
    If Plage Is Nothing Then Exit Sub
    
    With Plage
        On Error Resume Next
        
        'Si recherche sur formules
        If Formules Then
            With .SpecialCells(xlCellTypeFormulas)
                PremièreLigne = .Areas(1).Row
                DernièreLigne = .Areas(.Areas.Count).Cells(.Areas(.Areas.Count).Rows.Count).Row
            End With
        End If
        
        'Si recherche sur constantes
        If Constantes Then
            With .SpecialCells(xlCellTypeConstants)
                If PremièreLigne = 0 Then
                    PremièreLigne = .Areas(1).Row
                Else
                    PremièreLigne = Application.Min(PremièreLigne, .Areas(1).Row)
                End If                
                DernièreLigne = Application.Max(DernièreLigne, .Areas(.Areas.Count).Cells(.Areas(.Areas.Count).Rows.Count).Row)
            End With
        End If
        
        On Error GoTo 0
    End With
End Sub

Après je ne comprends pas ce que veut dire :
masquer automatiquement la 1ère ligne visible sous excel avec un code VBA
Car "visible" a un sens bien défini sous Excel et ce n'est sans doute pas celui que tu utilises.
 
Dernière édition:

Sanni

XLDnaute Junior
En fait j'ai un long tableau(base de données) et j'ai associé un formulaire de saisi(à l'aide d'une macro) à ce tableau. Ce que je souhaite est d'ajouter un code à mon code vba du formulaire de sorte que lorsque j'ajoute des données à ma base de données, une ligne( sauf l'entête bien-sûr) de mon tableau se masque automatiquement pour que celui ci (le tableau) ne soit pas trop long visiblement. exemple: si en dehors de l'entête de mon tableau j'ai 1000 linges, je veux que lorsque je vais ajouter une 1001èm ligne que la 1ère linge des 1001 se masque automatiquement, et lorsque je vais encore ajouter une 1002 èm ligne, que la ligne qui suit la 1ère ligne déjà masquée soit aussi masquée et ainsi de suite. En fait cela m'évitera de ne pas trop défiler le tableau vers le bas si je souhaitais aller vers le dernier enregistrement..merci beaucoup de votre aide...je n'ai pas compris votre code M.Dudu2
 

Dudu2

XLDnaute Barbatruc
S'il s'agit de masquer la 1ère ligne d'un tableau dont tu connais le n° x, c'est:
ActiveSheet.Rows(x).Hidden = True
Et pour la dé-masquer:
ActiveSheet.Rows(x).Hidden = False
Ça se trouve facilement sur Internet ou comme le dit kiki29 utiliser l'enregistrement de Macro et éventuellement adapter la Macro enregistrée.
 

Sanni

XLDnaute Junior
S'il s'agit de masquer la 1ère ligne d'un tableau dont tu connais le n° x, c'est:
ActiveSheet.Rows(x).Hidden = True
Et pour la dé-masquer:
ActiveSheet.Rows(x).Hidden = False
Ça se trouve facilement sur Internet ou comme le dit kiki29 utiliser l'enregistrement de Macro et éventuellement adapter la Macro enregistrée.
D'après ce que j'ai expliqué, le numéro de la ligne change ce n'est pas un numéro de ligne fixe.
 

Dudu2

XLDnaute Barbatruc
N = (n° dernière ligne du tableau - n° ligne d'entête du tableau) - 1000
si N > 0 masquer la ligne n° = n° ligne entête + N

Exemple:
n° ligne d'entête du tableau = 3
n° dernière ligne du tableau = 1004
N = 1004 - 3 - 1000 = 1
N > 0 => masquer ligne n° = 3 + 1 = 4
 

Dudu2

XLDnaute Barbatruc
Je reconnais que ce n'est pas trivial.

Si tu utilises un tableau structuré (Accueil / Mise sous forme de tableau / Choisir un style de tableau) c'est plus simple car Excel nomme ce tableau (par défaut "Tableau1" modifiable) et connait sa position et son nombre de lignes.
C'est ce que j'ai fait avec le fichier Feuil1.xlsm.

Si tu n'utilises pas de tableau structuré, c'est un peu plus compliqué car il faut:
- paramétrer le numéro de la ligne d'entête du tableau,
- paramétrer le numéro de colonne qui va servir à déterminer le nombre de lignes du tableau.
C'est ce que j'ai fait avec le fichier Feuil2.xlsm.
 

Pièces jointes

  • Feuil1.xlsm
    19.8 KB · Affichages: 7
  • Feuil2.xlsm
    19.7 KB · Affichages: 8

Sanni

XLDnaute Junior
M
Je reconnais que ce n'est pas trivial.

Si tu utilises un tableau structuré (Accueil / Mise sous forme de tableau / Choisir un style de tableau) c'est plus simple car Excel nomme ce tableau (par défaut "Tableau1" modifiable) et connait sa position et son nombre de lignes.
C'est ce que j'ai fait avec le fichier Feuil1.xlsm.

Si tu n'utilises pas de tableau structuré, c'est un peu plus compliqué car il faut:
- paramétrer le numéro de la ligne d'entête du tableau,
- paramétrer le numéro de colonne qui va servir à déterminer le nombre de lignes du tableau.
C'est ce que j'ai fait avec le fichier Feuil2.xlsm.
merci infiniment
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 925
Membres
101 841
dernier inscrit
ferid87