Microsoft Calendar Control 10.0 et versions ultérieures utilisent une valeur incorrecte pour la propriété FirstDay

Numéro de la base de connaissances d’origine : 826761

Remarque

Cet article s’applique à un fichier de base de données Microsoft Access .MDB ou .ACCDB. Vous devez disposer de connaissances de base en macro, codage et interopérabilité avant de commencer.

Symptômes

Dans Microsoft Access, un jour incorrect s’affiche pour le premier jour du contrôle calendrier. Ce problème se produit lorsque vous insérez un contrôle de calendrier Microsoft 10.0 ou une version ultérieure dans un formulaire ou un état, puis que vous définissez la FirstDay propriété du contrôle calendrier à l’aide de constantes intrinsèques Microsoft Visual Basic pour Applications (VBA).

Par exemple, vous définissez la FirstDay propriété du contrôle calendrier sur vbMonday ou vbTuesday. Lorsque vous définissez la FirstDay propriété du contrôle calendrier sur vbTuesday, le calendrier utilise mercredi comme premier jour de la semaine.

Remarque

Lorsque vous utilisez les versions antérieures du contrôle Calendrier, vous pouvez définir la FirstDay propriété correctement.

Cause

Ce problème se produit parce que les constantes intrinsèques pour les jours définis dans Microsoft Visual Basic, telles que vbSunday et vbMonday, ne sont pas associées à la valeur de jour correcte.

Solution de contournement

Pour contourner ce problème, procédez comme suit :

  1. Déterminez l’association entre les jours, les constantes intrinsèques VBA et les valeurs numériques associées aux valeurs de jour et aux constantes intrinsèques VBA correctes. Pour cela, procédez comme suit :

    1. Démarrez Access.

    2. Ouvrez l’exemple de base de données Northwind.

    3. Dans la fenêtre Base de données, cliquez sur Formulaires sous Objets.

      Remarque

      Dans Access 2007, cliquez sur l’onglet Créer , puis sur Création de formulaire dans le groupe Formulaires .

    4. Dans le volet droit, double-cliquez sur Créer un formulaire en mode Création.

      Remarque

      Dans Access 2007, ignorez cette étape.

    5. Dans le menu Insertion , cliquez sur Contrôle ActiveX.

    Remarque

    Dans Access 2007, cliquez sur l’onglet Création , puis sur Insérer un contrôle ActiveX dans le groupe Contrôles .

    1. Dans la boîte de dialogue Insérer un contrôle ActiveX , sélectionnez Calendar Control 10.0 ou version ultérieure dans la zone de liste Sélectionner un contrôle ActiveX , puis cliquez sur OK.

    2. Ajoutez un bouton de commande au formulaire dont les propriétés sont définies comme suit :

      Propriété Valeur
      Name testFD
      Caption Modifier le premier jour
    3. Dans le menu Fichier, cliquez sur Enregistrer.

      Remarque

      Dans Access 2007, cliquez sur le bouton Microsoft Office, puis sur Enregistrer.

    4. Dans la boîte de dialogue Enregistrer sous , tapez Form1 dans la zone Nom du formulaire, puis cliquez sur OK pour enregistrer le formulaire Form1.

    5. Dans le menu Affichage, cliquez sur Code.

      Remarque

      Dans Access 2007, cliquez sur l’onglet Création , puis sur Afficher le code dans le groupe Outils .

    6. Dans le Rédacteur Visual Basic, tapez ou collez le code suivant :

      Option Compare Database
      
      Private Sub testFD_Click()
          Calendar0.FirstDay = vbTuesday
      End Sub
      
    7. Ouvrez Form1 en mode Formulaire.

    8. Cliquez sur le bouton Modifier le premier jour .

      Remarque

      Si la première colonne du contrôle calendrier n’est pas définie sur Mardi, notez le jour dans la première colonne.

    9. Dans le Rédacteur Visual Basic, cliquez sur Fenêtre Exécution dans le menu Affichage.

    10. Dans la fenêtre Exécution, tapez ?vbTuesday, puis appuyez sur Entrée.

      Notez la valeur numérique.

    11. Répétez l’étape j à l’étape o en remplaçant vbTuesday par d’autres constantes intrinsèques VBA, telles que vbMondayet vbWednesday.

      Notez que vous aurez le tableau suivant pour afficher l’association entre les jours, les constantes intrinsèques VBA et les valeurs numériques associées aux valeurs de jour correctes et aux constantes intrinsèques VBA.

      Jour de la semaine Constante intrinsèque VBA Valeur numérique associée
      Lundi vbSunday 1
      Mardi vbMonday 2
      Mercredi vbTuesday 3
      Jeudi vbWednesday 4
      Vendredi vbThursday 5
      Samedi vbFriday 6
      Dimanche vbSaturday 7
  2. Créez une énumération personnalisée globale qui est correctement mappée aux jours de semaine. Pour cela, procédez comme suit :

    1. Dans la fenêtre Base de données, cliquez sur Module sous Objets.

      Remarque

      Dans Access 2007, cliquez sur l’onglet Créer , sur la flèche sous Macro dans le groupe Autre , puis sur Module.

    2. Dans le menu Insertion, cliquez sur Module.

      Remarque

      Dans Access 2007, ignorez cette étape.

    3. Tapez ou collez le code suivant dans le Rédacteur Visual Basic :

      Option Explicit
      
      Public Enum nwFirstDay
         nwMonday = 1
         nwTuesday = 2
         nwWednesday = 3
         nwThursday = 4
         nwFriday = 5
         nwSaturday = 6
         nwSunday = 7
      End Enum
      

      Remarque

      Créez l’énumération comme décrit dans la colonne « Jour de semaine » et dans la colonne « Valeur numérique associée » correspondante de la table qui se trouve à l’étape 1r.

    4. Nommez le module Day_Association et enregistrez-le.

    5. Fermez Visual Basic Editor.

  3. Remplacez les constantes intrinsèques VBA dans votre application par les constantes qui se trouvent dans l’énumération personnalisée décrite à l’étape 2.

    Par exemple, si votre code d’origine est

    Calendar0.FirstDay = vbTuesday
    

    modifiez votre code pour utiliser l’énumération personnalisée comme suit :

    Calendar0.FirstDay = nwTuesday
    
  4. Exécutez l’application.

