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 :

Appel d'une fonction [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 2
    Par défaut Appel d'une fonction
    Bonjour,
    Je suis nouveau en VBA, j'ai suivi un semestre (20aine d'heure au cnam) et je bloque sur l'appel d'une fonction.
    Le but étant, dans un dossier, d'ouvrir des fichiers un par un et, par fichier, d'alimenter un tableau VBA tampon.
    Le code bloque sur

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Public Sub BoucleFichiers()
        Dim Dossier As String, Fichier As String
    
        'Définir le répertoire contenant les fichiers
        Dossier = "F:\T2RQ\0_Doc d'entrée\Echantillon\Etape 2\"
    
        'Boucler sur tous les fichiers xlsx du répertoire
        Fichier = Dir(Dossier & "*.xlsx")
    
        Do While Len(Fichier) > 0
            'écrit le résultat dans le fenêtre d'exécution (Ctrl + G)
            Debug.Print Dossier & Fichier
            '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''MA MACRO (début)
            Dim WB As Workbook
                    
            Set WB = Workbooks.Open(Dossier & Fichier)
            'ReadOnly:=True
        
            '' Action extraction de l'information
            ' D'abords, le tableau qui servira à l'affectation des données
            Dim TabTampon()
            Dim NombreFRQ As Integer
            NombreFRQ Dossier
            ReDim TabTampon(NombreFRQ, 7)
            
            TabTampon(0) = Range("C8") 'IP
            TabTampon(1) = Range("J7") 'Ligne
            TabTampon(2) = Range("J10") 'Voie
            TabTampon(3) = Range("C10") 'BV
            TabTampon(4) = Range("J8") 'Gare
            TabTampon(5) = Range("AB7") 'Levé
            TabTampon(6) = Range("W7") 'Type
            TabTampon(7) = Range("G14") 'Risque
               
            'Passer à la ligne suivante dans mon tableau tampon
            '?
               
            '' Action extraction de l'information (fin)
            WB.Close True
            
            Set WB = Nothing
            
            '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''MA MACRO (fin)
            Fichier = Dir()
        Loop
    
    End Sub
    
    Function NombreFRQ(ByVal Dossier As String) As Integer
        Dim FSO As Object
     
        Set FSO = CreateObject("Scripting.FileSystemObject")
        NombreFRQ = FSO.GetFolder(Dossier).Files.Count
     
        Set FSO = Nothing
    End Function
    Merci pour votre aide

  2. #2
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Le résultat d'une fonction doit être placé dans une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim intResult As Integer
    intResult = NombreFRQ(Dossier)
    De plus, évite de nommer des variables du même nom qu'une fonction.

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 2
    Par défaut
    Merci beaucoup pijaku

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par pierram Voir le message
    je bloque sur l'appel d'une fonction.

    Le code bloque sur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    NombreFRQ Dossier
    ReDim TabTampon(NombreFRQ, 7)
    [...]
    End Sub
     
    Function NombreFRQ(ByVal Dossier As String) As Integer
       Dim FSO As Object
       Set FSO = CreateObject("Scripting.FileSystemObject")
       NombreFRQ = FSO.GetFolder(Dossier).Files.Count
       Set FSO = Nothing
    End Function
    A priori, NombreFRQ est une Function, c'est-à-dire un ensemble d'instruction à qui on transmet (ou pas) des paramètre et qui renvoie une valeur.

    Dans ton code, tu la traites comme une instruction, c'est-à-dire comme un code qui réalise une action.
    Ce n'est pas le cas. Il faut la considérer, en quelque sorte, comme une valeur.
    Or, une valeur ne réalise pas d'action par elle-même. Généralement, elle est transmise à une instruction qui elle réalise une action.
    Par exemple, elle peut être transmise à une variable.

    Je suppose (sans certitude) que le résultat de cette fonction est utilisé pour redimensionner la variable TabTampon.
    Dans ce cas, il faut l'utiliser dans cette instruction.
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim TabTampon(NombreFRQ(Dossier), 7)
    Pour en savoir plus sur les fonctions :
    https://msdn.microsoft.com/en-us/VBA...tion-statement
    https://silkyroad.developpez.com/vba/fonctions/

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je me demande en outre personnellement comment on peut traiter sur une seule dimension un tableau déclaré en deux dimensions

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Et par ailleurs :
    - appeler en boucle une fonction qui, de surcroît, retournera toujours la même valeur, est plus qu'étrange
    - la fonction elle-même est inutile (puisque l'on parcourt le dossier en boucle, un redim preserve du tableau est simplement de mise)

    Encore que : --->>
    L'exposé, enfin, n'est pas très clair. On voit mal si l'aboutissant est un tableau où les données de chaque fichier sont en colonnes ou s'il est un tableau dont les données de chaque fichier viennent en lignes (les unes à la suite des autres) de la seule colonne 1.
    J'ai comme l'impression que la première hypothèse est la plus probable.

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

Discussions similaires

  1. appel d'une fonction à partir d'un popup
    Par villeneuvejsp dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/12/2004, 17h00
  2. Appel d'une fonction
    Par georgeabitbol dans le forum ASP
    Réponses: 4
    Dernier message: 08/07/2004, 14h29
  3. Réponses: 4
    Dernier message: 02/06/2004, 16h35
  4. Appel d'une fonction
    Par jfphan dans le forum ASP
    Réponses: 4
    Dernier message: 14/04/2004, 15h06
  5. A la recherche de l'appel d'une fonction...
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 24/09/2003, 12h34

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