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 :

Modification formule par macro


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Modification formule par macro
    Je souhaiterais remplacer la formule presente dans la cellule A1 (par exemple =B1/B2) par une formule du type :

    Etant donné que j'ai un gd nombre de cellules de ce type à modifier, est il possible de le faire par VBA ?

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2007
    Messages : 120
    Points : 181
    Points
    181
    Par défaut
    Salut le forum

    A adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A5").Formula = "=IF(C1<>"""",C1,B1/B2)"
    Mytå_Qc

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Désolé, je me suis mal exprimé.
    Les cellules de la colonne A contiennent, toutes des formules DIFFERENTES.
    Je souhaite qu'à ces cellules soit appliqué leur formule initiale seulement si la cellule adjacente en colonne B est vide, sinon je retiens pour ces cellules la valeur de la cellule adjacente :

    Contenu initial de la cellule :

    Contenu souhaité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI (cellule adjacente<>"";cellule adjacente;=maformule)

  4. #4
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 903
    Points
    55 903
    Billets dans le blog
    131
    Par défaut
    Bonjour, et bienvenue sur les forums de DVP

    Dans ce cas, on peut analyser le problème en disant:
    Si la cellule adjacente n'est pas vide, on met la valeur de la cellule adjacente, sinon, on ne touche à rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Boucle()
        Dim Cellule As Range
     
        For Each Cellule In Range("a1:a3")
            If Cellule(1, 2) <> "" Then Cellule.Value = Cellule(1, 2).Value
        Next Cellule
    End Sub
    en adaptant la plage sur laquelle boucler.

    Ok?
    "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...
    ---------------

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Non, ca ne va pas.
    les cellules en colonne B me servent à forcer TEMPORAIREMENT la valeur de la cellule adjacente en colonne A.
    Je souhaite donc qu'en effacant le contenu de la cellule en colonne B, la cellule en colonne A retrouve sa formule initiale.

  6. #6
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 903
    Points
    55 903
    Billets dans le blog
    131
    Par défaut
    Tu ne peux forcément pas avoir en A une formule qui pointe sur A. Cela s'appelle une référence circulaire. En clair, tu ne peux pas avoir en A1
    . Or, c'est ce que tu te proposes d'essayer de mettre en place avec une macro.

    Donc, tu dois stocker les contenus de A dans une autre feuille avant de les remplacer par les valeurs de B, pour pouvoir aller les rechercher lorsque tu vides B. Il te faut donc une feuille supplémentaire où stocker les valeurs de A.

    Après, il faudra jouer avec l'évènement CHANGE pour tester que l'on vide ou que l'on remplit B et stocker la valeur de A dans la feuille supplémentaire ou rapatrier l'ancienne valeur de A sauvegardée sur la feuille supplémentaire.

    Il n'y a pas d'autre solution que celle-là, à mon avis.
    "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...
    ---------------

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Je pense que je ne m'exprime pas clairement :
    les formules actuelles en colonne A ne comportent pas de ref circulaires.
    je veux simplement dorénavant que ces formules ne soient appliquées que si la cellule adjacente est vide.
    Je souhaite donc modifier les formules des cellules en A :
    pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI (cellule adjacente<>"";cellule adjacente;=maformule)
    par exemple un code VBA du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub nouv()
    Dim adr As String
        chaineadr = Range("a15").FormulaLocal
        chaine_non_modif = ActiveCell.FormulaLocal
        chaine_modif = chaine_non_modif & "+" & Mid(chaineadr, 2)
        ActiveCell.Clear
        ActiveCell.FormulaLocal = chaine_modif
    End Sub
    Ce code marche mais j'ai du mal à l'adapter à la formule que je souhaite (syntaxe)

  8. #8
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 903
    Points
    55 903
    Billets dans le blog
    131
    Par défaut
    C'est peut-être moi qui ne comprenais pas...

    Essaie le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Boucle()
        Dim Cellule As Range
        Dim Formule As String
     
        For Each Cellule In Range("a1:a3")
            Formule = Replace(Cellule.Formula, "=", "")
            Formule = "=if(" & Cellule(1, 2).Address & "<>""""," & Cellule(1, 2).Address & "," & Formule & ")"
            Cellule.Formula = Formule
        Next Cellule
    End Sub
    Idéalement, il faudrait tester que la cellule en A comporte bien une formule en incluant la modification dans une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Cellule.HasFormula Then
        ...
        ...
    End If
    Mais cela dépend du contexte dans lequel tu te trouves.

    Cela répond-il à ton besoin?
    "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...
    ---------------

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    c'est parfait !
    Merci de ton aide.

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

Discussions similaires

  1. Addition de différentes plages de cellules avec une formule par macro
    Par LaeticiaM dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/11/2014, 14h56
  2. [XL-2003] Problème de remplissage de formule par macro
    Par Ektha dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/01/2010, 14h50
  3. [VBA][E-03] Modification de formules par Macro
    Par Jibicas dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/06/2008, 12h01
  4. Insertion de formule par macro
    Par Lechette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/04/2008, 09h59
  5. Collage de la formule par macro
    Par Lechette dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 31/03/2008, 17h04

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