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 :

Application.FileSearch sur Office 2007 et 2010


Sujet :

Macros et VBA Excel

  1. #1
    ffs69
    Invité(e)
    Par défaut
    Bonjour à tous.
    Tout d'abord tous mes vœux de bonne année et de bonne santé pour la nouvelle année qui commence
    Je vous écris car je me retrouve face à une nouvelle difficulté dans ma pratique de VBA.
    Un de mes utilisateurs utilise un fichier Excel depuis longtemps sous sa version 2003. Pendant les fêtes, son poste a été remplacé et il est maintenant équipé d'Office 2010 et voilà sa tête à son retour de congés
    Ce fichier contient une formule qui d'après mes recherches n'est plus disponible dans les nouvelles moutures de la suite.
    Les alternatives que j'ai trouvées me semblent bien complexe avec ajout de module à activer à chaque ouverture du fichier.
    Le code d'origine est le suivant :
    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
     
        Dim Rep As String
        Rep = "\\xxxxx\xxxxx " & Year(myDate) & "\" & Month(myDate) & "-12"
     
        ChDir Rep
    With Application.FileSearch
        .NewSearch
        .LookIn = Rep
        .FileType = msoFileTypeAllFiles
        .Execute
    End With
    With Application.FileSearch
        Dim a As String
        If .FoundFiles.Count = 0 Then
        a = "001"
        Else
        If .FoundFiles.Count < 10 Then
        a = "00" & .FoundFiles.Count + 1
        Else
        a = "0" & .FoundFiles.Count + 1
        End If
        End If
     
    End With
    Sheets("Feuil1").TextBox1.Text = a & "-" & Month(myDate) & "-" & Year(myDate)
    Si je comprends le code, il va chercher dans l'explorateur de fichier si un fichier du même nom existe pour nommer le fichier encours avec le numéro suivant.
    Je sais pas si c'est clair désolé.
    Si l'un d'entre-vous a une idée pour trouver une alternative fonctionnelle et non exhaustive je lui en serais infiniment reconnaissant.
    Par avance merci.

    Peut-être je peux faire quelque chose avec ça ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Function ReportFileStatus(filespec)
       Dim fso, msg
       Set fso = CreateObject("Scripting.FileSystemObject")
       If (fso.FileExists(filespec)) Then
          msg = filespec & " exists."
       Else
          msg = filespec & " doesn't exist."
       End If
       ReportFileStatus = msg
    End Function
    Mais je ne sais pas trop comment adapter et si VBS tel quel pourrait fonctionner en VBA ?
    Merci encore pour ceux qui prendront le temps de me lire
    Dernière modification par AlainTech ; 13/01/2012 à 21h46. Motif: Fusion de 2 messages

  2. #2
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Ca dépend de ce que tu veux faire. Le problème avec ta solution est que la recherche n'est pas récursive. Je ne sais pas si elle l'était dans la version précédente.

    Je suppose que tu as déjà regardé ce complément ?
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  3. #3
    ffs69
    Invité(e)
    Par défaut
    De ce que j'ai vu du lien que tu as envoyé justement c'était que c'était assez dense en code et qu'il fallait ensuite activer une référence chaque fois qu'il voudrait activer la fonction.

    Le principe de la partie du code que je cherche à aménager si je comprends le fonctionnement c'est de chercher dans un répertoire donné si un fichier existe déjà avec un début de nom à 3 chiffres, s'il n'existe pas utiliser 001, s'il existe le numéro suivant et ainsi de suite.

    La fin du code enregistre le fichier créé dans ce même dossier. Ainsi au fur et à mesure du mois, les fichiers se succèdent en "001-01-2012 xxx.xls", "002-01-2012 xxx.xls", "003-01-2012 xxx.xls".

  4. #4
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Dans ce cas, la fonction que tu proposes devrait marcher.
    Pour le lien, c'est un complément qu'il suffit d'installer une fois sur ton poste.
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  5. #5
    ffs69
    Invité(e)
    Par défaut
    Ou alors peut-être plutôt quelque chose comme ça mais je sais pas comment adapter non plus je suis pas un expert

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim myDate
    myDate = Sheets.Range("J4")
    Dim Rep As String
    Rep = "\\xxxxx\xxxxx " & Year(myDate) & "\" & Month(myDate) & "-12"
    ChDir Rep
    et / ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Fichier As String
    Fichier=dir(":\temp\*.txt)
    Do While Fichier <> ""
    Fichier = Dir
    Loop
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim a As String
    If .FoundFiles.Count = 0 Then
    a = "001"
    Else
    If .FoundFiles.Count < 10 Then
    a = "00" & .FoundFiles.Count + 1
    Else
    a = "0" & .FoundFiles.Count + 1
    End If
    End If
    Encore merci par avance à tous.

    Ce que je ne sais pas comment adapter notamment c'est :

    filespec = ? Juste le dossier ou un *.xls?
    Va-t-il les compter comme avec .FoundFiles.Count
    Et comment remplacer le .FoundFiles.Count avec (fso.FileExists(filespec)) ?

    Comment les distinguer par rapport au code d'origine de mon premier post je suis un peu perdu erf désolé d'être un nioub à ce sujet.

    Je crois même qu'il ne se basait pas sur le nom des fichiers du dossier mais sur le nombre de fichier dans le dossier et de fait appelait le fichier encours avec le nombre de fichier du répertoire +1.
    Dernière modification par AlainTech ; 13/01/2012 à 21h48. Motif: Fusion de 2 messages

  6. #6
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Je pense qu'il comptait juste le nombre de fichiers dans le répertoire, il n'y avait pas d'histoire de nom.
    Si je ne me trompe pas, tu dois pouvoir t'en sortir de la manière suivante :
    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
    Dim Rep As String
    Rep = "\\xxxxx\xxxxx " & Year(mydate) & "\" & Month(mydate) & "-12"
     
    Dim fso As Object
    Dim fd As Object
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fd = fso.GetFolder(Rep)
     
    Dim a As String
    If fd.Files.Count = 0 Then
        a = "001"
    ElseIf fd.Files.Count < 10 Then
        a = "00" & fd.Files.Count + 1
    Else
        a = "0" & fd.Files.Count + 1
    End If
     
    Sheets("Feuil1").TextBox1.Text = a & "-" & Month(mydate) & "-" & Year(mydate)
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  7. #7
    ffs69
    Invité(e)
    Par défaut
    T'es un ange ZebreLoup ça fonctionne parfaitement et grâce à toi je vais pouvoir apprendre à utiliser une nouvelle fonction, merci mille fois !!

Discussions similaires

  1. Demande de retours sur Excel 2007/ Excel 2010
    Par xav2229 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/05/2010, 13h07
  2. [Outils][Beta] Assistant ruban pour Office 2007 et 2010
    Par Arkham46 dans le forum Microsoft Office
    Réponses: 19
    Dernier message: 30/04/2010, 10h25
  3. [XL-2007] FileSearch sur Excel 2007
    Par Badgraf dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/04/2010, 14h53
  4. Modification de Application.filesearch sous Excel 2007
    Par besastyle dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/11/2008, 14h24
  5. Equivalent de Application.FileSearch sur Excel 2007
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/10/2007, 18h09

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