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 :

copie de données


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    Par défaut copie de données
    Bonjour j'ai laissé un post hier mais je pense ne pas avoir été clair du tout après relecture. Du mal à exprimer clairement ce que je recherchais!!!

    en fait je suis en alternance dans une entreprise de production. Et ma premiere mission est d'effectuer une macro pour avoir un rapport de production sur une période demandée à l'utilisateur. Pb: je ne connais pas vba :s

    Dans un dossier en l'occurence "E:\DATAS\3 - production\rapport exploitation\rapports journaliers de production\2009" se trouve des rapports de production ( donc classeurs) de chaque semaine de l'année ( appelé par exemple semaine_33) et dans ces classeurs se trouvent 6 onglets avec la date de chaque jour de cette semaine, soit 5 jours et un résumé de la semaine en dernier ( nommé de la sorte : 10-07-08, etc )

    en gros j'ai tenter de faire une sorte d'algorithme pour m'aider mais mon niveau en vba est très faible donc je me renseigne encore.

    Mais cela donne
    On demande la date de début et la date de fin du rapport à l'utilisateur à l'aide d'un bouton

    la date de début correspond a une semaine dans l'année

    On ouvre cette semaine qui se trouve dans le dossier "E:\DATAS\3 - production\rapport exploitation\rapports journaliers de production\2009"
    et on ouvre l'onglet qui correspondant à la date de début
    on copie les valeurs des cellules de C5 à C39 et on les colle dans la colonne de F5 à F 35 du rapport qu'on est entrain de créer.

    On copie de meme les valeurs de C5 à C39 de la date de début +1 (onglet + 1 du même classeur) qu'on colle dans E5 à E39 du rapport en création.

    On fait ceci jusqu'a la fin de la semaine.

    on ferme le classeur de la semaine

    On ouvre le classeur de la semaine + 1

    et on refait de même jusqu'a la fin de la semaine ( copie des cases C 5 à C 39 des 5 premiers onglets qu'on colle sur le nouveau rapport)

    On continue la boucle jusqu'a que la date de fin rentrée par l'utilisateur correspond à la date de l'onglet.
    Ci joint la forme la forme de mon rapport avec une tentative de macro avec ce que j'ai pu trouver et comprendre surtout (donc pas grand chose :s).


    Je pense être un peu plus clair, donc si vous pouviez m'éclairer vous m'en verrez ravi .

    Merci
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Il est malaisé de répondre sans voir la source des données, c'est-à-dire au moins une fiche "de rapport".

    A priori, ton raisonnement est bon, mais sur le plan purement technique, nous avons besoin de voir à quoi ressemble une feuille d'une fichier source...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre averti
    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
    Par défaut
    Bonjour à tous,

    Ci joint deux exemples de fichiers sources pour vous montrez la structure des données à aller chercher.

    Je n'arrive pas à faire cette boucle donc un coup de pouce serait vraiment le bienvenu surtout que ca fait 2 semaines que j'y suis dessus et je n'avance pas .


    Merci de votre aide
    Fichiers attachés Fichiers attachés

  4. #4
    Membre averti
    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
    Par défaut
    J'ai tenté de faire un début mais pas très fructueux j'ai mis en commentaire là ou j'avais du mal!!Il y en a pas mal malheureusement

    J'ai des problèmes donc pour cette boucle.
    Si j'arrive à ca il me restera juste à faire un userform afin que l'utilisateur rentre la date de début et de fin du rapport.

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Sub macro1()
     
    Dim Ddeb As Date, Dfin As Date
    Dim a As Integer
    Dim Ws, X As Workbook
    Dim Dcours 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)
     
     
     
     
    ' il me manque la fonction pour déterminer la semaine que l'on veut ouvrir en fonction de la date de début'
    SemaineEnCours = DatePart("Ddeb", TaDate, vbMonday, vbFirstJan1)
     
     
     
    For i = 0 To Nbjour
    ' ouverture du classeur correspondant à la semaine de la Ddeb"
    Ws = Worksbooks.Open(Filename:="E:\DATAS\3 - production\rapport exploitation\rapports journaliers de production\2009" & semaine en cours & "*xls*")
     
     
    'activation de la feuille de la Ddeb"
    Sheets("Ddeb").Activate
     
     
    ' on copie les valeurs des cellules de C5 à C39 et on les colle dans la colonne de F5 à F 35 du rapport qu'on est entrain de créer.'
    Set plage = Sheets(Ddeb).Range(Cells(5, 3), Cells(39, 3))
    plage.Copy
    Worksbooks("date.xlsm").Cells(5, 7).PasteSpecial
     
     
    'On copie de meme les valeurs de C5 à C39 de la Ddeb +1 (onglet + 1 du même classeur) qu'on colle dans G5 à G39 du rapport en création date.xlsm( comment aligne t'on les données copier??) .'
    'faut il l'activer avant?'
    Dcours = Deb + 1
    Set plage = Sheets(Dcours).Range(Cells(5, 3), Cells(39, 3))
    plage.Copy
     
     
     
    'On fait ceci jusqu'a la fin de la semaine'
     
     
     
    ActiveWorkbook.Close savechanges:=False 'on ferme le classeur de la semaine ouverte'
     
     
    X = Worksbooks.Open(Filename:="E:\DATAS\3 - production\rapport exploitation\rapports journaliers de production\2009" & f + 1 & "*xls*")
    'On ouvre le classeur de la semaine en cours + 1'
     
     
    'et on refait la même chose jusqu'a la fin de la semaine ( copie des cases C 5 à C 39 des 5 premiers onglets de la semaine qu'on colle sur le nouveau rapport en alignant aux autres données (voir fichier rapport nommé date.xlsm)) '
     
     
    ' On continue la boucle jusqu'a que la date de fin rentrée par l'utilisateur correspond à la date de l'onglet.'
     
    Next i
     
    End Sub
    La forme des classeurs où il ya les données à aller chercher sont dans les pièces jointes précédentes.

    Si quelqu'un pouvait me guider.
    Merci

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    En fait, tu prends le problème à l'envers, à cause d'un défaut de conception des classeurs.

    La bonne méthode serait de tout mettre dans un seul classeur:
    1 feuille pour la saisie avec macro pour transfert dans la feuille de données
    1 feuille de données pour toutes les données 2009 avec les colonnes ad hoc.
    1 macro pour récupérer les données d'une date, d'une semaine ou d'une plage de dates...

    Je ne sais pas si tu es prêt à (faire) modifier cela, mais l'organisation actuelle de tes feuilles et classeurs, c'est un peu l'usine à gaz...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre averti
    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
    Par défaut
    en fait le classeur 2009 se résumerait à 2 feuilles et du coup pour la macro ca serait beaucoup plus simple.

    Qu'est ce que vous appelez ad hoc??

    vous pouvez me montrez avec les 2 exemples et mon fichier ou on rapporte les données en fonctions de la date de début et de fin rentrée. car après je pourrais essayer de l'appliquer sur tout le dossier.

    et sinon c'est donc impossible de faire comme j'étais parti?

    Merci de votre aide

Discussions similaires

  1. Pb Access et copie de données
    Par guiboule dans le forum Access
    Réponses: 1
    Dernier message: 27/07/2006, 14h00
  2. [JTextArea] Copie de données - optimisation
    Par Djakisback dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 28/03/2006, 13h21
  3. [VBA-E] Problème de copie de données
    Par JM_stp dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/02/2006, 00h33
  4. Réponses: 3
    Dernier message: 24/04/2005, 14h19
  5. Copie des données d'une table d'une base Interbase 6
    Par Djedjeridoo dans le forum InterBase
    Réponses: 6
    Dernier message: 02/02/2004, 09h39

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