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 :

Définir un nombre de variable dynamiquement


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 338
    Points : 153
    Points
    153
    Par défaut Définir un nombre de variable dynamiquement
    Bonjour,

    Est-il possible de définir un nombre de variable en fonction du nombre de fichier importé ?

    Pour mieux comprendre j'importe des données contenues dans divers fichiers txt contenus dans un même répertoire. Le nombre de ces fichiers txt peuvent varier d'un répertoire à l'autre.

    Les données récupérées sont organisés en tableaux (1 tableau=1fichier txt) est-il possible de définir le nombre de tableaux en fonction du nombre de fichiers txt contenus dans le répertoire ? Si oui comment procéder ?

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Dans ton cas, je ferais une boucle qui pour chaque fichier du répertoire alimentera ma variable. (1 seule variable quelque soit le nombre de fichier)


    exemple : ce code affiche en colonne A le nom des fichiers xls à la racine C
    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
    Dim fso As Object
    Dim FsoRepertoire As Object
    Dim FsoFichier As Object
    Dim i As Long
     
    Dim str() As String
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set FsoRepertoire = fso.GetFolder("C:\")
     
     
    'Boucle sur fichiers du repertoire
    i = 1
    For Each FsoFichier In FsoRepertoire.Files
        str = Split(FsoFichier.Name, ".")
        If str(UBound(str)) = "xls" Then
            Range("A" & i).Value = FsoFichier.Path
            i = i + 1
        End If
    Next

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut
    Bonjour,

    une autre approche via une fonction renvoyant un tableau (liste de fichiers) :
    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
    Function DirList(SpecFic, Optional Dossier = "", Optional Attrib As VbFileAttribute = vbNormal)
             If Dossier > "" And Right(Dossier, 1) <> "\" And _
                                  Left(SpecFic, 1) <> "\" Then Dossier = Dossier & "\"
     
             F = Dir(Dossier & SpecFic, Attrib)
             U = -(F > "")
             ReDim T(U To U) As String
     
             Do Until F = ""
                ReDim Preserve T(1 To U)
                T(U) = Dossier & F
                   F = Dir
                   U = U + 1
             Loop
     
             DirList = T
    End Function
     
     
    Private Sub Demo()
        L = DirList("*.txt", "D:\Tests")
     
        For N = 1 To UBound(L)
            Debug.Print Format(N, "@@@  "); L(N)
        Next
    End Sub
    Dans la procédure Demo, UBound(L) en ligne n°23 renvoie le nombre de fichiers contenus dans la liste (tableau) L

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 338
    Points : 153
    Points
    153
    Par défaut
    Bonjour pour ces réponses :

    En fait je pense avoir mal exposé mon problème

    J'ai un répertoire qui contient plus ou moins de fichiers textes.

    De ces fichiers textes j'extrait un certain nombre de valeurs.

    A partir des valeurs extraites je veux tracer une courbe pour cela j'ai une fonction complexe qui utilise les valeurs extraites du fichier texte et qui utilise une variable x (variable de 1900 à 2300)

    Chaque fichier texte permet de tracer une fonction et le but est de calculer les valeurs pour chaque fonction dans un tableau.

    Je cherche donc à obtenir autant de variables que j'ai de fichiers txt pour calculer chaque fonction et ainsi tracer chaque fonction

    Ais-je été plus précis ?

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 338
    Points : 153
    Points
    153
    Par défaut
    Bon je n'ai pas trouvé la solution mais j'ai triché en n'utilisant pas de tableaux mais en calculant et collant les valeurs dans mon classeur excel

  6. #6
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 94
    Points : 173
    Points
    173
    Par défaut
    Que je sache, on ne peut pas définir dynamiquement des variables, peut-être en méta programmation, mais ma connaissance sur ce sujet s'arrête à son nom. Ou alors passer par des objets de type chaîne mais ce n'est pas forcément pratique.

    Par contre on peut définir en vba des tableaux à plusieurs dimensions sans soucis. On peut donc faire un tableau... de tableaux. Par exemple, imaginons que tes fichiers txt te fournissent chacun un tableau à deux dimensions, il suffit de déclarer un tableau à trois dimensions.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Pour créer dynamiquement une variable, tu peux utiliser un tableau que tu redimensionne en fonction du nombre de fichier.
    Si tu as besoin de quelque chose de plus compliqué, tu peux créer ton propre type de variable
    Si tu compliques encore, utilise une Class allié avec une collection mais on n’en ait pas en cor là.
    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
    Type MyTableu
        Variable1 As Long
        Variable2 As String
        Variable3 As Boolean
    End Type
    Sub a()
     
     
    Dim TableauFichierText() As String
    Dim TableauFichierText2() As MyTableu
    Dim I As Long
    For I = 0 To 10
        ReDim Preserve TableauFichierText(I)
        ReDim Preserve TableauFichierText2(I)
        TableauFichierText(I) = "Fichier" & CStr(I)
        TableauFichierText2(I).Variable2 = "Fichier" & CStr(I)
    Next
    End Sub
    Dernière modification par Invité ; 24/05/2013 à 12h46.

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

Discussions similaires

  1. Définir variable dynamique
    Par synergie35 dans le forum C
    Réponses: 2
    Dernier message: 10/11/2014, 15h42
  2. mod_jk: définir un nombre dynamique de serveurs
    Par FrenchFrogger dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 13/08/2009, 13h51
  3. nombre des variables dynamique dans une fonction
    Par Abdelkaoui dans le forum C
    Réponses: 10
    Dernier message: 29/02/2008, 15h37
  4. Récupération de variables dynamiques complexes
    Par ludoboy dans le forum ASP
    Réponses: 7
    Dernier message: 24/05/2004, 17h51
  5. [LG]Problême Variable dynamique de types différents
    Par pierrOPSG dans le forum Langage
    Réponses: 2
    Dernier message: 29/04/2004, 16h01

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