Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo

precedent    sommaire    suivant   


Comment insérer un contrôle dans la feuille et lui attacher une macro ?
auteur : SilkyRoad
Les contrôles sont disponibles dans la barre d'outils "Boîte à outils contrôles" (ou onglet Développeur/groupe "Contrôles/Insérer/"Contrôles ActiveX", pour Excel2007).
Après avoir ajouté l'objet dans la feuille de calcul, vérifiez que vous êtes bien en mode création.




Faites un clic droit sur le contrôle que vous venez d'insérer dans la feuille et sélectionnez l'option "Visualiser le code" dans le menu contextuel (ou double cliquez sur le contrôle).
Vous atteignez ainsi le module de la feuille qui contient votre objet.




Le menu déroulant de droite, en haut de la fenêtre de code, liste les évènements utilisables par cet objet.




Les contrôles de la feuille de calcul fonctionnent (pratiquement) de la même manière que ceux utilisés dans les UserForm.
Il faut simplement faire précéder l'objet par le nom de la feuille:

Vba

Option Explicit

'Cet exemple suppose que la feuille nommée "Feuil1" contient:
    'Un CommandButton (CommandButton1)
    'Un TextBox (TextBox1)

Private Sub CommandButton1_Click()
    'Insère la valeur 10 dans le TextBox lorsque vous cliquez
    'sur le bouton.
    Worksheets("Feuil1").TextBox1.Value = 10
End Sub

Comment ajouter un Label transparent dans la feuille ?
auteur : SilkyRoad
Vba

Dim Obj As OLEObject

Set Obj = Feuil1.OLEObjects.Add("Forms.Label.1")

With Obj
    .Top = 140
    .Left = 360
    .Name = "NomLabel"
    .Width = 60
    .Height = 40
    .Object.Caption = "DVP"
    .Object.BackStyle = 0
    .ShapeRange.Fill.Transparency = 1#
End With

Comment boucler sur les cases à cocher ?
auteur : SilkyRoad
Cette première version boucle sur tous les contrôles de la feuille active et vérifie s'il s'agit d'une case à cocher.

Vba

Sub BoucleCheckBox_V01()
    Dim Obj As OLEObject
    
    For Each Obj In ActiveSheet.OLEObjects
        If TypeOf Obj.Object Is MSForms.CheckBox Then _
            MsgBox Obj.Name & ": " & Obj.Object.Value
    Next Obj
End Sub



Vous pouvez aussi utiliser cette deuxième procédure si vous connaissez le nom des CheckBox:
(CheckBox1 à CheckBox3 dans cet exemple)

Vba

Sub BoucleCheckBox_V02()
    Dim i As Byte
    
    For i = 1 To 3
        MsgBox ActiveSheet.OLEObjects("CheckBox" & i).Name & ": " & _
            ActiveSheet.OLEObjects("CheckBox" & i).Object.Value
    Next i
End Sub



Vous pouvez bien entendu adapter les procédures pour boucler sur les autres types de contrôles.



Comment ajouter un bouton dynamiquement et y associer une macro ?
auteur : SilkyRoad
La procédure crée une nouvelle feuille, ajoute une CommandButton et une macro qui permettra de supprimer le contenu des cellules.

Vba

Sub AjoutCommandButton_Feuille()
    Dim Ws As Worksheet
    Dim Obj As OLEObject
    Dim laMacro As String
    Dim x As Integer
    
    'Ajout feuille
    Set Ws = Sheets.Add
        
    'Ajout CommandButton dans la feuille
    Set Obj = Ws.OLEObjects.Add("Forms.CommandButton.1")
    With Obj
        .Left = 50 'position horizontale
        .Top = 50 'position verticale
        .Width = 140 'largeur
        .Height = 30 'hauteur
        .Object.BackColor = RGB(235, 235, 200) 'Couleur de fond
        .Object.Caption = "Supprimer données feuille"
    End With
    
    'Paramètres pour la création de la macro:
    '(suppression contenu cellules)
    laMacro = "Sub CommandButton1_Click()" & vbCrLf
    laMacro = laMacro & "Cells.Clear" & vbCrLf
    laMacro = laMacro & "End Sub"
    
    With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
        x = .CountOfLines + 1
        .InsertLines x, laMacro
    End With
End Sub

Comment remplir une ComboBox sans doublon ?
auteur : SilkyRoad
La procédure boucle sur les cellules de la plage A1:A20 et alimente la ComboBox de la Feuil1, sans doublon.

Vba

Dim Cell As Range

'Supprime les données existantes dans le ComboBox
Feuil1.ComboBox1.Clear

