Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/01/2012, 15h06   #1
ffs69
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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 :
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 :
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 à 20h46. Motif: Fusion de 2 messages
  Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 16h56   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
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
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 17h11   #3
ffs69
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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".
  Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 17h28   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
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
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 17h33   #5
ffs69
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Ou alors peut-être plutôt quelque chose comme ça mais je sais pas comment adapter non plus je suis pas un expert

Code :
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 :
1
2
3
4
5
Dim Fichier As String
Fichier=dir(":\temp\*.txt)
Do While Fichier <> ""
Fichier = Dir
Loop
puis
Code :
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 à 20h48. Motif: Fusion de 2 messages
  Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 18h05   #6
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
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 :
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
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/01/2012, 18h15   #7
ffs69
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
T'es un ange ZebreLoup ça fonctionne parfaitement et grâce à toi je vais pouvoir apprendre à utiliser une nouvelle fonction, merci mille fois !!
  Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h54.


 
 
 
 
Partenaires

Hébergement Web