VBA : Les ActiveX de contrôle des dates



Dans cette article je souhaite expliquer comment utiliser les contrôles ActiveX "Microsoft Monthview "et "Microsoft DTPicker", puisqu'ils ne sont plus fournis en natif dans les versions Excel 2013 et 2016. Dans une première partie nous développerons la récupération et l'installation de ces contrôles, puis leurs utilisations pour contrôler efficacement une saisie de date dans une feuille de calcul ou dans un formulaire VBA.

Installation des contrôles

 

En premier lieu, mettons en place les contrôles "Microsoft Monthview" et "Microsoft DTPicker", le fichier MSCOMCT2.OCX contient les contrôles en question, ainsi que les contrôles UpDown, ScrollBar et Animation. Il faut commencer par télécharger ce fichier, car il n'existe probablement pas sur votre ordinateur (si vous utilisez Excel 2013 ou 2016) vous pouvez le télécharger à l'adresse suivante : http://www.ocxme.com/ocx/files/mscomct2_ocx.html
Vous devez ensuite copier le fichier dans le dossier c:\Windows\system32 si vous avez une version 32 bits de Windows, ou dans le dossier c:\windows\sysWOW64\ en cas de version 64 bits.
Il faut à présent Exécuter le fichier OCX, pour cela activer l'invite de commande en mode AdministrateurUtiliser la commande CMD dans votre commande Démarrer / Exécuter ou dans la zone de recherche selon votre version de Windows. Attention de bien valider la saisie à l'aide des touches SHIFT+ CTRL + Entrée du clavier pour bien basculer l'invite de commande en mode Administrateur.




La ligne de commande à saisir, sera alors :

Pour windows 32 bits : %systemroot%\System32\regsvr32 c:\windows\System32\MSCOMCT2.OCX
Pour windows 64 bits : %systemroot%\SysWoW64\regsvr32 c:\windows\SysWOW64\MSCOMCT2.OCX


