+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  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 :
    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

    Homme Profil pro
    Engineering
    Inscrit en
    février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

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

    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
    .

  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 : 45
    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 :
    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 :
    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 : 45
    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 :
    ActiveCell.Formula = Formule
    ou
    Code :
    ActiveCell.FormulaLocal = Formule
    ou
    Code :
    ActiveCell.FormulaR1C1 = Formule
    ou
    Code :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •