p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Nouveau Membre du Club
    Inscrit en
    mars 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : mars 2008
    Messages : 128
    Points : 34
    Points
    34

    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 Confirmé Sénior
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : février 2008
    Messages : 3 900
    Points : 7 765
    Points
    7 765

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

    Hormis pour me demander mon numéro de compte afin d'y effectuer un versement, évitez de m'envoyer vos questions par MP, merci d'avance
    En posant une question on risque d'avoir l'air idiot cinq minutes. En n'en posant pas, on risque de le rester toute sa vie (proverbe chinois)

  3. #3
    Rédacteur


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

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

    Informations forums :
    Inscription : juin 2002
    Messages : 3 841
    Points : 9 058
    Points
    9 058

    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 Expert
    Avatar de JackOuYA
    Inscrit en
    juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : juin 2008
    Messages : 1 040
    Points : 1 184
    Points
    1 184

    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
    Rédacteur


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

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

    Informations forums :
    Inscription : juin 2002
    Messages : 3 841
    Points : 9 058
    Points
    9 058

    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 Expert
    Avatar de JackOuYA
    Inscrit en
    juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : juin 2008
    Messages : 1 040
    Points : 1 184
    Points
    1 184

    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
    Nouveau Membre du Club
    Inscrit en
    mars 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : mars 2008
    Messages : 128
    Points : 34
    Points
    34

    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

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

Discussions similaires

  1. [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
  2. Réponses: 2
    Dernier message: 08/01/2014, 11h47
  3. [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
  4. Inscrire une formule dans une cellule par VBA
    Par marc56 dans le forum Excel
    Réponses: 6
    Dernier message: 23/11/2008, 23h57
  5. Insérer une formule dans une cellule Excel via VBA
    Par *.Har(d)t dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/05/2007, 16h44

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