Comment récupérer l’entête des colonnes sans formules ?

Bonjour !

SVP, pouvez-vous répondre à la question du titre du sujet ?

Merci

Bonjour,

Merci de développer la question et de joindre un fichier à ta demande.

Cdlt.

Bonjour zot,

« récupérer l'entête des colonnes sans formules » ; alors par VBA ?

dhany

:Oups: Désolé, j'ais pas été assez clair .

J'ai un tableau qui comporte des colonnes qui calculent automatiquement (donc ont des formules) et d'autres qui ne calculent pas.

Je souhaite récupérer en VBA la liste des entêtes de toutes les colonnes qui ne calculent pas.

à tout hasard, si tu veux par VBA, je te propose d'essayer ce code :

Sub Essai()
  Dim chn$, p As Byte
  chn = Cells(5, 46).Address(1, 0): p = InStr(chn, "$")
  chn = Left$(chn, p - 1): MsgBox chn
End Sub

dhany

« récupérer l'entête des colonnes sans formules » ; alors par VBA ?

Oui en VBA.

Salut Dhany ! content te retrouver


Désolé, j'avais pas vu ta réponse. Une vrai galère avec cette connexion naze de chez naze ....

moi aussi, content de te revoir (même si j'sais pas encore si j'pourrai t'apporter une aide efficace sur ce sujet).

si tu veux la liste des entêtes, alors elles sont toutes sur la ligne d'entêtes du tableau, n'est-ce pas ? donc au-dessus de ta 1ère ligne de données ; et ça qu'il y ait ou non en dessous des formules ; pour davantage d'aide, ce serait mieux avec ton fichier ; et donne aussi un exemple du résultat attendu (pour les 2 cas que tu as cités : avec ou sans formules dans tes colonnes).

dhany

Ci-joint, le fichier.

Résultat attendu: Une fonction qui retournerait cet tableau {"AIRE", "VOLUME"}

Merci d'avance !

9le-pave-v1.xlsm (114.48 Ko)

on s'est croisés, et j'ai modifié mon message précédent.

ha oui j'ai r'marqué. mais j'avais déjà préparé le fichier le temps te l'envoyer et zap ! j'tombe sur ton précédent


Je reformule ma question. La fonction doit pouvoir récupérer dans la feuilles active les Entêtes des colonnes qui ont des formules.

Dans le cas du fichiers joint, il s'agit des colonnes "AIRE" et "VOLUME".

Vous pouvez mettre le résultat n'importe où en dehors du tableau lui-même. Pourvu que j'ai la commande VBA ...

Re,

Une proposition à étudier.

Cdlt.

4le-pave-v1.xlsm (121.81 Ko)
Option Explicit

Dim rng As Range, Cell As Range, x As String

'Formules
Public Sub XX_1()
    x = "Formules :" & Chr(10)
    With ActiveSheet.ListObjects(1)
        For Each Cell In .HeaderRowRange
            If Cell.Offset(1).HasFormula Then
                x = x & Cell & ", "
            End If
        Next
    End With
    MsgBox Left(x, Len(x) - 2)
End Sub

'Constantes
Public Sub XX_2()
    x = "Constantes :" & Chr(10)
    With ActiveSheet.ListObjects(1)
        For Each Cell In .HeaderRowRange
            If Not Cell.Offset(1).HasFormula Then
                x = x & Cell & ", "
            End If
        Next
    End With
    MsgBox Left(x, Len(x) - 2)
End Sub

@zot

désolé, j'ai eu un contretemps, mais j'pense que la réponse de Jean-Eric pourra sûrement te convenir !

(et il est bien plus doué pour les tableaux ListObjects que moi ! )

dhany

Merci Jean-Eric !

ça marche ! je vais adapter le code à mon projet. Mais, veux-tu m’éclaircir les idées à-propos des lignes suivantes ?

    With ActiveSheet.ListObjects(1)  ' stp un commentaire
        For Each Cell In .HeaderRowRange ' stp un commentaire
            If Cell.Offset(1).HasFormula  ' ici je vois bien l'appel de la méthode HasFormula sur la cellule active
...
End Sub

Peut-être des commentaires à chaque ligne m'aiderait grandement

@zot

désolé, j'ai eu un contretemps, mais j'pense que la réponse de Jean-Eric pourra sûrement te convenir !

(et il est bien plus doué pour les tableaux ListObjects que moi ! )

dhany

No problem dhany , merci d'y participer tout même !

Cette notion de ListObjects pourrait bien nous aider à optimiser le code du problème posé là https://forum.excel-pratique.com/viewtopic.php?f=2&t=111258

Re,

Un complément d'informations :

'Formules
Public Sub XX_1()
    x = "Formules :" & Chr(10)
    With ActiveSheet.ListObjects(1)
        'On parcourt les cellules de l'en-t?te du tableau
        '(Faire un double-clic sur le terme HeaderRowRange, puis F1 pour obtenir l'aide Excel !!!)
        For Each Cell In .HeaderRowRange
            'On v?rifie que la cellule en dessous (d?cal?e d'une ligne) comporte une formule
            If Cell.Offset(1).HasFormula Then
                x = x & Cell & ", "
            End If
        Next
    End With
    MsgBox Left(x, Len(x) - 2)
End Sub

Merci Jean-Eric. Je comprends beaucoup mieux maintenant. Cependant, il demeure quelques zones d'ombre à propos de l'instruction ListObjects utilisé là

'Formules
...
    'On parcourt les cellules de l'en-t?te du tableau
    With ActiveSheet.ListObjects(1)
    ...
End Sub

Comment fonctionne-t-il exactement ? Pourquoi avoir mis (1) plutôt qu'un autre nombre (ex: 2, 3, 4 ....n) ?

Bonjour zot,

pour ActiveSheet.ListObjects(1) : le 1 signifie ici : le 1er tableau de type ListObjects de la feuille active ; donc si y'avait un 2ème tableau de même type sur cette même feuille, on mettrait ActiveSheet.ListObjects(2) pour y accéder.

dhany

Ha ! ok. C'est fou x'quil ya beaucoup de subtilités dans VBA.

En tout cas Merci dhany. C'est plus clair

merci pour ton retour ; j't'ai aussi répondu sur ton autre sujet :

https://forum.excel-pratique.com/viewtopic.php?p=663646#p663646

dhany

Rechercher des sujets similaires à "comment recuperer entete colonnes formules"