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 :

Comment utiliser Windows(filename).activate? avec un nom de fichier variable [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut Comment utiliser Windows(filename).activate? avec un nom de fichier variable
    Bonjour a tous,

    J'ai un logiciel qui me permet d'extraire des donnees et de les exporter dans un fichier excel sans etre sauvegarde. Le fichier excel genere est automatiquement ouvert et apparait dans le dossier Local Settings\Temp. Le nom du fichier genere commence toujours par desktopagent. Le souci est qu'il y a une incrementation sur le nom du fichier.

    On va avoir desktopagent1.xls
    desktopagent2.xls
    desktopagent3.xls
    ...

    J'ai un autre fichier que j'ai construit en ecrivant du code vba pour ouvrir ce fichier, importer les donnees et les formater.

    Mon souci est que pour utiliser mon code, il faut sauve le fichier, le fermer et specifier le chemin du fichier source.

    Ce que je voudrais faire: importer directement les donnees depuis le fichier temporaire ouvert et j'en arrive a ma question:

    y a-t-il un moyen d'activer le fichier source en utilisant quelque chose comme windows(filename).activate sachant que le nom de fichier varie mais qui commence toujours par desktopagent?

    je vous remercie d'avance pour votre aide!

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Si ton classeur "destoppagentx" est ouvert dans la même application Excel que le classeur qui contient le code, tu peux scruter la collection Workbooks, cela sera plus efficace que Windows.

    Après,
    • Peut-il ne pas y avoir de classeur "desktoppagentx" ouvert?
    • Peut-il y en avoir plusieurs, et si oui, que faire dans ce cas?

    Cordialement,

    PGZ

  3. #3
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Bonjour PGZ,

    Je te remercie pour ta reponse. Effectivement le fichier sera ouvert dans la meme application Excel que le fichier qui contient le code. Mais j'avoue que je ne suis pas a l'aise avec la collection Workbook sachant que le nom du fichier reste inconnu.

    Pour repondre a tes questions:

    Citation Envoyé par pgz Voir le message
    Après,
    • Peut-il ne pas y avoir de classeur "desktoppagentx" ouvert?
    • Peut-il y en avoir plusieurs, et si oui, que faire dans ce cas?

    - S'il n'y a pas de classeur "desktoppagentx" ouvert, alors le code retourne un message d'erreur: fichier inexistant. Dans le process, il faut d'abord exporter les donnees.

    - Il peut effectivement y en avoir plusieurs, dans ce cas il faut manipuler le fichier desktopagentx ou x est le plus grand (ou bien le fichier plus recent - j'avais explorer cette piste en travaillant sur la date de creation du fichier temporaire mais sans succes)

  4. #4
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir.

    Voici un code qui cherche le plus grand x. L'occasion d'utiliser une petite fonction utilisée aujourd'hui dans la discussion de damien29.

    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
    Function fDerClasseurOuvert() As Excel.Workbook
    Const sPrefixe As String = "desktopagent"
    Dim iNum As Integer, iNumMem As Integer
    Dim oWbk As Excel.Workbook
     
    iNumMem = 0
    For Each oWbk In Application.Workbooks
        If oWbk.Name Like sPrefixe & "*" Then
            iNum = Val(fExtraitChiffres(oWbk.Name))
            If iNum > iNumMem Then
                iNumMem = iNum
                Set fDerClasseurOuvert = oWbk
            End If
        End If
    Next oWbk
     
    End Function
     
    Function fExtraitChiffres(ByVal sIni As String) As String
    Dim i As Integer
     
    If sIni = "" Then
        fExtraitChiffres = ""
    Else
        For i = 1 To Len(sIni)
            If Mid$(sIni, i, 1) Like "[0-9]" Then fExtraitChiffres = fExtraitChiffres & Mid$(sIni, i, 1)
        Next i
    End If
     
    End Function
    La fonction fDerClasseurOuvert renvoie le classeur nommé "desktopagentX", pour X le plus grand s'il y en a plusieurs. S'il n'y en a pas, la fonction renvoie Nothing. Attention, il s'agit d'un objet Workbook, et non pas du nom du classeur.

    Pour l'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
    Dim oWbk As Excel.Workbook
     
    Set oWbk = fDerClasseurOuvert
    If oWbk Is Nothing Then
        MsgBox "aucun"
    Else
        MsgBox oWbk.Name
    End If
     
    Set oWbk = Nothing
    End Sub
    Cordialement,

    PGZ

  5. #5
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Merci beaucoup PGZ ca marche nickel!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/08/2012, 12h02
  2. Réponses: 8
    Dernier message: 10/11/2008, 19h40
  3. [CSS] comment puis utiliser le meme css avec 2 nom different
    Par pierrot10 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 08/09/2006, 13h51
  4. comment utiliser de l'OpenGL avec du Java ?
    Par DjiZ dans le forum OpenGL
    Réponses: 3
    Dernier message: 14/01/2004, 15h21
  5. Comment utiliser les styles XP avec Dev-C++?
    Par abraxas dans le forum Dev-C++
    Réponses: 3
    Dernier message: 05/10/2003, 19h47

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