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 :

Ecriture d'une fonction dans une cellule via VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1
    Par défaut Ecriture d'une fonction dans une cellule via VBA
    Bonjour,

    Je souhaiterais écrire cette ligne dans une cellule:

    = SI(fichierexiste("C:\Fichier1.xlsx");"OK";"File not found")

    Pour cela j'ai écrit le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CompleteRAWDataSheet.Cells(Ligne, 241) = "= SI(FichierExiste(" & Chr(34) & Liste_fichiers_forcheck(Numero_fichier) & Chr(34) & ");" & Chr(34) & "OK" & Chr(34) & ";" & Chr(34) & "File not found" & Chr(34) & ")"
    Où:

    1- CompleteRAWDataSheet est déclaré comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set CompleteRAWDataSheet = Application.ActiveWorkbook.Worksheets("Dynamic RAW Data")
    2- FichierExiste est la fonction Excel personnalisée codée comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function FichierExiste(nomfich As String) As Boolean
        FichierExiste = Dir(nomfich) <> ""
    End Function
    3- Liste_fichiers_forcheck(Numero_fichier) est le contenu de la case du tableau Liste_fichiers_forcheck qui est rempli grâce au code suivant:

    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
    With Recherche
     
        .FolderPath = Path
        .SubFolders = False
        .SortBy = sort_Name
        .Execute
        Nombre_fichiers = .FoundFilesCount
     
        ReDim Liste_fichiers(Nombre_fichiers)
        ReDim Liste_fichiers_forcheck(Nombre_fichiers)
     
        'Détermine le chemin complet du fichier
        For i = 1 To .FoundFilesCount
            'File_Path = .Files(i).strPathName & "\[" & .Files(i).strFileName & "]"
            File_Path_forcheck = .Files(i).strPathName & "\" & .Files(i).strFileName
            'Liste_fichiers(Numero_fichier) = File_Path
            Liste_fichiers_forcheck(Numero_fichier) = File_Path_forcheck
            Numero_fichier = Numero_fichier + 1
        Next
     
    End With
    Mon soucis est qu'arriver sur cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CompleteRAWDataSheet.Cells(Ligne, 241) = "= SI(FichierExiste(" & Chr(34) & Liste_fichiers_forcheck(Numero_fichier) & Chr(34) & ");" & Chr(34) & "OK" & Chr(34) & ";" & Chr(34) & "File not found" & Chr(34) & ")"
    Excel me signale une erreur 1044: Erreur definie par l'action ou par l'objet

    Et cela ne m'aide pas beaucoup...

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    salut
    si tu veux attribuer à une cellule une fonction depuis VBA :
    - Voir FormulaLocal dans l'aide si tu veux l'écrire en français
    - voir Formula si non, mais alors : en anglais (IF = SI etc...)

    EDIT : et je te conseille l'emploi de Formula et donc de l'anglais (surtout si ton appli doit être distribuée)

  3. #3
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Bonjour,
    Avec des virgules à la place des points-virgules ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CompleteRAWDataSheet.Cells(Ligne, 241) = "= SI(FichierExiste(" & Chr(34) & Liste_fichiers_forcheck(Numero_fichier) & Chr(34) & ")," & Chr(34) & "OK" & Chr(34) & "," & Chr(34) & "File not found" & Chr(34) & ")"
    La ligne pourrait être allégée en doublant les guillemets à la place de concaténer Chr(34) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CompleteRAWDataSheet.Cells(Ligne, 241) = "= SI(FichierExiste(""" & Liste_fichiers_forcheck(Numero_fichier) & """),""OK"",""File not found"")"

  4. #4
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    ted01,

    As-tu testé le contenu de la cellule dans Excel?

    Sans préciser la propriété FormulaLocal, tu dois rédiger la formule avec les noms anglais des fonctions, donc, cela m'étonnerait que SI soit accepté dans la syntaxe que tu emploies...
    "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
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Bonjour Pierre,
    Je sais que c'est bizarre mais ça a fonctionné, il a reconnu la fonction SI(), mais converti les virgules en points-virgules...
    Par contre sur le principe tu as tout à fait raison, c'est plus propre :-)

  6. #6
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    C'est "amusant" car sur mon 2010 français, il me met systématiquement une erreur #NOM? lorsque j'introduis une fonction en français...

    Je vais tester deux trois trucs pour tenter de comprendre le pourquoi du comment.

    A titre d'infos, pourrais-tu tester avec d'autres fonctions en français?

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

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Réponses: 8
    Dernier message: 10/01/2007, 21h10
  5. [PHP-JS] une fonction dans une fonction
    Par lodan dans le forum Langage
    Réponses: 6
    Dernier message: 25/06/2006, 19h14

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