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 :

Valeur combobox transformé en date [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Derrière l'écran
    Inscrit en
    Novembre 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Derrière l'écran

    Informations forums :
    Inscription : Novembre 2012
    Messages : 161
    Points : 68
    Points
    68
    Par défaut Valeur combobox transformé en date
    Bonjour à tous,

    J'ai créer un fichier en vba avec un userform.
    Dans cet userform, il y a 2 combobox (référencée par une liste de date dans une autre feuille - Combobox3 et Combobox4)

    Quand je lance mon userform et que je sélectionne une date dans mon menu déroulant (combobox) celle ci ne se transforme pas en date. Du coup la suite de ma macro ne se déroule pas (inserer une ligne dans ma feuille correspondant au nombre de date début et fin d'absence : 1 ligne = 1 jour, donc période de 10 jours = 10 lignes)

    J'ai essayé de mettre différentes formules (au lancement du userform) mais rien n'y fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ComboBox3.Value = CDate(ComboBox3.Value)
    ComboBox4.Value = CDate(ComboBox4.Value)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ComboBox3.Value = Format((ComboBox3.Value), "dd/mm/yyyy")
    ComboBox4.Value = Format((ComboBox4.Value), "dd/mm/yyyy")
    Je ne vois pas ou cela pose problème ou est-ce que je pars dans la bonne direction

    Y aurait-il quelqu'un pour m'aider ?

    En vous remerciant au préalable,

    Ludovic
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    le problème c'est que tu peux, en entrée, insérer des Dates dans ta combobox

    mais, en sortie, il va te ramener un string qu'il faut convertir via Cdate()

    tu étais sur la bonne piste au niveau de la conversion ... mais vu que tu réinjectes ton Cdate(me.combobox3.value) dans ton combobox3.Value ... au final il revient en string !

    Fait plutôt comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim MaDate as Date
    MaDate = Cdate(Me.Combobox3.Value)
     
    ' ensuite, tu utilises la variable MaDate au lieu de Me.Combobox3.Value qui n'a servi que d'opérateur de récupération

  3. #3
    Membre du Club
    Homme Profil pro
    Derrière l'écran
    Inscrit en
    Novembre 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Derrière l'écran

    Informations forums :
    Inscription : Novembre 2012
    Messages : 161
    Points : 68
    Points
    68
    Par défaut
    merci de ton aide, mais je n'arrive pas à intégrer cela dans mon code userform pour que la macro se déploie.

    J'ai mis 2 variables (date début et fin) et remplacé les valeurs de combobox par mes variables pour le déroulement de la variable mais une erreur continue de persister

    j'ai laissé mon fichier en pièce jointe avec ces modifications, car la conversion de texte en date me parait toujours pas active
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    nous sommes sur une problématique de programmation VBA pure.

    Ainsi, le classeur n'est pas nécessaire

    en revanche, nous n'avons toujours pas vu tes procédures pour comprendre la mauvaise utilisation que tu fais de tes variables

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    J'ai des difficultés à comprendre :
    pour que la macro se déploie
    pour le déroulement de la variable
    la conversion de texte en date me parait toujours pas active
    ce que l'on dit ou écrit révèle souvent le caractère plus qu'approximatif de ce que l'on croit percevoir.
    Et que dire de :
    mais une erreur continue de persister
    sans prendre au moins le soin de dire laquelle et sur quelle ligne de code !
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  6. #6
    Membre du Club
    Homme Profil pro
    Derrière l'écran
    Inscrit en
    Novembre 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Derrière l'écran

    Informations forums :
    Inscription : Novembre 2012
    Messages : 161
    Points : 68
    Points
    68
    Par défaut
    Voici le code complet :

    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
    <div class="bbcode_container">
    	<div class="bbcode_quote">
    		<div class="quote_container">
    			<div class="bbcode_quote_container"></div>
     
    				Private Sub CommandButton1_Click()
    'Déclaration variable des 2 selections dates (et conversion en format date)
    Dim MaDateDeb As Date
    MaDateDeb = CDate(ComboBox3.Value)
     
    Dim MaDateFin As Date
    MaDateFin = CDate(ComboBox4.Value)
     
     
        Dim Ligne As Long
        With Sheets("Listing")
            If Me.ComboBox1.Text <> "" And Me.ComboBox2.Text <> "" And _
                MaDateFin >= MaDateDeb And _
                Me.ListBox1.Value <> "" And Me.ListBox2.Value <> "" _
            Then
                Ligne = .Cells(.Rows.Count, 2).End(xlUp).Row
                For i = 0 To MaDateFin - MaDateDeb
                    Ligne = Ligne + 1
                    .Cells(Ligne, 2).Value = UCase(Me.ComboBox2.Text)
                    .Cells(Ligne, 3).Value = MaDateDeb + i
                    .Cells(Ligne, 4).Value = Me.ListBox1
                    .Cells(Ligne, 5).Value = Me.ListBox2
                    .Cells(Ligne, 6).Value = "EN ATTENTE"
                    .Cells(Ligne, 7).Value = UCase(Me.ComboBox1.Text)
     
            'Si motif maternité, alors rajouter la période de maternité déjà validée
            If Me.ListBox1.Value = "MATERNITÉ" Then
                    .Cells(Ligne, 2).Value = UCase(Me.ComboBox2.Text)
                    .Cells(Ligne, 3).Value = MaDateDeb + i
                    .Cells(Ligne, 4).Value = Me.ListBox1
                    .Cells(Ligne, 5).Value = "JOURNÉE"
                    .Cells(Ligne, 6).Value = "XXXXX"
                    .Cells(Ligne, 7).Value = UCase(Me.ComboBox1.Text)
     
                    End If
               'Si motif listé, alors rajout la ligne pour la reprise à vérifier
                If Me.ListBox1.Value = "MALADIE" _
                Or Me.ListBox1.Value = "MALADIE PROFESSIONNELLE" _
                Or Me.ListBox1.Value = "MATERNITÉ" _
                Or Me.ListBox1.Value = "ARSM" _
                Or Me.ListBox1.Value = "ACCIDENT DE TRAVAIL" Or Me.ListBox1.Value = "ACCIDENT DE TRAJET" _
                Or Me.ListBox1.Value = "CONGÉ PATERNITÉ" Or Me.ListBox1.Value = "MI-TEMPS THÉRAPEUTIQUE" Then
                        .Cells(Ligne + 1, 2).Value = UCase(Me.ComboBox2.Text)
                        .Cells(Ligne + 1, 3).Value = MaDateFin + 1
                        .Cells(Ligne + 1, 4).Value = Me.ListBox1
                        .Cells(Ligne + 1, 5).Value = "REPRISE ???"
                        .Cells(Ligne + 1, 6).Value = "EN ATTENTE"
                        .Cells(Ligne + 1, 7).Value = UCase(Me.ComboBox1.Text)
                    End If
                Next i
            Else
    MsgBox "Saisie invalide et non enregistrée !!!" & Chr(10) & Chr(10) & "Merci de contrôler la saisie avant l'enregistrement." _
    , vbQuestion, "XXXXXXXXXX"
     
            End If
       End With
     End Sub
     
    		</div>
    	</div>
    </div>
    En cliquant sur le bouton "enregistrer" j'ai visiblement une erreur sur la ligne :
    For i = 0 To MaDateFin - MaDateDeb

    Nom : Sans titre 1.jpg
Affichages : 1348
Taille : 102,9 Ko

  7. #7
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Ton erreur est difficilement associable à ton problème de date

    L'erreur semble indiquer que tu as, par exemple des références de bibliothèques "manquantes", ou a des contrôles appartenant à un projet qui n'est pas ouvert

    n'aurais-tu pas testé sur ce projet des contrôles non standards qui nécessitaient de cocher des références dans ton éditeur de code ?


    J'ai pris ta procédure brute, je l'ai mise dans un fichier vierge, sur un useform où j'ai posé 4 combobox, 2 listbox, 1 optionbutton

    jai mis une date bidon dans chaque combobox, et des textes aléatoires dans les listbox

    Aucun souci, la soustraction de tes deux dates est bien un nombre entier, et j'ai un reporting qui apparait sur la feuille excel

  8. #8
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Cela peut également "sentir" un conflit entre des contrôles pour 32 bits et une version Office 64 bits.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  9. #9
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour.

    Arrete l'execution du code.
    Va dans le menu Outils/Reference.
    Decoche les references manquantes.
    Cordialement

    Docmarti.

  10. #10
    Membre du Club
    Homme Profil pro
    Derrière l'écran
    Inscrit en
    Novembre 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Derrière l'écran

    Informations forums :
    Inscription : Novembre 2012
    Messages : 161
    Points : 68
    Points
    68
    Par défaut
    Un très grand merci, il fallait bien décocher 1 référence manquante qui n'était pas dans ma vision de la réflexion.

    Merci à tous ceux qui ont participé



    Il n'y a plus qu'à tester sur le PC du boulot...

    Nom : finger11.jpg
Affichages : 1451
Taille : 18,6 Ko

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

Discussions similaires

  1. Valeur semaine et année transformée en date
    Par seb92400 dans le forum Access
    Réponses: 14
    Dernier message: 13/08/2007, 18h50
  2. recuperération valeur combobox
    Par benazerty dans le forum Access
    Réponses: 3
    Dernier message: 12/04/2006, 11h38
  3. Réponses: 4
    Dernier message: 06/01/2006, 18h41
  4. Transformation de date dans une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2003, 11h31

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