'Boucle sur les cellules de la plage A1:A20 pour
'alimenter le ComboBox
For Each Cell In Feuil1.Range("A1:A20")
    Feuil1.ComboBox1 = Cell
    'remplissage sans doublon
    If Feuil1.ComboBox1.ListIndex = -1 Then _
        Feuil1.ComboBox1.AddItem Cell
Next Cell

Comment trier le contenu d'un ComboBox par ordre alphabétique ?
auteur : SilkyRoad
Vba

Sub TriAlpha_ComboBox()
    Dim i As Integer, j As Integer
    Dim strTemp As String
    
    'Supprime le contenu du ComboBox
    Feuil1.ComboBox1.Clear
    'Alimente le ComboBox
    Feuil1.ComboBox1.List() = Array("mimi", "nono", "bibi", "fifi", "lolo")
    
    
    'Tri le contenu du ComboBox par ordre alphabétique
    With Feuil1.ComboBox1
        For i = 0 To .ListCount - 1
            For j = 0 To .ListCount - 1
                If .List(i) < .List(j) Then
                    strTemp = .List(i)
                    .List(i) = .List(j)
                    .List(j) = strTemp
                End If
            Next j
        Next i
    End With
End Sub

Comment lancer la macro d'un CommandButton depuis une autre macro ?
auteur : SilkyRoad
La procédure déclenche le code (évènement Click) d'un CommandButton, placé dans la Feuil1.

Vba

Application.Run ("Feuil1.CommandButton1_Click")

Comment insérer un fichier Word dans la feuille de calcul ?
auteur : SilkyRoad
La macro cherche un document Word sur le PC, puis l'insère à l'emplacement de la cellule B10 dans la feuille active.

Vba

Sub InsertionDocument_Feuille()
    Dim OleObj As OLEObject
    Dim Fichier As Variant
    Dim PosHori As Double, PosVerti As Double, Largeur As Double, Hauteur As Double
    
    Fichier = Application.GetOpenFilename("Documents Word (*.doc), *.doc")
    
    If Fichier <> False Then
        PosHori = Range("B10").Left
        PosVerti = Range("B10").Top
        Largeur = Range("B10").Width
        Hauteur = Range("B10").Height
        
        Set OleObj = ActiveSheet.OLEObjects.Add(Filename:=Fichier, _
            Link:=False, displayAsIcon:=True, iconIndex:=0, iconLabel:=Fichier)
        
        With OleObj
            .Left = PosHori
            .Top = PosVerti
            .Width = Largeur
            .Height = Hauteur
        End With
    End If
End Sub


Indiquez la valeur True pour l'argument Link afin que le document ne soit pas physiquement inséré dans la feuille.
L'icône pointera vers le fichier du disque, sous forme de lien, ce qui limitera la taille de votre classeur.



Comment vérifier si le document Word, inséré dans la feuille, est vide ?
auteur : SilkyRoad
Vba

Sub Verifier_Si_DocumentWord_Vide() 
    Dim WordApp As Object 
    Dim WordObj As Shape 
    
    'Dans cet exemple l'objet Word et le 1er objet dans la Feuille 1 
    Set WordObj = Worksheets(1).Shapes(1) 
    WordObj.OLEFormat.Activate 
    Set WordApp = WordObj.OLEFormat.Object.Object.Application 
    WordApp.Visible = False 
    
    If WordApp.Selection.Document.Words.Count = 1 Then 
        'Renvoie 1 si vide 
        MsgBox "Vide" 
        Else 
        MsgBox "Non vide" & vbCrLf & vbCrLf & _ 
            WordApp.Selection.Document.Content 
    End If 
    
    Range("A1").Select 
End Sub

Comment lancer en mode plein écran une présentation ppt contenue dans une feuille de calcul ?
auteur : SilkyRoad
Vba

Sub LancePresentation_Feuille() 
    Dim appPPT As Object 
    Dim Obj As Shape 
    
    'Représente le premier objet dans la Feuil11 
    Set Obj = Worksheets("Feuil1").Shapes(1) 
    Obj.OLEFormat.Activate 
    
    Set appPPT = Obj.OLEFormat.Object.Object.Application 
    appPPT.ActivePresentation.SlideShowSettings.Run 
End Sub

Comment insérer un son Wave dans une feuille de calcul ?
auteur : SilkyRoad
Utilisez le menu Insertion/Objet/Onglet "Nouvel objet".
Sélectionnez "Son wave" dans la liste des types d'objets.
Cliquez sur le bouton OK pour valider.

