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 :

boucle d'une date à aujourd'hui et variable public


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 96
    Points : 53
    Points
    53
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 96
    Points : 53
    Points
    53
    Par défaut
    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?

  4. #4
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Utilises la fonction replace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Replace(Cellule, ".", "/")

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 96
    Points : 53
    Points
    53
    Par défaut
    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 : 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
    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 : 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
    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

  6. #6
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Je supprimerais la déclaration externe de StDate que je passerais en paramètre dans ta procédure en déclarant celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub Update(StDate As String)
    L'appel de cette procédure d'update serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 96
    Points : 53
    Points
    53
    Par défaut
    Ok merci, ça fonctionne bien

    Par contre j'ai mis

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

    Merci

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

Discussions similaires

  1. Afficher si date -7 à la date aujourd'hui
    Par barale61 dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/05/2013, 22h35
  2. MFC Date "Aujourd'hui"
    Par MaryR dans le forum IHM
    Réponses: 2
    Dernier message: 29/11/2008, 21h05
  3. Comparaison de dates: Aujourd'hui et date entrée via un user form
    Par jeo13 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/06/2008, 09h47
  4. Boucle sur une date
    Par pobrouwers dans le forum SQL
    Réponses: 14
    Dernier message: 14/03/2008, 15h29
  5. Pb pour affichage date aujourd'hui
    Par kikaillo dans le forum Access
    Réponses: 6
    Dernier message: 14/04/2006, 14h04

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