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 :

Création, modification de table Access avec critère date


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 29
    Points
    29
    Par défaut Création, modification de table Access avec critère date
    Bonjour à tous,

    me revoilà avec une question sur lesquelles je bug.
    je ne sais pas trop sous quelle sous-forum la mettre et le titre ne parrait pas top, mais je bugs vraiment sur tout aujourd'hui

    je m'explique :
    je dois quotidiennement mettre à jour des fichiers contenant les résultats de ventes.

    => je reçois tout les jours 4 fichiers bruts sous format excel qui contiennent les données du mois en cours (jusque hier) et que j'importe en access via une macro access au départ d'excel.
    Avec ma macro access je vais d'abord supprimer les données du mois en cours avant de réimporter les nouvelles données.
    Mes tables de base en access contiennent donc toutes les ventes depuis le 01/01

    Ensuite (toujours via macro access) un formulaire s'ouvre afin de choisir le mois pour lequel je veux avoir les résultats (merci LedZeppII)
    sur base de ma sélection le reste ce met en route : création des tables du mois en cours et requêtes pour extraire toutes les infos et les transférer vers des fichiers excel bruts.

    Je sort de access et continue mon travail en excel, toujours avec des macros.
    Celles-ci vont pour chaque fichiers que je dois mettre à jour prendre les infos dans les fichiers excel bruts qui ont été créer par access.

    Dans les fichiers que je dois mettre à jour, j'ai :
    un contenant les données quotidiennes et mensuelles avec 12 feuilles (masquées) représentants les 12 mois de l'année
    un contenant les données trimestrielles 4 feuilles (masquées) représentants les 4 trimestres
    Actuellement j’utilise un code qui va afficher la feuille du mois et trimestre en cours

    Alors, voila (enfin) ma question :
    1. je voudrais avoir la possibilité d’introduire quelque part, et ce avant l’import vers access, le mois pour lequel je veux mettre mes résultats de ventes à jour.
    Ce mois serait ensuite utilisé autant dans mes requêtes access (suppréssion, création de nouvelles tables) que pour sélectionner le mois et trimestre dans mes fichiers excel

    Je me dis que en saisissant, via un formulaire, le mois dans excel (mais comment ???) il doit y avoir moyen, mais je ne sais pas trop comment access peut prendre en compte cette info

    Enfin voila, je me rends compte que c’est presque un roman, mais j’espère avoir été assez compréhensible

    Merci à ceux qui pourront encore me filer un petit coup de pouce pour que mon travail devienne plus facile !

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    A quel moment veux-tu saisir la date ? A l'ouverture du fichier ? Où veux-tu la placer ?
    Ne peux-tu pas utiliser un simple InputBox ?
    A+

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Voilà de quoi remplir une listbox avec un choix parmi les douze mois de l'année

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Command1_Click()
     For i = 0 To 11
       Listbox1.AddItem Format(DateSerial(0, i + 1, 1), "mmmm")
     Next
    End Sub
     
    'puis, au choix  :
     
    Private Sub ListBox1_Click()
      MsgBox Listbox1.List(Listbox1.ListIndex)
      MsgBox Listbox1.ListIndex + 1
      MsgBox Format(Listbox1.ListIndex + 1, "00")
    End Sub

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    la, je sèche !
    Pour répondre à la question de ouskel'n'or:
    tout le travail commence en xls où je lance une macro qui va :
    1 supprimer les données en access du mois introduit ou sélectionné
    2 importer les nouvelles données en access
    3 création des tables du mois introduit ou sélectionné
    4 différentes requêtes
    5 copy/paste des résultats des requêtes dans des fichiers xls, dont certains doivent se rapporter au mois introduit ou sélectionné

    je souhaite donc que au début de ma macro en xls, une procédure if ce met en route :

    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
     
    Dim Msg, Style, Title, Response
    Dim Month As String
       Msg = "Do you want to import new Files and create a Monthly Report?"                            
            Style = vbYesNo + vbExclamation + vbDefaultButton2
            Title = "Import & Create"
            Response = MsgBox(Msg, Style, Title)
            If Response = vbYes Then    
                    Month = InputBox("Enter The Month here: ")
                    DoCmd.RunMacro "1 supprimer les données en access du mois introduit ou sélectionné"
                    DoCmd.RunMacro "2 importer les nouvelles données en access"
                    DoCmd.RunMacro "3 création des tables du mois introduit ou sélectionné"
                    DoCmd.RunMacro "4 différentes requêtes"
                    5 copy/paste des résultats des requêtes dans des fichiers xls
    'la question "select the month" est posée et ce mois est utilisé pour toutes les étapes ou c'est nécessaire en access et en xls
    Else
                    Month = InputBox("Enter The Month here: ")
                    DoCmd.RunMacro "3 création des tables du mois introduit ou sélectionné"
                    DoCmd.RunMacro "4 différentes requêtes"
                    5 copy/paste des résultats des requêtes dans des fichiers xls      
    'la question "select the month" est posée et ce mois est également utilisé pour toutes les étapes ou c'est nécessaire Sauf que les étapes 1 et 2 ne sont pas pris en compte
    je n'ai pas vraiment l'habitude d'utiliser des inputbox ou des listbox.
    je ne sais pas comment ensuite introduire ce résultat dans mes requêtes access (supprimer, création de tables) et comment en tenir compte dans mes code xls

    merci d'avance por l'aide

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    Bonjour à tous,

    N'ayant plus eu de réactions à mon dernier post, j'ai continué mes recherches.

    voici ce que j'ai fait pour le moment :
    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
    Public MyMonth As String
    Sub CreateReports()
     
    Dim Msg, Style, Title, Response
    Dim MyMonth As Date
    Dim acApp As New Access.Application
    Dim ReqSQL1 As String
     
    acApp.OpenCurrentDatabase ("C:\2008\SALES RESULTS\Data Files\Results_2008.mdb")
     
     
     
    Msg = "Do you want to import a new File ?"
            Style = vbYesNo + vbExclamation + vbDefaultButton2
            Title = "Import File"
            Response = MsgBox(Msg, Style, Title)
            If Response = vbYes Then
                MyMonth = InputBox("For witch month do you want to Import a file and create the Results ?")
            ' l'utilisateur tape le mois en question, quel format ???
     
    ReqSQL1 = "DELETE * FROM AA_Results_Mercator WHERE Date =  # " & MyMonth & "#"
     
    acApp.DoCmd.RunSQL (ReqSQL1)
     
            End If
     
    End Sub
    je ne vous demande pas de faire le code à ma place, mais juste de me dire si je suis sur la bonne voie ?
    et éventuellement me corriger.

    d'avance merci

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Pour Access, je ne peux pas t'aider.
    Cependant il y a déjà des choses à revoir dans ton code.
    L'inputbox n'a aucun contrôle si la donnée saisie n'est pas conforme à ce que tu attends.
    Est-ce le N° du mois ou son nom ?
    Tu ne le précises même pas dans ton msg.
    Doit-il être saisi en entier ou seulement les trois premières lettres ? En majuscules ou en minuscules ?
    Dans l'inputBox, tu peux indiquer une valeur par défaut te permettant de préciser le format.
    Si l'inputbox est vide en sortie, qu'as-tu prévu ?

    Sélection du mois dans une liste :
    Pour ça, il faut déjà que ta liste existe. Pour réaliser ça en dynamique, je ne vois guère que l'utilisation d'un userform, création que tu n'envisages pas dans ton code. ucfoutu a mis un code qui placé dans une listbox, elle-même dans un userform, te permettrait de faire ça. Pour ça on peut t'aider mais la décision t'appartient.
    A toi la parole, donc...


    NB - Je modifie le sujet de la discussion afin qu'il corresponde mieux à ta demande

  7. #7
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    nous ne pouvons répondre à ta question sur le format du mois tant que nous ne connaissons pas le type du champs Date (on supposera que c'est date)
    un exemple (très) synthétique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    vMonth = InputBox("Entrez le mois")
     
    strSQL = "DELETE FROM [MaTable] WHERE Month([MaTable].[Date]) = " & vMonth

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    en effet j'ai oublié certains détails des plus importants :

    comme tout cela commence a dépasser mes connaissances très basic de vba, je vais m'en tenir à l'intputbox, qui me semble le plus simple pour le moment.

    dans ma table le champ date est au format jj/mm/aaaa, mais c'est le mois complet qui devra être supprimé
    peu m'importe que l'utilisateur doivent mettre un chiffre de 1 à 12 ou le mois complet ou 3 lettres; mais je pense qu'un chiffre sera le plus simple
    le plus important est que cette donnée soit reconnue pour les autres étapes.
    le texte de mon message n'est qu'un draft, en fonction du format que l'utilisateur doit utiliser, j'adapte mon message.

    si l'inputbox est vide, je veux un message disant que le projet s'arrete et que aucun rapport ne pourra être fait.


    Stéph

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                    Month = InputBox("Enter The Month here: ")
                    if Month ="" then
                            Msgbox "The end !"
                            exit sub
                    endif
    mais il serait bien que tu profites de l'occasion pour apprendre l'utilisation d'un userform et d'une liste placé dedans, non ?

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    ,
    ok, j'ai été un peu plus intelligente et ai essayer ce code pour rendre une de mes feuilles "mois" d'un autre fichier visible : cela foncrtionne correctement, donc merci !

    par contre maintenant il faut que le mois introduit en chiffre serve de critère pour ma requete en access.

    est-il possible de déplacer mon poste vers vba access ? pour que quelqu'un m'aide ?

    le code de cafeine fonctionne dans le sense ou je n'ai pas de message d'erreur, mais il n'y a rien qui ce passe en access ...
    probablement parce que ma variable est déclarée en string alors que le format du champ est une date

    en ce qui concerne l'apprentisage de l'utilisation d'un userform, je suis d'accord avec toi, mais pour le moment le temps me manque pour pouvoir me concentré la dessus. mais dès que j'ai l'occassion, je m'y mets !!!

    Stéph

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Sans vouloir m'immiscer dans le code de ta requête, je pense que le format de ton mois est la cause de ton échec... Je commencerais donc par vérifier ça.
    Ceci dit, pose ta question directement dans le forum Access, cela évitera à ceux qui peuvent t'aider d'avoir à relire toute cette discussion
    Bonne chance

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    alors,
    j'ai rajouté une variable
    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
     
    Public mydate As String
    Public mymonth As String
     
    Sub RunAccessImport()
    Dim Msg, Style, Title, Response
    Dim mymonth As String
    Dim mydate As String
     
    mydate = InputBox("Enter The Date here (format = dd/mm/yyyy): ")
                        If mydate = "" Then
                                MsgBox "No Reports will be created!"
                                Exit Sub
                        End If
    CheckProducts
    End Sub


    la variable fonctionne dans ce module, mais je voudrais évidement que la valeur de cette variable fonctionne également dans les autres modules de mon projet.
    bizarement ça ne le fait pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub CheckProducts()
     
    Range("D6").Value = mydate
     
    End Sub
    vous pouvez m'expliquer ?

    je croyais avoir compris, mais non ...

    pour info, ça fonctionne maintenant vers access !

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu as MyDate en Public et tu re-déclares dans la procédure. Supprime la déclaration dans la procédure.

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    SUPER,
    j'ai encore appris quelque chose en plus !

    un GRAND

    je ne mets pas encore ce post en réolu au cas ou j'aurai encore des questions sur les variables de mon projet

    Stéph

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    j'ai eu raison de ne pas mettre résolu ...

    la variable est reconnue dans les premiers modules.
    lorsque je l'utilise pour la séléction d'une feuille j'i un message :
    "erreur de compilation : nom ambigu détecté :mymonth"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Sheets(mymonth).Visible = True
         Sheets(mymonth).Select
    ...

  16. #16
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Tu n'aurais pas une procédure (Sub) qui s'appelle mymonth?

    Ou, si tu n'as pas modifié ton code posté à 11h33:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public mydate As String
    Public mymonth As String
     
    Sub RunAccessImport()
    Dim Msg, Style, Title, Response
    Dim mymonth As String
    Tu as encore mymonth déclaré 2 fois.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    bonsoir,
    j'avais déjà adapté mon code et supprimé de mon codedonc l'erreurn'est pas la,
    je viens de vérifier le projet completement et je n'ai pas de sub avec le même nom.
    en double controle, j'ai même renommer ma variable et tous les modules et la valeur était reprise, mais rien n'y fait
    ce qui est bizarre c'est que la ou je déclare ma variable, cela fonctionne et la ou je veux voir ma feuille, cal ne fonctionne plus...

    je crois que j'ai oublié de mentionner une info importante !
    la feuille que je veux afficher avec ma variable se trouve dans un autre classeur que j'ouvre au préalable

    Steph

  18. #18
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Bonsoir Stéphanie

    Je m'immisce dans la discussion (un peu difficile à suivre, tu en conviendras...)

    1. Dans quel module se trouve que tu utilises? Un module "standard" ou un module attaché à une feuille de calcul?

    2. Pour le lien avec Access, ton problème est-il réglé?

  19. #19
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Remplace le nom de ta variable MyMonth ou de ta sub mymonth. Vba ne sait plus où il en est et s'il doit prendre la sub ou la sheet. Je serais de l'avis d'AlainTech : Tu as un pb avec tes variables

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    j'ai moi-même difficile à m'y retrouver

    je recap :
    ma variable mymonth me sert à introduire un mois (sous forme de chiffre de 1 à 12) dans un inputbox.
    cette variable est d'abord utilisée pour mes requetes en access => ça c'est OK
    ensuite elle doit être utilisée pour afficher les feuilles du mois correspondant dans d'autres classeurs ces classeurs je les ouvre au préalable dans mes procédures
    je n'ai pas de sub avec le même nom que ma variable.
    j'ai déclaré ma variable 1 seul fois en Public
    ma variable se trouve dans un module standard
    j'ai déjà renommé ma variable mais le problème reste le même.
    la variable fonctionne lorsque je reste dans le même module avec une nouvelle procedure.

    pfff, je suis vraiment pas doué ...
    dès que j'ia fini ceci, je prends le temps de m'informer un peu plus sur les variables...
    dès qu'elle passe dans un autre module j'ai le message d'erreur

Discussions similaires

  1. Création, modification de table Access avec critère date
    Par stephanies_1977 dans le forum Général VBA
    Réponses: 5
    Dernier message: 10/03/2008, 20h31
  2. Requêtes sur enregistrements avec critères dates
    Par Aliveli dans le forum Access
    Réponses: 10
    Dernier message: 05/06/2006, 13h41
  3. Exploiter une table Access avec Ametis(étiquettes)
    Par Badboy62cfp dans le forum Access
    Réponses: 2
    Dernier message: 24/05/2006, 14h04
  4. Exploiter une table (Access) avec Ametis...
    Par Badboy62cfp dans le forum Access
    Réponses: 16
    Dernier message: 16/05/2006, 16h53
  5. detecter une modification de table access
    Par nonodev12 dans le forum Access
    Réponses: 2
    Dernier message: 20/01/2006, 07h37

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