IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Tableau structuré => VBA - transformé formule avec réf. style A1 en adresse tableau style [@NomdEntete]


Sujet :

Macros et VBA Excel

  1. #21
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Re Patrick,

    Déjà merci pour l'aide que tu m'apportes :
    On peut s'y prendre de cette manière aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub TestEntete()
        For Each L In ActiveSheet.ListObjects
            Debug.Print L.Name
            For Each LRow In L.ListRows(1).Range
                'Debug.Print LRow.Column
                Debug.Print LRow.Column - L.Range.Column + 1
                Debug.Print L.HeaderRowRange(LRow.Column - L.Range.Column + 1)
            Next
        Next
    End Sub
    Edit la fonction corrigé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Function AdrTab(Sh_Name$, Nom_Tab$, Formule$, LRow As Range, Coll As Collection, Optional FT As Boolean) As String
    Dim Entete$
        For Each C In Coll
            Param = Split(C, "|"):      T = Param(0):       F = Param(1):       A = Param(2)
            If T = "" And F <> Sh_Name Then
                Formule = Formule
            Else
                If FT And T = Nom_Tab Then Tbl = "" Else If F = Sh_Name And T = "" Then T = Nom_Tab Else Tbl = T
                Entete = Sheets(F).ListObjects(T).HeaderRowRange(Range(A).Column - Sheets(F).ListObjects(T).Range.Column + 1)
                Adr_EnteteTab = Tbl & "[@" & Entete & "]"
                Formule = Replace(Formule, A, Adr_EnteteTab)
            End If
        Next
        AdrTab = Formule
    End Function
    Résultat :
    Feuil4
    Tableau3
    -------------------------
    -------------------------
    =B6*C6 - $D$6
    =[@Chiffre]*[@Pourcentage]
    -------------------------

    ou encore

    Feuil4
    Tableau3
    -------------------------
    -------------------------
    =E15*F15 - $G$15
    =[@Chiffre]*[@Pourcentage]
    -------------------------
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  2. #22
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour à tous,

    @Pierre :
    Repérer dans une formule ce qui est une adresse de cellule, dan le même tableau ou dans un autre tableau du classeur demande d'abord de parser la formule pour en extraire les adresses (relatives, mixtes ou absolues), et déjà là, ca va être vachement coton.
    Je vais m'attaquer à cette partie là.
    Peux tu m'en dire plus stp, sur les cas/les difficultés (auquel je ne penserai pas forcément) que je pourrais rencontrer lors de la transformation des formules et ce qui est plus judicieux dans les cas où je devrais plutôt garder l'adresse d'une cellule plutôt que de la mettre en adresse via le nom de la colonne de ledit tableau … ???

    En te remerciant d'avance

    @Patrick : As tu vu d'autres choses à rectifier/améliorer ??
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  3. #23
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Plus haut dans la discussion, je me posais la question de l'intérêt de la démarche. Perso, je n'en vois pas, à part faciliter éventuellement la lecture. Partant de ce constat, pourquoi passer du temps à cela? A part faire évoluer ses compétences dans des algos de parsing, et encore...

    Cela dit, bon amusement
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #24
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    @Patrick : As tu vu d'autres choses à rectifier/améliorer ??
    ben envers et contre tout mes detracteurs je m'en suis fait une hier pour des formule avec precedent sur la meme ligne il ne faut pas grand chose

    pour ce qui serait des precedents en dehors du tableau sur le meme sheet une chose dont je suis sur c'est qu'il ne faut pas travailler avec le listobject mais son range
    du genre comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for each cel in range(nomtableau).cells'on travaille avec son range
    if cel.hasformula then
    set lesprecedents=cel.precedents
    tablopreds=split(replace(lesprecedents.address,":",","),",")
    for i= 0 to ubound(tablopreds)'
    'ramener lindex de colonne de la cellule par rapport au tableau et non au sheets
    et prendre la cells(1,colonneobtenue) pour le nom de colonne 
     
    next
     
    next
    come je te l'ai dis hier tu peut tres bien au debut de fonction determiner les offset si le tableau ne commence pas en ligne 1 et/ou colonne 1

    mais entre nous c'est tellement plus facile d'avoir les adress absolues dans les formules que je comprends pas ton interet
    et c'est tellement plus facile a modifier les address absolue par vba dans les formules
    cela dit l'exercice est interessant pour le sport
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #25
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Juste quelques mots.

    Je doute qu'il soit intéressant d'essayer de travailler avec les antécédents. En plus de la remarque d'Eric sur la limitation à la feuille, c'est de parsing syntaxique dont il s'agit ici. Il faut donc envisager toutes les règles de la grammaire Excel, et pour moi, ça n'a rien à voir avec les antécédents. Lorsque Excel met une référence en couleur à la saisie d'une formule, ce n'est pas en regardant les antécédents, mais en appliquant une règle de grammaire qui impose que le texte saisi soit la référence d'un antécédent. Il ne faut pas confondre la cause et l'effet, à mon avis.

    Je doute que regarder les références en se focalisant sur les références absolues soient une bonne chose car il y a des références structurées qui sont relatives sur les lignes grâce à l'arobase. N'oubliez pas non plus, ça pourrait simplifier votre travail, quoique, que les références structurées sont relatives ou absolues sur les colonnes en fonction de la façon dont elles sont copiées, sauf à doubler la référence de colonne pour forcer le verrou lors de la recopie par la poignée de recopie (pas par copier-coller qui considère que toutes les références structurées sont absolues sur les colonnes, pas sur les lignes).

    On pourrait regarder une formule sous ses expressions A1 et R1C1, en avançant pas à pas jusqu'à trouver des différences, mais là encore, il faudrait déterminer la règle qui permet de savoir, à partir du premier caractère différent, jusqu'où vont les références A1 et R1C1 dans chaque expression, ce qui revient de toute façon à un problème de grammaire...

    Pour finir, la version 2007 n'est pas forcément la meilleure pour ce genre de projet, car les tableaux structurés n'étaient pas encore matures et la syntaxe est verbeuse, par rapport aux versions suivantes.

    Je ne saurais trop vous conseiller de définir d'abord la méthode que vous allez utiliser, et d'envisager tous les cas grammaticaux, sans vous contenter de suppositions et d'approximations, en vous demandant si vous allez travailler en références A1 ou R1C1. Et je rappelle une dernière fois que pour moi, ça ne sert à rien (mais je peux entendre vos raisons, si vous en avez ).

    Cela dit, je suis loin de maîtriser les algos de parsing de code, et d'autres ont peut-être une approche différente et/ou vont trouver que j'ai dit des bêtises
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #26
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Patrick,

    c'est ce que je pensais au départ, travailler avec Precedents, mais je me suis aperçu assez rapidement de la limitation restant, au niveau de la feuille.
    De plus imaginons que nous utilisons par exemple 3 cellules (comme précédents) dans le désordre comme "=F2+H2+I2" sachant qu'en H il y a une formule "=F2*G2", la réponse de Precedents.Address sera $F$2:$I$2
    ou
    dans un For Each $F$2, $G$2, $H$2, $I$2
    Alors oui $G$2 fais bien partie d'un Precedents, mais pas de la formule "=F2+H2+I2"

    C'est pour cela que je suis passé par :
    ShowPrecedents et NavigateArrow, que j'ai appris à connaitre et qui me permettent de dépasser la limitation de la feuille et de sélectionner seulement les cellules concernées par la formule.

    @Pierre Merci pour le lien avec les explications dans ton blog
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [XL-2010] Boucle VBA ou formule avec Copier Coller Image
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/07/2013, 15h16
  2. [VBA-E] problème avec une formule
    Par jamelie dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 25/04/2007, 11h13
  3. [VBA-Excel] Calcul d'une formule avec une inconnue
    Par micwiss dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/10/2006, 16h04
  4. [VBA Excel] sauvegarde avec le contenu de la formule
    Par comme de bien entendu dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/07/2006, 16h19
  5. Copier une formule avec vba
    Par NAMORJOSE dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/05/2006, 00h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo