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 :

Formule VBA avec variable à l'ensemble d'une colonne en fonction de la ligne [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Actif ouais
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Actif ouais

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Par défaut Formule VBA avec variable à l'ensemble d'une colonne en fonction de la ligne
    Bonjour,

    Je souhaite créer une colonne avec en-tete et format OK
    Appliquer une formule et l'étendre sur toute la colonne OK

    La ou je bloque, c'est comment faire de "BF3" une variable en fonction de la ligne.


    (BX= VOIE POSTAL et BF= la valeur à modifier) 3 avec 3, 4 avec 4 etc.. et non pas qu'elle recopie simplement la formule qui contient "BF3" a l'ensemble de colonne.

    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub ajouter_colonne()
     
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Dim tbl As ListObject
    Set tbl = ws.ListObjects("Tableau1")
     
    tbl.ListColumns.Add.Name = "VOIE POSTAL" 'créer une colonne et lui donne un nom en tete
    tbl.DataBodyRange.NumberFormat = "General" 'decide du format des cellules de la colonne
     
    Range("Tableau1[VOIE POSTAL]").Formula = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(ws.Range("BF3").Value, "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", ""), "0", "")
     
    End Sub
    Merci pour votre temps et vos éclairages.

  2. #2
    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.

    Je n'ai rien compris ^^
    "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...
    ---------------

  3. #3
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour à tous

    Pas bien compris non plus mais quelques remarques

    Le texte d'une formule doit être entre "" sinon c'est le résultat et non la formule qui est inscrit

    Si une variable doit être introduite, le texte de la formule doit être découpé afin de concaténer la variable

    Ce qui donnerait par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("Tableau1[VOIE POSTAL]").FormulaLocal = "=SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(" _
    & ws.Range("BF3").Address & "; ""1""; """"); ""2""; """"); ""3""; """"); ""4""; """"); ""5""; """"); ""6""; """"); ""7""; """"); ""8""; """"); ""9""; """"); ""0""; """")"

  4. #4
    Membre averti
    Homme Profil pro
    Actif ouais
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Actif ouais

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Par défaut
    Arf, merci quand même. Je vais tacher d’être plus clair.

    Mon code fonctionne, il ne faut surtout pas mettre de guillemet justement, je veux le résultat de la formule.

    Et cela marche parfaitement pour la ligne 3. Cependant, la formule s’étend sur toute la colonne. Alors je souhaite qu’à la ligne 4, ma formule «*devine*» qu’il faut qu’elle modifie dans ma formule «*BF3*» en «*BF4*» tout simplement.

    Ton idee de concaténation ne me semble pas résoudre ce problème, puisque tu indiques quand même «*BF3*», tu ne transformes pas cette partie en variable.

  5. #5
    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
    Le code de Chris fonctionne presque puisque l'on passe la formule. Elle va donc s'appliquer à toute la colonne (un peu comme si tu saisissais la formule dans Excel


    Par contre, Range("BF3").Address inclut l'adresse Absolue ($BF$3) dans la formule. Pour que BF3 s'incrémente automatiquement, il faudrait utiliser Range("BF3").Address(False, False). Perso, j'aurais saisi directement BF3 dans le texte. De plus, il n'est pas nécessaire d'encadrer les chiffres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("tableau1[voie postal]").Formula = "=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(BF3,1,""""),2,""""),3,""""),4,""""),5,""""),6,""""),7,""""),8,""""),9,""""),0,"""")"

    Tu ne spécifies pas ta version. Pour la 365, tu pourrais utiliser REDUCE et LAMBDA...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("tableau1[voie postal]").Formula = "=REDUCE(BF3,{1;2;3;4;5;6;7;8;9;0},LAMBDA(a,b,SUBSTITUTE(a,b,"""")))"

    Nom : 2022-03-18_204703.png
Affichages : 185
Taille : 89,7 Ko


    Voir ma contribution pour l'explication
    "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. #6
    Membre averti
    Homme Profil pro
    Actif ouais
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Actif ouais

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("tableau1[voie postal]").Formula = "=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(BF3,1,""""),2,""""),3,""""),4,""""),5,""""),6,""""),7,""""),8,""""),9,""""),0,"""")"
    Merci, j'ai pas 365 la formule fonctionne parfaitement cependant lorsque je veux faire avec une lettre, comment dois-je gérer mes quotes ? parce que si je mets "A" la formule ne fonctionne plus.

    J'ai testé le rangebf3.address(false, false) cela ne fonctionne pas.

  7. #7
    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
    Tu dois doubler les quotes qui entourent le texte, comme Chris l'avait fait dans sa formule.

    Code excel : Sélectionner tout - Visualiser dans une fenêtre à part
    ...FormulaLocal = "substitue(substitue(bf3,""a"","""");""b"",""""))
    "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...
    ---------------

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/04/2021, 19h51
  2. Réponses: 4
    Dernier message: 02/06/2016, 10h04
  3. [XL-2013] Formule R1C1 en VBA avec variable
    Par Ghost0000 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 18/02/2016, 17h05
  4. [Toutes versions] formule vba avec nom de feuille variable
    Par leptitdave dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/08/2009, 11h30
  5. [VBA-E] Suppression du contenu d'une colonne sans perdre ses formules
    Par mardona dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/04/2007, 09h08

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