Informations supplémentaires

Les constantes intrinsèques VBA ne dépendent pas des informations locales du système. Par exemple, sur un ordinateur dont le système d’exploitation est localisé en allemand, le premier jour de la semaine est lundi. La valeur numérique associée à Lundi sur l’ordinateur est toujours 0.

Étant donné que le contrôle Calendar Control 10.0 ou version ultérieure est un contrôle Microsoft ActiveX mondial, vous ne pouvez pas contrôler les valeurs numériques associées aux constantes intrinsèques VBA en fonction des spécifications de votre ordinateur. Par conséquent, le problème mentionné dans la section « Symptômes » de cet article se produit.

Procédure pour reproduire le problème

  1. Démarrez Access.

  2. Ouvrez l’exemple de base de données Northwind.

  3. Dans la fenêtre Base de données, cliquez sur Formulaires sous Objets.

    Remarque

    Dans Access 2007, cliquez sur l’onglet Créer , puis sur Création de formulaire dans le groupe Formulaires .

  4. Dans le volet droit, double-cliquez sur Créer un formulaire en mode Création.

    Remarque

    Dans Access 2007, ignorez cette étape.

  5. Dans le menu Insertion , cliquez sur Contrôle ActiveX.

    Remarque

    Dans Access 2007, cliquez sur l’onglet Création , puis sur Insérer un contrôle ActiveX dans le groupe Contrôles .

  6. Dans la boîte de dialogue Insérer un contrôle ActiveX , sélectionnez Calendar Control 10.0 ou version ultérieure dans la zone de liste Sélectionner un contrôle ActiveX , puis cliquez sur OK.

  7. Ajoutez un bouton de commande au formulaire dont les propriétés sont définies comme suit :

    Propriété Valeur
    Name testFD
    Caption Modifier le premier jour
  8. Dans le menu Affichage, cliquez sur Code.

    Remarque

    Dans Access 2007, cliquez sur l’onglet Création , puis sur Afficher le code dans le groupe Outils .

  9. Dans le Rédacteur Visual Basic, tapez ou collez le code suivant :

    Option Compare Database
    
    Private Sub testFD_Click()
     Calendar0.FirstDay = vbTuesday
    End Sub
    
  10. Dans le menu Fichier, cliquez sur Enregistrer.

    Remarque

    Dans Access 2007, cliquez sur le bouton Microsoft Office, puis sur Enregistrer sous.

  11. Dans la boîte de dialogue Enregistrer sous , tapez Form1 dans la zone Nom du formulaire, puis cliquez sur OK pour enregistrer le formulaire Form1.

  12. Ouvrez Form1 en mode Formulaire.

  13. Cliquez sur le bouton Modifier le premier jour .

    Bien que vous définissez la FirstDay propriété du contrôle calendrier sur vbTuesday, le calendrier sélectionne Mercredi comme premier jour de la semaine.

References

Pour plus d’informations sur le contrôle de calendrier et les propriétés du contrôle calendrier, ouvrez Mscal.hlp, puis recherchez la rubrique appropriée. Mscal.hlp se trouve dans les dossiers suivants :

Microsoft Access 2002

Lecteur d’installation : \Program Files\Microsoft Office\Office10

Microsoft Office Access 2003

Lecteur d’installation : \Program Files\Microsoft Office\Office11

Remarque

Le lecteur d’installation est un espace réservé pour le nom de votre lecteur d’installation.