Effectuez un clic droit sur le nouvel objet inséré.
Sélectionnez l'option "Objet Document Magnétophone".
Puis Ouvrir.
Dans la fenêtre qui s'affiche, utilisez le menu Edition/Insérer un fichier.
Choisissez le fichier wave à insérer dans la feuille.
(Attention à la taille du fichier qui risque d'alourdir votre classeur)
Refermez les boîtes de dialogue.


Un exemple de macro pour déclencher l'objet inséré dans la feuille de calcul.

Vba

Sub DeclencheSonWave () 
Worksheets("Feuil1").OLEObjects("objet 1").Verb 
End Sub

Comment identifier le contrôle utilisé dans la feuille de calcul ?
auteur : SilkyRoad
Lorsque vous avez plusieurs contrôles de même type dans une feuille, et qui effectuent la même opération, il est possible d'écrire une seule procédure qui va gérer toutes les actions.
Les modules de classes permettent de gérer les groupes de contrôles et d'identifier les évènements qui sont appliqués sur ces objets.

Cet exemple gère les CheckBox placées dans la feuille de calcul "Feuil1".
Une action est déclenchée dès que l'utilisateur clique sur une des cases à cocher.

Vba

'--------------------------------------
'à placer dans le module objet ThisWorbook pour que la classe
'soit initialisée lors de l'ouverture du classeur.

Option Explicit

Private Sub Workbook_Open()
Dim Obj As OLEObject
Dim Cl As Classe1

Set Collect = New Collection

'boucle sur les objets de la Feuil1
For Each Obj In Feuil1.OLEObjects
    'verifie s'il s'agit d'un Checkbox
    If TypeOf Obj.Object Is MSForms.CheckBox Then
        
        Set Cl = New Classe1
        Set Cl.CheckBoxGroup = Obj.Object
        Collect.Add Cl
    End If
Next Obj

End Sub
'--------------------------------------
Vba

'--------------------------------------
'dans un module standard
Option Explicit

Public Collect As Collection
'--------------------------------------
Vba

'--------------------------------------
'Dans un module de classe nommé "Classe1"
'
Option Explicit

Public WithEvents CheckBoxGroup As MSForms.CheckBox


'Evenement Click sur les CheckBox de la feuille de calcul.
Private Sub CheckBoxGroup_Click()
    
    'Renvoie le nom et la valeur de la CheckBox cliquée
    MsgBox CheckBoxGroup.Name & ": " & CheckBoxGroup.Value
    
    'Exemple qui renvoie dans la colonne A, la valeur de CheckBox
    Cells(CheckBoxGroup.TopLeftCell.Row, 1) = CheckBoxGroup.Value
End Sub

'--------------------------------------

Comment gérer les tabulations pour passer d'un TextBox à l'autre, sur la feuille de calcul ?
auteur : SilkyRoad
Vous pouvez intégrer un module de classe qui va prendre en charge le transfert du curseur vers la TextBox suivante, lors de l'utilisation des tabulations:

Vba

'--------------------------------------
'à placer dans le module objet ThisWorbook pour que la classe
'soit initialisée lors de l'ouverture du classeur.
 
Option Explicit
 
Private Sub Workbook_Open()
Dim Obj As OLEObject
Dim Cl As Classe1
 
Set Collect = New Collection
 
'boucle sur les objets de la Feuil1
For Each Obj In Feuil1.OLEObjects
    'verifie s'il s'agit d'un Textbox
    If TypeOf Obj.Object Is MSForms.TextBox Then
        
        Set Cl = New Classe1
        Set Cl.TexteGroup = Obj.Object
        Collect.Add Cl
    End If
Next Obj
 
End Sub
'--------------------------------------
Vba

'--------------------------------------
'dans un module standard
Option Explicit
 
Public Collect As Collection
'--------------------------------------
Vba

'dans un module de classe nommé "Classe1"
'
Option Explicit
 
Public WithEvents TexteGroup As MSForms.TextBox
 
 
Private Sub TexteGroup_KeyUp(ByVal KeyCode As _
        MSForms.ReturnInteger, ByVal Shift As Integer)
 
    Dim Valeur As Byte
    
    Valeur = TexteGroup.Index
    
    If KeyCode = 9 Then
        If Valeur <> Collect.Count Then
            With Collect(Valeur + 1).TexteGroup
                .Activate
            End With
        
        Else
            With Collect(1).TexteGroup
                .Activate
            End With
        End If
    End If
End Sub
 
'--------------------------------------

precedent    sommaire    suivant   

Consultez les autres F.A.Q's


Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2008  Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com