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

Excel Discussion :

Insérer une formule par VBA


Sujet :

Excel

  1. #1
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 169
    Points : 68
    Points
    68
    Par défaut Insérer une formule par VBA
    Bonjour,
    J'ai besoin de modifier la formule contenue dans plusieurs centaines de fichiers et bien sûr pas question de le faire à la main.
    J'ai essayé diverses méthodes, mais cela se termine en général par une erreur 1004.
    Je fait cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("K3").Select
    Formule = "=SI(GAUCHE(CELLULE(""Filename"");NBCAR(DATA!J4))=DATA!J4;RECHERCHEV(CONCATENER(" & "K4" & ";"" "";" & "K5" & ";""."";" & "K6" & ");INDIRECT.EXT(DATA!J1);7;FAUX);"""")"
    ActiveCell.FormulaR1C1 = Formule
    Quand j'insère le texte de la variable cela marche, mais par vba cela se termine par 1004.
    Avez-vous une idées.
    Merci de votre aide

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Il y a 4 méthodes pour insérer une formule dans une cellule via VBA
    • Range("A1").Formula --> écrire la formule, en utilisant les références du style A1, dans la langue de VBA (anglais) et elle s'adaptera à la langue de l'application
    • Range("A1").FormulaLocal --> écrire la formule, en utilisant les références de style A1, dans la langue de l'application, dans ton cas le français (va planter si on passe le fichier sur un Excel d'une autre langue)
    • Range("A1").FormulaR1C1 --> écrire la formule, en utilisant les références du style R1C1, dans la langue de VBA
    • Range("A1").FormulaR1C1Local --> écrire la formule, en utilisant les références du style R1C1, dans la langue de l'application

    Tu devrais rapidement trouver la méthode qui s'applique à ta formule
    .
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  3. #3
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Sinon, je t'invite à rechercher dans ...
    C:\Program Files\Microsoft Office\Officexx\1036\VBAList.xls
    (où le xx est un nombre. Par exemple Office11 au lieu de Officexx)
    Ce fichier contient les correspondance FR-US
    des mots utilisés dans le VBA
    des fonctions de feuilles de calcul
    des fonctions de macros XL 4
    Maintenant que tu l'as, réécris ta formule en utilisant les noms de fonction US !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Formule = "=IF(LEFT(CELL(""Filename"");LEN(DATA!J4))=DATA!J4;VLOOKUP(CONCATENATE(K4;"" "";K5;""."";K6);INDIRECT.EXT(DATA!J1);7;FALSE);"""")"
    ActiveCell.FormulaR1C1 = Formule
    Devrait donc donner quelque chose de pas trop mal


    Enfin, pour terminer, un truc qui ne mange pas de pain :
    Lance l'enregistreur de macro
    Enregistre la saisie de la formule
    Un bon vieux copier-coller pour récupérer la ligne, et c'est parti mon kiki !

  4. #4
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    Bonsoir,

    Citation Envoyé par Maxence HUBICHE Voir le message
    ...Maintenant que tu l'as, réécris ta formule en utilisant les noms de fonction US !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Formule = [COLOR=#ff0000]"=IF...
    ...
    Formule il faut aussi l'écrire en "US" comme nous la dit plus haut Fring ...
    JacqueS.

    Ps: je ne télécharge les piéces jointes qu'en dernier recours .(et encore...)

    Pour devenir mon ami laissez moi un message

  5. #5
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    euh ....
    Ben non !
    Parce que, comme Formule est une simple variable, il lui donne le nom qu'il veut !

    Ce qu'indique Fring, c'est le nom des différente prépriétés d'un objet de type Range, donc cela ne fonctionne que pour la ligne suivante...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Formula = Formule
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaLocal = Formule
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaR1C1 = Formule
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveCell.FormulaR1C1Local = Formule

    Mais, pour continuer les indications de Fring, on n'utilise le suffixe Local que lorsqu'on veut utiliser une formule dans la langue de l'application (chez nous vraissemblablement FR), alors que, sans le suffixe Local, on écrit FORCEMENT en US.
    Et, comme l'a fait remarquer Fring, le suffixe LOCAL induit une perte de portabilité du code. Il est donc à éviter !

    CQFD

  6. #6
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    Oui désolé c'est pas Formule qui est une erreur mais l'utilisation de FormulaR1C1 à la place de Formula
    JacqueS.

    Ps: je ne télécharge les piéces jointes qu'en dernier recours .(et encore...)

    Pour devenir mon ami laissez moi un message

  7. #7
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 169
    Points : 68
    Points
    68
    Par défaut J'ai résolu
    Bonjour,
    D'abord merci pour vos réponses.
    J'ai trouvé finalement la solution avant de vous lire.
    J'ai fait comme cela :
    Range("N4").Select
    Formule = "=IF(LEFT(CELL(""Filename""),LEN(DATA!" & "J4" & "))=DATA!" & "J4" & ",VLOOKUP(CONCATENATE(" & "K4" & ","" ""," & "K5" & ","".""," & " K6" & "),INDIRECT.EXT(DATA!" & "J1" & "),5,FALSE),"""")"
    ActiveCell.FormulaR1C1 = Formule


    en comme cela laisse des ' autour des références de cellules j'ai fait

    Range("K3:N7").Select
    Selection.Replace What:="'", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False


    Intellectuellement ce n'est pas satisfaisant, mais ça marche. Comme c'est à usage unique pour corriger une formule j'oublierai vite ma frustration

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2016
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Insérer une formule dans une cellule via du vba
    Bonjour,

    j'essaie d'insérer une formule dans une cellule excel via du VBA mais lorsque le code est exécuté, excel me renvoie une erreur de type 1004.
    Vous verrez que dans la formule, j'utilise des "noms" qui désignent des plages de cellules qui sont définis dans le fichier excel.

    Voici le code:

    Sub essai()

    Dim Ligne_002 As Variant

    Ligne_002 = "=CONCATENATE(Cell_Caisse;"";"";Signature_Day;"";"";C2;"";"";Y;"";"";E2;"";"";VLOOKUP(E2;REF;2);"";"";SUMPRODUCT((Assimilation_type=E2)*(D_L_Y));"";"";SUMPRODUCT((Assimilation_type=E2)*(I_L_Y)))"
    Sheets("DATA").Select
    Range("A2").Select
    Range("A2").Formula = Ligne_002

    End Sub


    Quelqu'un aurait il une idée?

    merci d'avance

    Yves

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

Discussions similaires

  1. Insérer une formule dans une cellule Excel via VBA
    Par *.Har(d)t dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/02/2020, 13h02
  2. [XL-2010] Remplacer nom de cellule par sa position absolue dans une formule par vba
    Par dar06 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/01/2014, 13h51
  3. Réponses: 2
    Dernier message: 08/01/2014, 11h47
  4. [XL-2003] Remplacer texte d'une formule par VBA
    Par Marc_27 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 10/08/2011, 14h21
  5. Inscrire une formule dans une cellule par VBA
    Par marc56 dans le forum Excel
    Réponses: 6
    Dernier message: 23/11/2008, 23h57

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