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 de formule en masse


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur VBA
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur VBA

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Par défaut Modification de formule en masse
    Bonjour à tous.

    Je veux effectuer une mise à jour de fichiers en masse. Ces fichiers sont totalement identiques en terme de calcul et de présentation mais bien entendu pas en terme de contenu.
    Ils se trouvent dans le même dossier.

    J'avais déjà effectué par le passé une mise à jour du style pour d'autres fichiers, mais là il y a qqch que je ne comprends pas.

    Lorsque je lance la mise à jour, elle s'effectue, mais à la place d'avoir une formule dans la cellule H18, j'ai à la place le contenu de la cellule d''à côté.
    wk.Sheets("Info").Range("H18").FormulaR1C1 = "=RC[-1]"
    Par exemple si dans G18 j'ai le mot "Pomme". Ce mot s'affiche dans ma cellule H18, et moi je voudrait "=G18".

    Ce qu'il y a de plus étonnant, lorsque je lance wka.Sheets("Info").Range("H18").FormulaR1C1 = "=RC[-1]" cela fonctionne, j'ai bel et bien "=G18" dans ma cellule.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Sub MajFormule()
     
        Dim wk As Workbook
        Dim wka As Workbook
        Set wka = ActiveWorkbook
     
        Dim chemin As String
        chemin = "C:\Test"
     
        'Choix du 1er fichier
        Fichier = Dir(chemin & "*.xlsm")
     
        'ON BOUCLE sur tous les FICHIERS excel du répertoire choisi
        Do While Len(Fichier) > 0
     
            If Fichier <> ThisWorkbook.name Then
                Set wk = Workbooks.Open(chemin & Fichier)
     
                wk.Sheets("Info").Range("H18").FormulaR1C1 = "=RC[-1]"
                wka.Sheets("Info").Range("H18").FormulaR1C1 = "=RC[-1]"
     
                wk.Close True
     
                Fichier = Dir() 'Sélectionne le fichier suivant
     
            End If
     
        Loop 'Remonte la boucle, prochain fichier
     
    End Sub
    Avez-vous une idée de ce qui se passe ?
    Merci d'avance à tous.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    alors activeworkbook est le classeur actif lorsque la ligne s'execute.

    Donc dans ton cas c'est avant que tu n'ouvres le classeur avec Open.

    FormulaR1C1 sert a ecrire une formule en approche relative, c'est a dire en precisant les coordonnees relatives a la cellule dans laquelle on ecrit la formule, par opposition a Formula, dans laquelle on ecrirait directement "=G18".
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ce n'est pas très clair,

    tu veux afficher "=" et y accoler l'adresse de la cellule située sur sa gauche ?

    si tel est le cas, afin de ne pas évaluer ce qui sera pour Excel une formule, il faut ajouter l'apostrophe ' devant

    exemple avec un travail sur la cellule active

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ActiveCell
        .Value = "'=" & .Offset(0, -1).Address(False, False)
    End With
    le fait que "ça fonctionne" dans un classeur et pas l'autre pourrait s'expliquer par la neutralisation du recalcul automatique ?

    merci de nous éclairer sur ton besoin exact

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur VBA
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur VBA

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Par défaut
    Merci pour vos réponses,
    En me relisant j'ai pensé que ma demande n'était pas très claire, donc voilà des captures d'écran pour être plus clair.

    Voilà ce que je désire, un calcul:
    Cela fonctionne lorsque je modifie le classeur actif (wka), mais pas lorsque je modifie les autres classeurs (wk)
    Pièce jointe 318140

    Voilà le résultat actuel. Je n'arrive pas à comprendre pourquoi la valeur de G18 s'écrit directement dans H18, je désire un calcul.
    Pièce jointe 318142

    J'ai essayé avec avec .Formula = "=G18", j'obtient le même résultat (écriture directe du mot Pomme.
    J'ai contrôlé, le calcul automatique est activé dans l'ensemble de mes fichiers.

  5. #5
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Tu veux quoi exactement comme resultat dans ta cellule H18 ?
    la formule ? la valeur ? mettre des pieces jointes est contre productif
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur VBA
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur VBA

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Par défaut
    Je viens de trouver...
    le problème n'était pas dans la procédure que je vous ai notée, mais dans mes fichiers Excel.xlsm

    J'ai une ligne de code complétement erronée qui dit
    (Range("Cell_Perso_Classement") est justement ma cellule H18 mais nommée avec une zone de nom)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        Range("Cell_Perso_Classement") = Range("Cell_Perso_Classement")  'La c'est vraiment faux,
        Sheets("zz").Select
    End Sub
    J'ai plus qu'à trouver une solution pour lancer une mise à jour de code en masse ;-)
    Il me semble que j'avais lu un fil sur ce sujet qq part dans ce site, je vais essayer de le retrouver.
    Merci d'avoir pris le temps de me répondre.
    ++ Wouana

  7. #7
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    il existe :

    - un tutoriel traitant de la manipulation du VBE, notamment modifier une macro par macro
    - pas mal de sujets dans ce forum où des solutions ont été proposées (changer la valeur de constantes déclarées ou de portions de procédures)

    de mon côté, un modeste billet de blog (projet inachevé ) où j'ai proposé un kit d'outillage avec surtout deux fonctions pour boucler sur des fichiers et remplacer des portions de chaines de code par des nouvelles
    https://www.developpez.net/forums/bl...ipulation-vbe/

Discussions similaires

  1. Problème de modification de formules Excel avec VBA.
    Par jayjay78 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/03/2010, 18h09
  2. Empêcher la modification des formules après ajout de feuilles.
    Par jojo86 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 17/10/2009, 19h58
  3. [XL-2003] modif de formule par VBA
    Par shadok6 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/04/2009, 18h16
  4. [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
  5. Modification de formule
    Par Kh3r0 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/05/2007, 16h07

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