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 :

[VBA-E] récupérer des infos que l'on demande à l'utilisateur


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    October 2005
    Messages
    783
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : October 2005
    Messages : 783
    Points : 437
    Points
    437
    Par défaut [VBA-E] récupérer des infos que l'on demande à l'utilisateur
    Bonjour à tous,
    je souhaiterais faire une petite application qui construisse un tableau avec les dates en enlevant les week end
    J'ai eu donc comme idée de demander à l'utlisateur le 1er du mois tombe quel jour (lundi, mardi...) puis en fonction de la réponse enlevé les bonne date
    Le seul problème c'est que je sais vraiment pas comment faire pour :
    - demander l'information à l'utilisateur
    - récupérer cette info

    quelqu'un pourrai m'aider ?
    Le savoir est une arme alors soyons armés

  2. #2
    Membre habitué
    Inscrit en
    May 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : May 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    Récupère le résultat qui est dans "myvalue" pour faire ton traitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim Message, Title, Default, MyValue
    ' Définit le message.
    Message = "Entrez une date..."
    Title = "Titre de mon inputbox"   ' Définit le titre.
     
    ' Affiche le message, le titre
    MyValue = InputBox(Message, Title)

  3. #3
    Membre habitué
    Inscrit en
    May 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : May 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    bien sur tu colles ce code derrier un bouton de commande!

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    June 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : June 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut Re: Peut on récupérer des infos que l'on demande à l'utilisa
    Citation Envoyé par Nom
    J'ai eu donc comme idée de demander à l'utlisateur le 1er du mois tombe quel jour (lundi, mardi...) puis en fonction de la réponse enlevé les bonne date
    comme on te la dis plus haut input permet de saisir des infos opérateur ...

    mais en lisant ton exemple de demande .. je me dis, tu n'as pas besoin de poser cette question à un opérateur ... les fonctions de dates sont la pour ça :


    - WeekDay(maDate) => renvoi le jour de semaine avec 1 = Dimanche , 2 lundi...

    - DateSerial ( anneé,mois,jour) => te permet de construire une date ...

    - Day .. numéro de jour
    - month numéro de mois
    - year ... année

    - now : date actuelle

    par exemple la ligne suivante renvoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.print WeekDay(DateSerial(Year(now),Month(now),1))
    le jour de semaine du mois actuel 5 = Jeudi...


    ou en utilisant l'instruction Format pour l'afficher en clair

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.print Format(DateSerial(Year(now),Month(now),1),"dddd")


    PS: Debug.print permet l'affichage du résultat dans fenêtre exécution

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

    Informations forums :
    Inscription : February 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Est-ce en VB que tu veux faire ça ou en VBA ?
    En VBA j'ai fait ça :

    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
    Sub CalendrierJoursOuvrés()
    Dim ok As Boolean, ko As Boolean
    Dim i As Integer, j As Integer, L As Integer, DateRef As Date
        JoursFériés = Array("28 mars 2005", "5 mai 2005", "14 juillet 2005", "15 août 2005", "1 novembre 2005", "11 novembre 2005")
        NomFeuille = Format(DateSerial(2005, 1, 1), "mmmm") 'Feuille janvier
        ActiveSheet.Name = NomFeuille
        j = 1
        For i = 1 To 365
            DateRef = DateSerial(2005, 1, i)
            If Format(DateRef, "dd") = "01" And i > 31 Then
                L = 1
                ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count) 'MoisPrécédent
                NomFeuille = Format(DateRef, "mmmm")
                ActiveWorkbook.ActiveSheet.Name = NomFeuille
            End If
            ko = False
            For k = 1 To UBound(JoursFériés)
                ko = ko Or InStr&#40;Format&#40;CDate&#40;DateRef&#41;, "dd mmmm yyyy"&#41;, JoursFériés&#40;k&#41;&#41; <> 0
                If ko Then Exit For
            Next k
            ok = Format&#40;WeekDay&#40;DateRef&#41;, "dddd"&#41; <> "samedi"
            ok = ok And Format&#40;WeekDay&#40;DateRef&#41;, "dddd"&#41; <> "dimanche"
            If ok And Not ko Then
                L = L + 1
                Worksheets&#40;NomFeuille&#41;.Cells&#40;L, 1&#41;.Formula = Format&#40;DateRef, "dddd dd mmmm yyyy"&#41;
                j = j + 1
            End If
        Next
    End sub
    Ajoute une feuille par mois à un classeur Excel et place dans la colonne A les jours ouvrés de chaque mois, jours fériés exclus.

    Je ne pense pas que c'est ce que tu veux mais je te le passe pour la syntaxe. Tu n'as pas besoin de demander quel est le premier jour du mois, cette procédure te le donne.

    A toutes fins utiles

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    October 2005
    Messages
    783
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : October 2005
    Messages : 783
    Points : 437
    Points
    437
    Par défaut
    Waou c'est du lourd , je voulais effectivement en vba
    Il va me falloir un peu de temps pour comprendre
    Le savoir est une arme alors soyons armés

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    October 2005
    Messages
    783
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : October 2005
    Messages : 783
    Points : 437
    Points
    437
    Par défaut
    tres bien maintenant j'ai récupérer le 1er jour donc je commence au jour
    - 2 si le 1er du mois est un dimanche ,
    - 3 si le 1er du mois est un samedi
    - 1 dans tout les autres cas

    en effet je n'affiche pas les samedi et dimanche

    ce que je veux faire maintenant c'est faire tout les autres jours (pour l'instant j'ai que le 1er jour)
    par exemple si le 1er du mois est un mardi
    en a1 il y aura 1
    a2 -> 2
    a3 -> 3
    a4 -> 4
    a5 -> la c'est samedi donc j'affiche Sem44 par ex et je fais une fonction somme de la semaine passer
    a6 -> donc dimanche y aura rien sur toute la ligne on peut la bloquer?
    a7->7
    ...

    la je reseche pour faire ca

    je vous met le code qui m'a permis d'avoir le premier jour
    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
     
    Dim Jour, Nb_jour, Semaine, Mois, Année, Message$, Message2$, Message3$, Message4$, Titre$
     
     
        Message = "Entrer le mois en chiffre &#40;janvier= 01, décembre =12&#41;"
        Message2 = "Entrer le nombre de jour compris dans le mois"
        Message3 = "Entrer l'année"
        Message4 = "indiquer le numero de la premiere semaine &#40;ex&#58; Sem 44&#41;"
        Titre = "création du tableau"
     
        Mois = InputBox&#40;Message, Titre&#41;
        Année = InputBox&#40;Message3, Titre&#41;
        Nb_jour = InputBox&#40;Message2, Titre&#41;
        Semaine = InputBox&#40;Message4, Titre&#41;
        Jour = WeekDay&#40;"1/" & Mois & "/" & Année&#41;
        Range&#40;"A1"&#41;.Select
                Select Case Jour
                'si le 1er est un dimanche commencer le tableau par le 2
                Case "1"
                    ActiveCell.FormulaR1C1 = "2"
                'si le 1er est un samedi commencer le tableau par le 3
                Case "7"
                    ActiveCell.FormulaR1C1 = "3"
                'sinon commencer par le 1
                Case Else
                    ActiveCell.FormulaR1C1 = "1"
            End Select
        Next i
    Le savoir est une arme alors soyons armés

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

    Informations forums :
    Inscription : February 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Hello,

    Tu mets

    Message = "Entrer le mois en chiffre (janvier= 01, décembre =12)"
    Message2 = "Entrer le nombre de jour compris dans le mois"
    Message3 = "Entrer l'année"
    Message4 = "indiquer le numero de la premiere semaine (ex: Sem 44)"
    messag2 : qu'entends-tu par "nombre de jour compris dans le mois" le nombre de jours ouvrés, le nombre de jours travaillés ou le nombre de jours total du mois ?

    Message4 : Que veux-tu ? Le N° de la première semaine du message2 ?

    J'ai vu passer un post sur le n° de semaine mais j'ai peur que ce soit en VB. En VBA 97, je ne crois pas avoir ça. Le code permettait d'avoir le N° d'une semaine pour une date donnée... mais il faut la date complète pour l'obtenir.
    On peut faire ça en VBA, la première semaine partant soit du Dimanche suivant le 31/12/ précédent, soit du lundi (c'est une option que tu peux fixer par soft)
    Maintenant, pour saisir une date complète au format voulu, j'ai ça :
    Tu en extrait ce qui t'intéresse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub DateSaisirAvecInput&#40;&#41;
        Do While Not ok
            LaDate = InputBox&#40;"Saisir la date au format jj/mm/aa", "Saisir la date", Format&#40;CDate&#40;Now&#41;, "dd/mm/yy"&#41;&#41;
            MsgBox LaDate
            ok = IsDate&#40;LaDate&#41; Or LaDate = ""
        Loop
    End Sub
    Tu peux ne saisir que le jour et le mois ou seulement l'année. Mais ainsi tu es sûr du format saisi.

    A+

    Or, aucun moment tu ne donnes le mois

  9. #9
    Expert éminent sénior


    Profil pro
    Inscrit en
    June 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : June 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    je crois aussi que les données demandés .. ne sont pas les bonnes... dis nous en plus sur ce que tu ve faire ...

    la date de début et la date de fin par exemple ne te suffisent pas comme entrée opérateur ... ?

    tous le reste peu se calculer ...
    pour le numéro de la semaine : tu peu utiliser format .. :
    format(now,"ww") ...

    ensuite pour générer ton tableau tu peu faire une boucle ..

    .. Calcul date début suivant Date saisi par opérateur.... et 1° jour du mois.. voir plus haut...

    Pour MaDate = DateDebut to DateFin ...
    ... traitement suivant jour .../Semaine

    Fin Pour

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    October 2005
    Messages
    783
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : October 2005
    Messages : 783
    Points : 437
    Points
    437
    Par défaut
    ok je vais essayer d'etre plus claire
    en gros j'ai un tableau avec toute les dates d'un mois on va prendre décembre 2005 par exemple
    la tu affiche de a1 a a31 1 à 31 (a1 ->1 , a2 ->2 ... )
    sauf que pour les jour correspondant au week end (exemple le 9/12/05 et 10/12/05)
    je veux pas afficher ces dates. Je veux mettre à la place du samedi le numéro de la semaine (ici sem 49 je crois) et rien le 10 (d'ailleur si je peux empecher toute insertion correspondant aux ligne correspondant aux dimanche je le ferai)
    c'est plus clair?
    Le savoir est une arme alors soyons armés

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    October 2005
    Messages
    783
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : October 2005
    Messages : 783
    Points : 437
    Points
    437
    Par défaut
    avec l'aide d'autre personne j'ai deja ceci

    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
     
    Function DaysInAMonth&#40;d As Date&#41; As Integer
      DaysInAMonth = DateAdd&#40;"m", 1, d&#41; - d
    End Function
    Function DaysInThisMonth&#40;month, year As Integer&#41; As Integer
      DaysInThisMonth = DaysInAMonth&#40;"1/" & month & "/" & year&#41;
    End Function
     
    Function WeekNumber&#40;d As Date&#41; As Integer
        WeekNumber = DatePart&#40;"ww", d, vbMonday, vbFirstFourDays&#41;
    End Function
     
    Sub Essai&#40;&#41;
        Dim i As Integer, nb As Integer
        Dim d As Date
     
        Dim wd As Integer
        Dim Mois, Année As Integer
     
     
        Mois = 11
        Année = 2005
     
        d = "1/" & Mois & "/" & Année
        nb = WeekNumber&#40;d&#41;
        For i = 0 To DaysInAMonth&#40;d&#41; - 1
            Range&#40;"A" & i + 1&#41;.Formula = d + i
            wd = WeekDay&#40;d + i, vbMonday&#41;
            Select Case wd
                Case 6&#58;
                    Range&#40;"A" & i + 1&#41;.Formula = "Sem" & nb
                Case 7&#58; Range&#40;"A" & i + 1&#41;.Formula = "RIEN"
            End Select
        Next

    ca me fais un peu ce que je veux sauf que j'dois rajouter la demande à l'utilisateur pour le mois et l'année (pour l'instant ca marche que pour un mois fixe=novembre et une année=2005) ca je devrai y arrivé
    mais surtout le coup du bloquage ca je sais pas trop
    Le savoir est une arme alors soyons armés

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    October 2005
    Messages
    783
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : October 2005
    Messages : 783
    Points : 437
    Points
    437
    Par défaut
    j'ai d'autre souci déja dans le cod eque j'ai donné ca met toujour la meme semaine mais ca c'est déja réglé en mettant un nb = nb+1 à la fin du case 6 ca regle le probleme
    ce qui me dérange c'est que le premier chiffre s'affiche en a1 or je veut mettre un titre du style date assez gros donc j'aimerai que ca commence en a4 seulement que dois changer?
    Le savoir est une arme alors soyons armés

  13. #13
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    February 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : February 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    Je trouve que la validation de données sera laborieuse avec un InputBox pour les dates. Même en donnant un modèle de saisie l'utilisateur essaiera quand même de saisir la date au format auquel il est habitué.

    De plus, si tu as plusieurs renseignements à demander, tu devrais peut-être considérer l'utilisation d'un userForm avec des champs TextBox pour le texte (nom et prénom, par exemple) et un contrôle qui retourne une date au bon format comme les contrôles MonthView, Calendar ou DateAndTimePicker.

    Tu pourrais aussi faire afficher la boîte de dialogue de saisie de données fournie par Excel. Voici le code de la macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub AfficherGrille&#40;&#41;
        ActiveSheet.ShowDataForm
    End Sub
    Pour activer cette macro automatiquement à l'ouverture du classeur:
    Dans l'explorateur de projet de la fenêtre d'édition VBA, sélectionne ThisWorkbook (double-clique).
    Dans la fenêtre d'édition du code, déroule la liste General, et choisis Workbook.
    Une procédure Open est créée automatiquement. Ça tombe bien, c'est celle-ci qui nous intéresse!
    Insère-y ces deux lignes de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Feuil1.Activate  'la feuille de la grille
    Call AfficherGrille

  14. #14
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    February 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : February 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    C'est encore moi!

    Une astuce en passant

    Pour insérer la date du jour dans une cellule Excel (ou dans le formulaire de saisie, la Grille, quoi!) : tapez Ctrl+;

    Pour insérer l'heure du moment dans une cellule Excel (ou dans la Grille) : tapez Ctrl+Maj+;

    J'ai découvert ça par accident il y a quelques années (avec Excel 7): je voulais taper un point-virgule et j'ai trop étiré mon petit doigt. Résultat, Pan! V'là que la date est apparue au bout de ce que que venais de saisir!

    Bonne journée!

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

    Informations forums :
    Inscription : February 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Salut zaza,

    Pour insérer l'heure du moment dans une cellule Excel (ou dans la Grille) : tapez Ctrl+Maj+;
    Ça s'appelle "Les touches de fonctions".
    Dans l'aide Excel, tu tapes "Touches de fonction disponibles dans Microsoft Excel" et tu as toute la liste de ce que tu peux faire avec tes doigts...

    A toutes fins utiles... mais je pense que tu avais trouvé ça toute seule... Tu es grande, maintenant.

    A+

Discussions similaires

  1. [VBA-Excel]Récupérer des infos d'un document Word
    Par Kerweb dans le forum VBA Word
    Réponses: 5
    Dernier message: 16/10/2006, 17h27
  2. Récupérer des infos d'une date
    Par mister3957 dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 25/10/2005, 11h08
  3. [servlet] Récupérer des infos sur le client
    Par kenito dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 07/09/2005, 19h08
  4. [ASP] Récupérer des infos de Session
    Par Frédérick dans le forum ASP
    Réponses: 3
    Dernier message: 07/04/2004, 12h01
  5. Récupérer des infos sur un AVI
    Par FredericB dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/12/2003, 15h25

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