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 :

Ouvrir un dossier depuis une liste de numéro sur une feuille ".xls" [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Ouvrir un dossier depuis une liste de numéro sur une feuille ".xls"
    Bonjour,
    je débute dans les macros (office 2003)et je souhaiterai en créer une qui ouvre des dossiers (le nom de ce dossier se trouve dans une liste ".xls".

    1 - j'ai une liste de numéro qui regroupe des "numéros d'essais" sur une feuille .xls
    exemple:
    E1001
    E1002
    E1003
    E1004
    E.... .

    2 - Donc, lorsque je sélectionne la cellule de mon tableau (.xls) qui contient le "E1002"

    3 - ensuite à l'aide d'un bouton (qui se trouve dans ma feuille .xls) j'active une macro qui ouvre CE dossier "E1002"
    (il faut prendre en compte uniquement les 5 premiers caractères E1002)

    MERCI POUR VOTRE AIDE

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2009
    Messages
    1 794
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 794
    Points : 3 094
    Points
    3 094
    Par défaut Précisions SVP
    Bonjour,

    Ce que vous appelez Dossier consiste en quoi?
    Un fichier .xls ou .doc ou ?
    Ou alors un dossier qui contient des fichiers?
    Il me semble qu'un peu plus d'explications est nécessaire.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    Il s'agit bien d'un dossier qui contient des fichiers qui peuvent être des .xls .doc .jpg

    Explications:
    Je m'occupe de gérer des essais réalisés sur différente machine, a chaque essai un fichier .pdf est crééé (description de l'essai) ce fichier est nommé : "E1002, ordre d'essai" ce fichier est enregistré dans un dossier nommé : "Ordres d'essais"

    Ensuite je créer un dossier nommé "E1002, mesure température"
    Ce dossier contiendra tous les documents nécessaire à la réalisation de l'essai. (.xls, .doc, .jpg, ....)
    Depuis un tableau récapitulatif des numéros d'ordres d'essais (.xls)
    Je souhaite ouvrir le dossier qui correspond au numéro d'essai selectionné dans ma liste afin de consulter les différents fichiers qu'il contient.

    Merci beaucoup!

    Bonjour,
    pas facile à expliquer mais peut-être avec un autre exemple:
    Dans mon classeur .xls (liste des essais) je selectionne le numéro (exemple :E1002) et j'active ma macro ci-dessous celle-ci m'ouvre le fichier .pdf
    (E1002, ordre d'essai)
    ********************************************************
    Que faut-il modifier (si c'est possible) dans cette macro afin qu'elle m'ouvre le DOSSIER ou sont classé les résultats???

    ********************************************************
    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
    Option Explicit
    Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
     
    Sub PDF_Ordres()
    Dim NomFichier
    Dim tempo
    Dim cel
    'les lignes ci-dessous devront être présente en entête du module
    'Option Explicit
    'Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    '(ByVal hwnd As Long, ByVal lpOperation As String, _
    'ByVal lpFile As String, ByVal lpParameters As String, _
    'ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    'tempo = ActiveCell.Value
    tempo = Left(ActiveCell.Value, 10)
    NomFichier = "g:\DOCU\R&D\Ordres d'essais\" + tempo + ".pdf"
    'NomFichier = "g:\DOCU\R&D\Ordres d'essais" + ActiveCell.Value + ".pdf"
    'NomFichier1 = "g:\DOCU\Lignes Produit\Dossiers Personnels\Philippe M\Normalisation\NORMES\Normes-pdf\" + ActiveCell.Value + ".pdf"
    ' ActiveWorkbook.FullName
     
    If Dir(NomFichier) <> "" Then
    ShellExecute 0, "open", NomFichier, "", "", 0
    Else
    If Dir(NomFichier) = "" Then
    NomFichier = "g:\DOCU\R&D\Ordres d'essais\" + tempo + ".pdf"
    ShellExecute 0, "open", NomFichier, "", "", 0
    NomFichier = "g:\DOCU\R&D\Ordres d'essais\" + tempo + ", ordre d'essai.pdf"
    ShellExecute 0, "open", NomFichier, "", "", 0
    NomFichier = "g:\DOCU\R&D\Ordres d'essais\" + tempo + "e.pdf"
    ShellExecute 0, "open", NomFichier, "", "", 0
    Else
    MsgBox "Chemin ou fichier introuvable."
    End If
    End If
     
    NomFichier = "g:\DOCU\R&D\Ordres d'essais\" + ActiveCell.Value + ".pdf"
    If Dir(NomFichier) <> "" Then
    ShellExecute 0, "open", NomFichier, "", "", 0
    Else
     
    End If
     
    End Sub
    ********************************************************
    Merci et bonne journée à tous

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 89
    Points : 140
    Points
    140
    Par défaut
    Bonjour,

    en attendant mieux...

    1) dans une cellule (par exemple A1), tu mets une formule pour concaténer [=CONCATENER(A2;A3)] afin de reconstituer l'adresse du dossier.
    Avec:
    par exemple en A2 tu mets ce morceaux d'adresse [g:\DOCU\R&D\Ordres d'essais\ ] (extrait de ta formule);
    en A3, la cellule active de ta liste déroulante.

    2) ensuite essaies le code ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub OuvreDossier2()
    Shell ("explorer.exe " & ActiveSheet.Cells(1, 1) & TextBox2), 1
    End Sub
    Il pointe sur la cellule A1.

    A+
    D D du 06

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    merci beaucoup pour votre aide, mais sa ne marche pas il me renvoie : "erreur d'execution '53'
    fichier introuvable"

    Dans le code que j'ai posté un plus haut, il n'y a pas de modification possible, pour ouvrir un dossier à la place du fichier ".pdf" ?

    j'ai copié ce code je ne l'ai pas écrit (je débute dans le monde du VB..)

    Il ne faut pas perdre votre temps avec mes questions, si c'est pas possible, c'est pas possible..

    Bonne journée à vous tous.

  6. #6
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 89
    Points : 140
    Points
    140
    Par défaut Mea culpa, il faut ajouter
    Bonjour,

    petite erreur de ma part.

    Pour que le bout de code fonctionne, il faut ajouter le code suivant:
    ______________________________________________

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
    Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
    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
    ________________________________

    Ensuite bien sûr tu mets à jour les différentes adresses des cellules visées par le code:
    ----------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub OuvreDossier2()
    Shell ("explorer.exe " & ActiveSheet.Cells(1, 1) & TextBox2), 1
    End Sub
    -------------------------------
    ActiveSheet.Cells(1, 1) = la cellule A1

    C'est la cellule dans laquelle l'adresse sera reconstituée par concanétation (?!) [=CONCATENER(A2;A3)]

    -- de la partie stable -- A2 [g:\DOCU\R&D\Ordres d'essais\
    -- et de la partie variable (le filtre de la liste) A3...

    Voilà
    Ca fonctionne chez moi...
    A+
    D D Du 06

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Super ça marche!
    Merci beaucoup D-D-Du-06 pour ton aide, je te souhaite une bonne journée!
    et merci a tous encore une fois
    A bientôt...

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Heuu... rebonjour,

    Encore juste une petite modification si c'est possible,
    Lors de la recherche et de l'ouverture du dossier il faut tenir compte uniquement des 6 premiers caracatéres [exemple: E 1002, blabla] le reste du nom est variable.

    une ligne à ajouter ? -> [tempo = Left(ActiveCell.Value, 6)] si c'est ça je doit l'ajouter ou?

    Merci A+

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Aprés plusieurs recherche..., ce code fonctionne pour ouvrir un "dossier"
    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
    Option Explicit  
    Public V As String  
     
    Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _  
    (ByVal hwnd As Long, ByVal lpOperation As String, _  
    ByVal lpFile As String, ByVal lpParameters As String, _  
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long  
     
     
    Sub OuvreDossier()  
     
    Dim Target As Range  
     
    Dim i As Integer  
     
    V = ""  
    Dim chainePath As String  
     
    Set Target = ActiveCell  
    chainePath = "G:\Docu\R&D\Rapports d'essais"  
    'chainePath = "C:\Data"    
     
    If Not Intersect(Target, Range("A2:A20")) Is Nothing Then  ' la plage qui contient les essais  
        Application.ScreenUpdating = False  
     
        V = Left(Replace(ActiveCell.Value, "E", "E ", 1), 6)  
     
        Call AfficherListeDossiers(chainePath, CreateObject("scripting.filesystemobject"), V)  
     
     
        If V <> "" Then  
     
            ShellExecute 0, "explore", V, "", "", 10  
        End If  
    End If  
     
    End Sub
    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
    Public Sub AfficherListeDossiers(ByVal specdossier As String, ByRef Fso, ByVal leChemin)  
    '  
    ' il faut déclarer i en global  
    '  
        Dim dossier, fd, sDossier  ' variable de type variant  
       ' Set Fso = CreateObject("Scripting.FileSystemObject") ' créé un objet fileSystem  
        Set dossier = Fso.GetFolder(specdossier)             ' dossier : héritage de fso  
        Set sDossier = dossier.SubFolders                    'sDossier : héritage de dossier  
     
     
        For Each fd In sDossier                 ' Scanne la collection sDossier  
     
            If InStr(1, fd.Name, V) > 0 Then  
                V = fd            
               Exit For  
            End If  
     
        Next  
       Set sDossier = Nothing  
       Set dossier = Nothing  
     
     
    End Sub
    Merci!

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

Discussions similaires

  1. [LibreOffice][Base de données] Recuperer une liste de tables et une liste de champs d'une table sur LibreOffice & OpenOffice
    Par gerard.sauvage dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 08/04/2014, 12h35
  2. afficher une liste d'objets sur une page en flow.
    Par looploop dans le forum JSF
    Réponses: 1
    Dernier message: 18/09/2007, 10h54
  3. Faire une requête de contenu sur une liste personnalisée
    Par filigane dans le forum SharePoint
    Réponses: 0
    Dernier message: 13/09/2007, 11h28
  4. Réponses: 2
    Dernier message: 26/05/2007, 17h28
  5. [Debutant]Remplacer une liste de valeur par une liste de val
    Par Sebbo dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 31/03/2006, 12h15

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