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 :

entrer une variable par l'utilisateur


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 16
    Points
    16
    Par défaut entrer une variable par l'utilisateur
    Bonjour le forum ;
    j'ai écrit une macro sous excel qui ouvrent un certain nombre de fichier, extrait des informations de ces fichiers pour remplir d'autres fichiers et les enregistrer dans un repertoire donné.

    Mon soucis , c'est comme les adresses de tous ces workboobs sont mentionnées dans la macro elle meme, je suis obligée de laisser tous les fichiers dans un repertoire fixe , une fois je les met ailleurs , je suis obligée de modifier les emlacement dans ma macro.

    j'aimerai trouver un petit code , qui une fois le programme lancé, me demande d'entrer l'adresse du repertoire que j'utilise, l'enregistre comme variable et c'est cette adresse precise que je vais utiliser à la place des adresse fixes, ce qui m'évitera de modifier ma macro tout le temps


    merciiii
    à plus

  2. #2
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bonjour

    Pour un repertoire j'utilise ceci


    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
    Sub ChoixRepertoire(chemin As String)
    Dim objShell As Object, objFolder As Object, oFolderItem As Object
     
     
     Set objShell = CreateObject("Shell.Application")
     Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
     
     On Error GoTo gester
     
     Set oFolderItem = objFolder.Items.Item
     chemin = oFolderItem.Path
     Exit Sub
    gester::
    chemin = "C:\repertoire par defaut"
    End Sub

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    J'ai essayé ce petit code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ADRESSE = InputBox("veuillez taper l'adresse de votre repertoire")
     
    Workbooks.Open "ADRESSE\test-14 aout\gestion.xls"
    la fenetre inputBox me demandant d'entrer l'adresse ou le chemin s'affiche et je peux entrer ma variable sans problème, c'est sur la ligne
    Workbooks.Open "ADRESSE\test-14 aout\gestion.xls"

    qu'il y'a une erreur de sytaxe , des idées pour la corriger
    merciii

  4. #4
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    ben je doute que ton chemin soit
    "ADRESSE\test-14 aout\gestion.xls"
    Comment veux tu qu'excel sache que ADDRESSE est une variable. J'ai une variable "a" dans mon code je ne veux pas avoir ca valeur à chaque fois que je met un "a" dans une chaine de caractère

    Si tu veux récupérer la valeur de la variable adresse il faut faire de la concaténation de chaine de caractère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ADRESSE & "\test-14 aout\gestion.xls"
    Mais ta méthode oblige l'utilisateur a taper le chemin du répertoire sans se planter a chaque fois à mon avis tu ferais mieux d'essayer le code précédent

    Edit : Preum's

  5. #5
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    SAlut,

    Workbooks.Open (ADRESSE & "\test-14 aout\gestion.xls")

    Par contre à ta place j'utiliserai le code que t'as donnée Krovax, car le soucis d'une imputbox c'est que tu risques d'avoir tout et n'importe quoi en entrée...

    Il y a la possibilité d'utiliser des boites de dialoque pour spécifier un chemin d'accès:

    un exemple sur un controle ;

    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
     
    Private Const BIF_RETURNONLYFSDIRS = 1
    Private Const BIF_DONTGOBELOWDOMAIN = 2
     
    Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
    Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, _
        ByVal lpBuffer As String) As Long
    Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, _
        ByVal lpString2 As String) As Long
     
    Private Type BrowseInfo
        hWndOwner As Long
        pIDLRoot As Long
        pszDisplayName As Long
        lpszTitle As Long
         ulFlags As Long
        lpfnCallback As Long
        lParam As Long
        iImage As Long
    End Type
     
    Private Sub cmd_parcourir_Click()
        txt_dossier.Value = SelectFolder("Veuillez choisir le dossier de destincation du projet", 0)
    End Sub
     
    'choix du dossier de destination
    Public Function SelectFolder(Titre As String, Handle As Long) As String
        Dim lpIDList As Long
        Dim strBuffer As String
        Dim strTitre As String
        Dim tBrowseInfo As BrowseInfo
     
        strTitre = Titre
        With tBrowseInfo
            .pszDisplayName = False
            .hWndOwner = Handle
            .lpszTitle = lstrcat(strTitre, "")
            .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
        End With
     
        lpIDList = SHBrowseForFolder(tBrowseInfo)
     
        If (lpIDList) Then
            strBuffer = String(260, vbNullChar)
            SHGetPathFromIDList lpIDList, strBuffer
            SelectFolder = Left(strBuffer, InStr(strBuffer, vbNullChar) - 1)
        End If
    End Function
    Exemple trouvé dans les FAQ ou dans les sources Excel adapté à un exemple

    RE-EDIT: Je me fais vieux

  6. #6
    Membre habitué Avatar de amerex
    Homme Profil pro
    Analyste Support et Développement
    Inscrit en
    Septembre 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste Support et Développement
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 246
    Points : 148
    Points
    148
    Par défaut
    Personnellement, dans mes applications Excel, j'utilise très souvent une feuille que je nomme par exemple "CONFIG" ou "SETTINGS". Cette feuille est masquée, mais elle me permet de stocker des données pour les utilisations ultérieures.

    Pour ta demande d'inscrire l'arborescence des fichiers, j'utiliserait ma méthode. Dans la feuille cachée, choisi une cellule fixe; par exemple: B1. Tu sais que dans B1, ce sera TOUJOURS le chemin vers tes fichiers. Donc quandtu iras chercher ta variable CHEMIN:
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim CHEMIN as String
    CHEMIN = Sheets("SETTINGS").Range("B1").Value

    Mais si tu déplaces les fichiers, la valeur de B1 ne sera plus bonne. Alors je te suggère de faire un petit evènement tout simple, à l'ouverture du classeur:

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    On Error Goto err1
    'Saisie de ton code...
    Exit Sub
     
    err1:
     Sheets("SETTINGS").Range("B1").Value = InputBox("Le chemin n'est plus valide, veuillez indiquer le nouveau chemin")

    Bonne Chance!

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/03/2014, 14h33
  2. Réponses: 0
    Dernier message: 20/05/2009, 16h38
  3. Réponses: 16
    Dernier message: 04/01/2007, 13h40
  4. [PHP-JS] Limite d'une variable par un $_GET
    Par Tarteens dans le forum Langage
    Réponses: 1
    Dernier message: 15/09/2006, 14h25
  5. creation d'une fonction par l'utilisateur
    Par michelk dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 15/03/2005, 09h53

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