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 12/12/2011, 10h44   #1
Membre à l'essai
 
Inscription : juillet 2009
Messages : 102
Détails du profil
Informations personnelles :
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : juillet 2009
Messages : 102
Points : 22
Points : 22
Par défaut boucle d'une date à aujourd'hui et variable public

Bonjour,

Un bouton sur une feuille exécute plusieurs macro.
Je récupère par ces macro des données d'un rapport quotidien.

Je voudrais ajouter à ce bouton une macro (temporaire) pour récupérer les données venant des rapports antérieurs à la création de la macro.

J'ai créé cette macro le 02/12/2011.
J'aimerais faire en sorte que cette macro s'exécute aussi pour tous les rapports journaliers antérieurs. par exemple a partir du 01.01.2011 jusqu'a aujourd'hui.

Est ce que cette boucle devrait fonctionner

Code :
1
2
3
For i = "01/01/2011" to format (date,(""dd/mm/yyyy"))
'mes macro
next i
ce code est placé dans le code du bouton et mes macro sont dans un même module.

Afin de pouvoir utiliser la variable i pour aller chercher le rapport correspondant à la date, j'ai déclaré i comme une variable public avant la déclaration private sub dans la page du bouton et avant la première macro dans la page du module

Le problème est que la variable est bien attribuée dans la page du bouton, mais n'est pas transmise dans la page du module.
Dans le module, je vois i=00.00.00 et du coup il ne trouve pas le fichier.

Pouvez vous m'aider à trouver mon erreur?

Merci
altra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 12h19   #2
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
Les indices de boucles doivent être des valeurs numériques et je me méfie du transcodage de string en date.
Or, format produit un chaine de caractère.
Pour éviter toute ambiguïté, je déclarerais explicitement les variables avec leur type. Cela devient :
Code :
1
2
3
4
5
  Dim i As Date, TmpDate As Date
  TmpDate = "01/01/2011"
  For i = TmpDate To Date
    'mes macro
  Next i
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 12h26   #3
Membre à l'essai
 
Inscription : juillet 2009
Messages : 102
Détails du profil
Informations personnelles :
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : juillet 2009
Messages : 102
Points : 22
Points : 22
Re,

J'ai semble t il réglé le problème de variable public.
J'ai supprimé la déclaration de Public i as date dans la feuille du bouton et l'info est bien transmise dans la feuille du module.

Par contre j'ai un nouveau souci. Je me suis aperçu que dans mon nom de rapport quotidien la date est dans ce format : 01.01.2011 et non pas 01/01/2011. Du coup lorsqu'on arrive à i = "01.01.2011" j'ai une erreur d'exécution 13 incompatibilité de type. Pourquoi? J'imagine que ça a un rapport avec la boucle for.
Mais du coup comment faire pour incrémenter une date correctement?
altra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 12h51   #4
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
Utilises la fonction replace
Code :
Replace(Cellule, ".", "/")
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 13h53   #5
Membre à l'essai
 
Inscription : juillet 2009
Messages : 102
Détails du profil
Informations personnelles :
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : juillet 2009
Messages : 102
Points : 22
Points : 22
Bonjour,

Pour reconnaitre mon fichier qui porte un nom comme "rapport du 01.01.2011.xls" je dois garder les points, puisque les / ne sont pas acceptés dans le nom de fichier.

Voila à quoi ressemble mon code pour le bouton
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Option Explicit
 
Private Sub CommandButton1_Click()
 
Application.ScreenUpdating = False
 
Dim tmpdate As Date
 
tmpdate = "13.11.2011"
 
For stdate = tmpdate To Date
 
Update
 
Next stdate
 
Application.ScreenUpdating = True
 
End Sub
c'est dans ce code que j'ai une erreur d'exécution


et le code dans le module

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
26
27
28
Option Explicit
Public stdate As Date
Dim stcopie As String
Dim stcopiecomp As String
 
 
'**************************************************************
'Sub Update
'Permet l'acquisition des nouvelles données
'Elle va chercher dans le fichier "rapport du dd.mm.yyyy" du jour les données nécessaires à ce fichier
'*******************************************************************
 
Sub Update()
 
Dim oFSO As Object
Dim oFl As Object
 
 
'stDate = Format(DateAdd("d", -1, Date), ("dd.mm.yyyy"))
'stdate = "08.12.2011"
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFl = oFSO.GetFile("C:\Users\#Rapport Divers Info Prod\rapport du " & stdate & ".xlsx")
stcopie = "TempData.xlsx"
stcopiecomp = "C:\Users\#Rapport Divers Info Prod\" & stcopie
 
oFl.Copy stcopiecomp, True ' Le paramétre "Force" à False n'autorise pas d'effacer les fichiers  en lectures seules.
 
End Sub
Avant, pour ajouter rapport je rentrais manuellement la date du rapport que je voulais ajouter, et le fait que ce soit des points pour la date ne posait pas de problème.

Merci pour votre aide
altra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 18h36   #6
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
Je supprimerais la déclaration externe de StDate que je passerais en paramètre dans ta procédure en déclarant celle-ci
Code :
Sub Update(StDate As String)
L'appel de cette procédure d'update serait
Code :
1
2
3
4
5
6
7
8
9
10
11
12
  Dim TmpDate As Date
  Dim VarDate As Date
  Dim TmpDateStr As String
  Dim InputStrDate As String 
  Application.ScreenUpdating = False
  InputStrDate = "13.11.2011"
  TmpDateStr = Replace(InputStrDate, ".", "/")
  TmpDate = TmpDateStr
  For VarDate = TmpDate To Date
    Update (InputStrDate)
  Next VarDate
  Application.ScreenUpdating = True
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 11h21   #7
Membre à l'essai
 
Inscription : juillet 2009
Messages : 102
Détails du profil
Informations personnelles :
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : juillet 2009
Messages : 102
Points : 22
Points : 22
Ok merci, ça fonctionne bien

Par contre j'ai mis

Sinon la date n'était pas incrémentée.

Merci
altra est déconnecté   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 01h28.


 
 
 
 
Partenaires

Hébergement Web