Utilisation des contrôles dans Excel : Saisir une date dans une cellule

 

    • Accéder à l'onglet Développeur du Ruban
    • Utilisez la commande Insérer / contrôles ActiveX / Autres contrôles
    • Sélectionnez le contrôle "Microsoft Date and Time Picker control 6.0 (SP6)"
     


    • Dessinez l'objet en glissant + Positionnement et redimensionnement

    Attention la commande Mode Création du ruban Développeur est alors active, pour faire le test de fonctionnement, vous devrez d'abord la désactiver.




    • Quelques réglages de bases possibles grâce au menu contextuel de l'Objet



    • Pour affectez le choix utilisateur à une cellule, utilisez la commande Propriétés du  Menu contextuel



    • Renseignez la propriété LinKedCell

     

    Utilisation des contrôles en VBA : Saisir une date dans un formulaire

     

    Nous allons en premier lieu ajouter les contrôles dans la boite à Outils :



    • Affichez la boîte à outils
    • Faites clic droit pour obtenir le menu contextuel de la boîte
    • Sélectionner alors la commande Contrôle Supplémentaires…


    • Dans la liste des contrôles Choisissez "Microsoft MonthView control 6.0 (SP6)" et "Microsoft Date and Time control 6.0 (SP6)"


     
    • Cliquez sur OK
    • Dessiner les 2 objets MonthView1 et DTPicker1 sur votre formulaire grâce aux nouveaux contrôles apparaissant dans la boîte à outils.



    Ici le code VBA nous montre comment affecter le choix de l'utilisateur dans un contrôle ou l'autre, à une cellule de la feuille de calcul.

    Private Sub CommandButton1_Click()
         Range("a10").Value = DTPicker1.Value
         Range("a11").Value = MonthView1.Value

         UserForm1.Hide
    End Sub



    Merci de votre attention…



    VBA : Modifier la casse à l'aide du clic droit



    La casse est un terme utilisé dans les domaines de la typographie et de l'informatique pour   distinguer une alternative entre les lettres écrites en capitales (MAJUSCULE) et les lettres écrites en minuscule. En l’absence d'utilisation des fonctions de traitement de chaînes de caractères :
    1. =MAJUSCULE( chaîne de caractères )
    2. =MINUSCULE( chaîne de caractères )
    3. =NOMPROPRE( chaîne de caractères) - 1er lettre de chaque mot de la chaîne de caractères en majuscule
    Actuellement, votre logiciel Excel ne permet pas de modifier la casse des mots contenus dans les cellules d'une feuille de calcul (ni commande, ni touche de raccourci clavier). Aussi je vous propose ce code VBA permettant la bascule entre les trois positions. La difficulté ici ne réside pas dans la modification de la casse d'un contenu sélectionné mais plutôt dans le choix de l'affectation de ce code en vue de son exécution. Afin de rendre son utilisation la plus aisée possible, j'ai choisi ici d'utiliser le menu contextuel, c'est à dire de reprogrammer le menu surgissant du bouton droit de la  souris. Pour que cette application puisse être utilisable quelque soit le classeur que vous manipulez, vous avez le choix d'incorporer votre code soit dans un classeur de macros personnelles, soit dans un classeur de macros complémentaires.

     

     

     

     

     

     

     

    Première étape : Modifier le menu contextuel des cellules.

     

    Les procédures sont évidement stockées dans le module ThisWorkbook du projet VBA, j'ai ici choisi d'utiliser mon classeur (.xlsb) de macros personnelles.

    Sub resetmenu()
              Application.CommandBars("cell").Reset

     End Sub
    '**********************************************************
    Private Sub Workbook_Open()
    resetmenu
    'appel la macro qui effacera la commande du menu contextuel
    'crée lors de la session précédente


        Dim Cpop1 As CommandBarPopup
        Dim Cbut As CommandBarButton
        Dim MaBarre As CommandBar
        Set MaBarre = Application.CommandBars("cell")
        Set Cpop1 = MaBarre.Controls.Add(msoControlPopup)
        'on ajoute le popup qui va comporté tout les boutons
        With Cpop1
            .Caption = "Modifier la casse"    'label du sous-menu
        End With
        'on ajoute un bouton au sous-menu contextuel
        Set Cbut = Cpop1.Controls.Add(Type:=msoControlButton)
        With Cbut
            .FaceId = 403    ' bouton avec icône (référence à une table)
            .Caption = "MAJUSCLE"    ' label du bouton
            .OnAction = "majuscule"    'appel de la macro associée
        End With
        'on répéte l'opération pour les deux autres boutons
        Set Cbut = Cpop1.Controls.Add(Type:=msoControlButton)
        With Cbut
            .FaceId = 404
            .Caption = "minuscule"
            .OnAction = "minuscule"
        End With
        Set Cbut = Cpop1.Controls.Add(Type:=msoControlButton)
        With Cbut
            .FaceId = 306
            .Caption = "Nom Propre"
            .OnAction = "nompropre"
        End With
    End Sub


    Etape 2 : Écrire les trois macros pour la gestion de la casse


    Les procédures sont stockées dans une feuille de module de code du projet VBA, du même classeur (.xlsb) de macros personnelles.

    Dim Ch As Range
    Sub majuscule()
      For Each Ch In Selection
      'Pour chaque cellule Ch de ma sélection Selection
      'Selection permet de renvoyer l'objet sélectionné dans la fenêtre active

        If Not Ch.HasFormula Then
        'la propriété HasFormula de l'objet range permet de tester qu'aucune
        ' cellules de la plage ne contiennent de formule, dans ce cas la conversion est ignorée

          Ch.Value = UCase(Ch.Value) 'Upper Case = MAJUSCULE
        End If
      Next Ch
    End Sub

    '*************************************************************
    Sub minuscule()
      For Each Ch In Selection
        If Not Ch.HasFormula Then
          Ch.Value = LCase(Ch.Value) 'Lower Case = minuscule
        End If
      Next Ch
    End Sub


    '*************************************************************
     Sub nompropre()
      For Each Ch In Selection
        If Not Ch.HasFormula Then
          Ch.Value = Application.Proper(Ch.Value)
          'si une fonction Excel n'a pas d'équivalent en VBA
          'utiliser le la fonction Excel (anglais) comme une méthode de l'objet application

        End If
      Next Ch
    End Sub


    Merci de votre attention...



    VBA : En 2016, Quelles nouveautés ?



    De retour après quelques mois d'absences, permettez-moi d'abord chères lecteurs et chères lectrices de vous présenter mes meilleurs vœux pour l'année 2016. Pour ma part je ferais simplement le vœu que ce blog puisse continuer à vous être utile tout au cours de cette nouvelle année.

    Je commencerai donc dans ce premier article par une webographie succincte, me permettant ainsi de vous présenter quelques nouveautés qui pourraient s'avérer utiles pour vos développements et autres codages….  

     

     

     

    Nouvelle version d'Office : 

     


     Office 2016 est disponible depuis la fin du mois de septembre, et se décline actuellement en deux gammes de produits :
    • Sur Office 365 (Famille 5 postes 99 € par an, Personnel 1 poste 69 € par an),
    • En version 2016 (Famille et étudiant 1 poste 149 € par an, Professionnel 539 €)
    Mon propos n'est pas ici de vous présenter l'ensemble des nouveautés de cette version 2016, le journal du net à réaliser un excellent diaporama à ce sujet. Il est clair dans les deux cas que les prix ont très sensiblement augmentés. Par contre pour les développeurs VBA vous pouvez noter les points suivants :

    • Accès à une API Javascript complète sous Windows et Mac
    • De nouveaux objets requêtes et WorkbookQuery pour accélérer et faciliter l'interrogation des bases de données.
    • Des objets comme ModelFormatboolean ou ModelFormatCurrency permettront de fixer un format déclaratif pour des booléens ou des nombres
    • Enfin sachez que de nombreuses nouveautés concernent en fait les versions Mac, notamment la personnalisation du ruban via XML

    Nouvelle version de MZ-Tools :


    Au mois de Mai, j'avais rédigé un article détaillé pour vous présenter l'intérêt à utiliser ce logiciel. Une nouvelle version (8.0) est disponible pour les développeurs Visual Basic, VBA, Visual C# et VB.NET. MZ-Tools 8.0 for VBA, est compatible avec la nouvelle mouture d'Office (2016) et avec les versions 64bits d'office ce qui n'était pas le cas jusqu'à présent, de plus il est possible de l'installer en l'absence de droit d'administration. Télécharger cette nouvelle version sur le site de MZ-Tools.





    Merci de votre attention


    top