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 :

rapporter certaines valeurs en fonction de la date de début et de fin rentrée par l'utilisateur


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 40
    Points : 10
    Points
    10
    Par défaut rapporter certaines valeurs en fonction de la date de début et de fin rentrée par l'utilisateur
    Bonjour, j'ai une macro assez compliquée à réaliser par rapport à mon faible niveau en VBA ...

    Je vous explique, j'ai un dossier avec plusieurs classeurs (chaque semaine de l'année) à l'interieur. A l'interieur de ces classeurs se trouve des feuilles avec des données d'exploitation d'usine. IL y a 6 feuilles (5 pour les données de chaque jour de la semaine et une contenant le total de la semaine).

    Je dois créer un nouveau classeur qui sera en fait un rapport mensuel!!
    En effet, sur ce rapport je dois créer une commande qui demande à l'utilisateur la date de début et de fin du rapport (exemple l'utilisateur demande du 20_08_09 au 20_09_09).

    En fonction de cela, la macro doit pouvoir copier toutes les cellules de C5 à C35 des onglets de la date de début à la date de fin rentrée et ainsi les coller sur mon rapport en alignant toutes ces données.

    Donc voila vous savez tout, donc si vous pouvez m'aider ca serait vraiment super!!! je vous remercie et si je n'ai pas été assez clair je peux apporter des précisions

  2. #2
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bonjour,
    Difficile de t'aider tu n'as pas commencer. Il y a une différence entre aider et faire à la place...
    Alors commence au moins ton code laisse ce qe tu ne sait pas faire en commentaire et reviens avec au moins le début de quelque chose.

    Une piste quand même
    Tu a une date de début
    pour chaque date entre le début et la fin
    Tu ouvre le fichier qui correspond tu copie les info tu fermes le fichier
    tu passe a la date suivante

    Voila a toi d'essayer de trouver comment réaliser les différentes étapes, si tu coince pose une question, mais n'attend pas un code tout fait surtout que tu ne donne pas assez d'infos pour cela

    Quelque lien
    pour les dates : http://access.developpez.com/faq/?page=dates
    Toujours utile (je ne sais pas comment tu veux organsé le fichier avec les données importé) : http://www.developpez.net/forums/d45...gnees-feuille/
    Et bien sur tous les tutos du site et la faq

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 40
    Points : 10
    Points
    10
    Par défaut
    je sais bien mais je n'arrive pas à commencer justement. je sais pas par ou attaquer!! je pense qu'au départ il faut demander la date de début et de fin à l'utilisateur et en fonction de ca ca doit déterminer la semaine ... penses tu que c'est le mieux de commencer par la??

  4. #4
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    heu oui c'est utile de commencer par récupérer les information nécessaire, puisque en théorie ne va s'en servir

    Regarde la fonction week day dans le tuto sur les date elle pourrais t'aider
    Quelque piste pour t'aider
    Pour connaitre le numéro de semaine d'une date
    Pour connaitre le premier jour d'une semaine a partir de son numéro regarde le tuto
    Comme je ne sais pas comment tu distingue tes classeur en fonction des semaine qu'il contienne je n'irais pas plus loin a toi de jouer.

    Mais par ou commencer c'est simple.
    Prend un papier et un stylo et réfléchi. Décrit les différentes étapes de ton algorithme.
    Ensuite réfléchi a ce que tu sais faire en vba regarde les étape que tu sais faire, celle que tu ne sait pas faire essaye de trouver une autre méthode si tu ne vois pas pose la question.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 40
    Points : 10
    Points
    10
    Par défaut
    Mais pour trouver la semaine suivant une date il n'y a pas une fonction toute faite sur VBA??

  6. #6
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Tu as essayé la ligne de code que je t'ai filé avant de poser ta question? Parce que c'est exactement ce que cela fait...... Tu donnes une date tu as la semaine qui corespond.
    Lis le tuto du début a la fin il est relativement exaustif au niveau des fonctions disponible après a toi de réfléchir à comment les utiliser pour arriver a tes fins

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 40
    Points : 10
    Points
    10
    Par défaut
    c'est bon pour cette fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function SemaineEnCours()
      SemaineEnCours = DatePart("WW", Now, vbMonday, vbFirstJan1)
    End Function

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 40
    Points : 10
    Points
    10
    Par défaut
    j'ai fait à l'aide du net ce code pour retrouver la semaine

    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
    31
    32
    33
    34
    35
    Function FindWeek(Jour As String) As String
     
        Dim i As Integer, TempWeek As Long
        Dim TempDay As Date
     
        'Vérifie que la date est valide
        If IsDate(Jour) = False _
            Then FindWeek = 0: Exit Function
     
        'Compteur qui va balayer les dates en comptant les semaines
        For i = 1 To 365
     
            'Init de la date et du n° de semaine
            If i = 1 Then
                'Init au 01/01/ de l'année de la date demandée
                TempDay = "01/01/" & Year(Jour)
                    'Si le jour est ni samedi ni dimanche alors semaine 1 (sinon dans la semaine 0)
                    If Weekday(TempDay, vbMonday) < 6 _
                    Then TempWeek = 1 _
                    Else TempWeek = 0
            Else
                'incremente le jour
                TempDay = TempDay + 1
                'incremente la semaine si le jour est lundi
                If Weekday(TempDay, vbMonday) = 1 _
                    Then TempWeek = TempWeek + 1
            End If
     
            'Qd le compteur de jour arrive a la valeur demandée renvoie le n° de la semaine
            If TempDay = Jour _
                Then FindWeek = TempWeek: Exit Function
     
        Next
     
    End Function
    Ensuite j'aimerais en fonction de cette date aller copier une range de cellules( C5 à C25) de toutes les feuilles correspondantes à cette date jusqu'à la date de fin (rentré par l'utilisateur) que je ne sais d'ailleurs pas comment faire rentrer à l'utilisateur.
    et le probleme c'est que toutes ces feuilles ne sont pas dans le meme classeur (car une semaine un nouveau classeur comme expliqué dans mon premier post). donc il faut que ma macro parcours toutes ces feuilles en changeant de classeur automatiquement c'est possible??

    peux tu me lancer vers quelque chose please

    merci

    Ps: je n'ai pas repris ce code betement je l'ai compris

  9. #9
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Si tu veux le numér de la semaine il me semblé que tu avais déjà la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SemaineEnCours = DatePart("WW", TaDate, vbMonday, vbFirstJan1)
    Je ne vois pas du tout a quoi sert ton code et ce qu'il fait de plus par rapport a ceci

    Après oui tu peux automatiquement ouvrir un classeur le parcourir copier les infos et le fermer.
    Je te laisse faire des recherche su le forum pour savoir comment

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 40
    Points : 10
    Points
    10
    Par défaut
    Oui c'est la meme chose!!!

    Je cherche mais peut on faire une boucle qui donc à partir de cette date va chercher la feuille correspondante à cette date et surtout toutes les feuilles jusqu'a la date finale sachant qu'il faudra changer de classeur (tous dans le meme repertoire) car toutes les feuilles ne sont pas dans la meme semaine??

    Sur quel boucle faudrait il partir ??
    Je veux juste des precisions pour savoir vers quoi me diriger

    merci

  11. #11
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Tu prend comme boucle ta date de départ
    et tu part de la pas du début.
    Pour chaque date tu fait ce que ta a faire ouverture du bon classeur, copi des bonne donnée et fermeture du classeur.
    Mais j'ignore a quoi te sert le numéro de semaine, comment tu récupère le nom du classeur, le nom de l'onglet ca il n'y a que toi qui peut savoir

    SI tu veux tu fait ainsi
    Tu calcules le nombre de jour entre les deux date (voir le tuto : http://access.developpez.com/faq/?page=dates#DateDiff)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i = 0 to NbJours
    LaDate=ateAdd("d", i, LaDateDeDepart)
    'tu utilise la date pour faire ton récupération de donnée
    next i

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 40
    Points : 10
    Points
    10
    Par défaut
    les classeurs sont nommés de la sorte : semaine_21 semaine_22 , ...

    et à l'interieur de ces classeurs les feuilles sont nommès ainsi 20_10_08 ( 'es la feuille 1) , 21_10_08 ( feuille 2) et ainsi de suite jusqu'a la fin de la semaine (ces feuilles ont la meme structure meme cellule pour la meme donnée à chaque fois). Pour voir le rapport des autres jour de la semaine suivante on ouvre la semaine suivante.

    Et en fait dans mon nouveau fichier (rapport sur une durée) il n'y aurait plus qu'a rentrer la date à laquelle on veut que le rapport commence et la date à laquelle on veut que ca se termine.

    Mais j'arrive pas a voir comment est ce qu'une macro peut parcourir tous ces fichiers (de la date de début) et changer de classeurs ( pour arriver jusqu' a la date de fin) automatiquement et copier toutes les valeurs d'une meme cellule de plusieurs feuille???

    il faudrait peut etre faire 2 boucles une qui compte à partir de la date entrée jusqu'a la fin de la premiere semaine et ensuite quand on arrive a la derniere feuille on passe au classeur suivant et on copie pareil les meme cellules des 5 feuilles et on passe au classeur suivant et ainsi de suite jusqu'a la date de fin.


    Mais je ne vois pas avec quelle structure faire ca??
    je n'ai malheureusement fait que 2 macro dans ma vie .

    Si vous pouvez me proposer une avance

    merci

  13. #13
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    A mon avis tu devrais commencer par mettre ce projet de coté et passer un jour ou deux a faire des macros lire des tutos et autres. la on en est a près d'une page de discution on a a peine avancé.

    Pour répondre a ta question
    pas forcément regarde cet algo en pseudo code
    (on va commencer a voir l'algo ensuite tu apprendra les instruction VBA necessaire)

    On récupère les date de début et de fin Ddeb et Dfin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Si Ddeb n'est pas un lundi On ouvre le classeur de la semaine de Ddeb on lappelle Ws
    pour i allant de 0 au nombre de jour entre Ddeb et Dfin
       DenCour=Ddeb+i jour
       si DenCour est un lundi on ferme le classeur Ws et on ouvre le classeur qui  correspond a la semaine DenCour on l'apelle Ws
        On récupère dans WS les infos dans longlet de DenCour
    I suivant
    On ferme Ws
    Alors il te reste a trouver commen ouvrir un classeur en l'appellant Ws
    et comment mettre une variable dans le nom d'un classeur a ouvrir (concaténation de chaine de caractère)

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 40
    Points : 10
    Points
    10
    Par défaut
    Bon je vais meme faire ca ce soir car il faudrait que je termine ce projet avant la fin de la semaine (je suis en alternance). je reviens demain soir plus armé, en attendant tu n'as pas des exemples bien expliquer et des cours sur ce que je dois accomplir. Si tu peux cibler ce qui se rapproche le plus de mon projet ca serait sympa.

    ce qui me pose beaucoup de problemes c'est la déclaration de variable,la structure propre à VBA, et puis je n'arrive pas à accomplir des choses par rapport à une donnée rentrée par l'utilisateur . j'ai quelques notions de C que j'ai appris un peu en dut mais bon...

    Merci en tout cas de prendre de ton temps pour m'aider c'est sympa.
    Seras tu dans les parages demain soir également?

    merci encore

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 40
    Points : 10
    Points
    10
    Par défaut
    bon je rame terrible j'ai vraiment du mal...

    j'ai commencé quelque chose mais rien d'extraordinaire, je n'arrive a rien c'est horrible.

    Bref j'ai commencé avec ce que je pu et je suis bloqué sur le fait de récupérer les donnée dans l'onglet DenCour

    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
    31
    Sub macro1()
     
    Dim Ddeb As Date, Dfin As Date
    Dim a As Integer
    Dim Ws As Workbook
    Dim DenCour As Long
    Dim nomc As String, repertoire As String
    Dim Nbjour As String
     
    ' c'est la ou se trouve mes classeurs je pense qu'on peut faire mieux dans mon code après grace a ca, mais je sais pas comment l'utiliser '
    nomc = "E:\DATAS\3 - production\rapport exploitation\rapports journaliers de production\2009"
    repertoire = Dir(nomc & "*xls*", vbDirectory)
     
    ' je calcule le nbre de jour entre date de début et date de fin) '
    Nbjour = DateDiff("s", Ddeb, Dfin)
     
    'la valeur f correspond a la semaine de la date de début par rapport à ma fonction mais on doit pouvoir faire mieux '
    f = Worksheets(1).Cells(1, 1)
    ' si le jour dDeb est un lundi alors on ouvre le dossier semaine_"f" '
    If Weekday(Ddeb) = 2 Then Ws = Workbooks.Open(Filename:="E:\DATAS\3 - production\rapport exploitation\rapports journaliers de production\2009" & f & "*xls*")
     
     
     
    For i = 0 To Nbjour
     
    DenCour = Ddeb + 1
     
    If Weekday(DenCour) = 2 Then Workbooks(Filename:="E:\DATAS\3 - production\rapport exploitation\rapports journaliers de production\2009" & f & "*xls*").Close
     
     
    End Sub
    Je lutte terrible pour avancer et je pense que ce que j'ai fait ne fonctionne pas en plus .

    Une petite aide pour continuer à me guider me ferait vraiment du bien ??

    Merci

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/11/2013, 14h23
  2. Paramètre multi valeurs en fonction de la date
    Par mekatxis dans le forum Deski
    Réponses: 6
    Dernier message: 29/06/2010, 16h39
  3. Zedgraph valeur en fonction d'une date
    Par petitours dans le forum C#
    Réponses: 8
    Dernier message: 07/06/2010, 09h34
  4. [XL-2007] Fonction RECHERCHE d'aprés Date de début et de fin
    Par Joseph67 dans le forum Excel
    Réponses: 4
    Dernier message: 11/08/2009, 13h35
  5. Réponses: 3
    Dernier message: 21/04/2008, 16h19

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