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 :

Coordonnées d'une checkbox [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut Coordonnées d'une checkbox
    Bonjour à tous,

    J'ai un fichier excel avec des checkbox placé dans les cellules d'un tableau. L'utilisateur les coche selon ses besoins.
    J'aimerais que via, une macro, excel puisse me renvoyer la valeur des cellules de la première colonne des lignes, où les checkboxs ont été cochées.

    Le problème, c'est que le fichier en question a été créé n'importe comment et le nom des checkboxs n'ont aucune logique. De plus, il serait préférable de ne pas trop le modifier.

    La question est donc :

    Est-il possible, à partir des coordonnées d'une cellule, de selectionner une checkbox ?

    Je pense que ce que c'est impossible, mais sait-on jamais. Si quelqu'un à une idée.

  2. #2
    Membre éprouvé
    Inscrit en
    Mai 2011
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 85
    Par défaut
    Je ne pense pas non plus que ce soit possible. Je pense que la solution la plus simple est de modifier les noms de tes checkbox. Je suppose que si t'as pas trop envie d'y toucher c'est parce qu'il y a des références à ces checkbox dans le code, mais bon la fonction remplacer devrait rendre le tout pas trop pénible.

  3. #3
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Voici un exmeple de fonction
    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
    Function Cherche_Checkbox(strAddress As String) As String
    Dim obj As OLEObject
    Dim strRetour As String
     
    For Each obj In Me.OLEObjects
     
        If TypeOf obj.Object Is MSForms.CheckBox Then
            If obj.TopLeftCell.Address(False, False) = strAddress Then
                strRetour = obj.Name
            End If
        End If
     
    Next
     
    Cherche_Checkbox = strRetour
     
    End Function
    Que l'on utilise comme cela. Retourne le nom de checkbox qui se trouve en A16
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Cherche_Checkbox("A16")
    Et pour cocher ou décocher la checkbox d'une cellule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Coche_decoche(strAddress As String)
    Dim obj As OLEObject
     
    For Each obj In Me.OLEObjects
     
        If TypeOf obj.Object Is MSForms.CheckBox Then
            If obj.TopLeftCell.Address(False, False) = strAddress Then
                obj.Object.Value = Not obj.Object.Value
            End If
        End If
     
    Next
     
    End Sub

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut
    Woaw ! Je suis impressionné, on peut vraiment tout faire avec excel !

    Par contre, il y a un problème que je ne sais pas corriger tout seul car j'avoue que cette fonction dépasse mes compétences :

    Quand je la lance, il me met "utilisation incorrect du mot clé : Me". (ligne 5)

    J'ai donc changé Me par workbooks("nom du classeur").
    Cette fois ci le problème est ligne 6. : "Type défini par l'utilisateur non défini".

    J'ai essayé de m'inspirer de ça (http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx) pour corriger mais je n'y arrive pas...

  5. #5
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each obj In Me.OLEObjects
    Ici Me est un raccourci pour nommer la feuille quand le code se trouve sur la feuille contenant les objets
    Si ton code se trouve dans un module, il faut stipuler le nom de la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each obj In Sheets("Feuil1").OLEObjects

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut
    Merci pour ton message.
    Effectivement j'avais mis le code dans un module. J'ai donc changé me par le workbooks("workbook").sheets("feuille") mais j'ai toujours un problème ligne 6.

    "Type défini par l'utilisateur non défini".

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    une p'tite incusrion pour juste signaler la non existence de TypeOf en VBA 2003 ! (à vérifier aussi dans les versions postérieures)

    Voir peut-être du côté de la fonction TypeName

    _______________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  8. #8
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    une p'tite incusrion pour juste signaler la non existence de TypeOf en VBA 2003 ! (à vérifier aussi dans les versions postérieures)
    Je ne suis pas d'accord,TypeOf fonctionne aussi sur Excel 2003

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut
    Arf effectivement en recherchant la fonction avec control espace je n'ai qu'une fonction typename mais pas de typeof...

    Du coup ça ne va pas être possible ?

  10. #10
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    la formule DATEDIF n'est pas documenté et n’apparaît pas dans la liste des formules, et pourtant elle existe et fonctionne très bien

    As tu essayé le code?

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut
    Oui et j'ai une erreur à la sixième ligne :

    "Type défini par l'utilisateur non défini".

  12. #12
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Même message lors de la compilation !

    Et comme je n'ai pas trouvé TypeOf ni dans l'aide interne, ni en ligne, ni dans le MSDN Excel VBA 2003 …

    Y-a-t-il une référence à activer ? Ou bien une histoire de parenthèses manquantes ?

  13. #13
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Ci joint un fichier qui fonctionne sur mon poste en excel 2003.

    Fonctionne-t-il sur le tien ?

    VBA - TypeOf -Coche et décoche.xls

  14. #14
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Donc autant pour moi pour le TyPeOf même s'il n'est vraiment pas documenté …

    En fait mathspountz, il faut dans le menu Outils, Références cocher Microsoft Forms 2.0 Object Library
    pour ne plus avoir cette erreur de compilation provoquée par MSForms


    NB : selon où je me trouve, je ne peux télécharger pour des raisons de sécurité …

  15. #15
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut
    Arf je ne trouve que microsoft activeX data objects 2.0 library.

    Je suppose que ce n'est pas le même ? (j'ai essayé sans succès).

    J'ai rien dans microsoft + f dans la liste...

  16. #16
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut
    J'ai pourtant essayé ton fichier jfontaine, qui fonctionne. Ca coche et décoche les cases...

    Mais tes checkboxs sont peut-être un peu différentes des miennes. Je t'ai copier coller trois checkbox qui viennent de mon fichier.
    Fichiers attachés Fichiers attachés

  17. #17
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Dans ton cas, ce ne sont pas des Checkbox (VBA) mais des Cases à Cocher (Formulaire).
    Ce n'est pas du tout le même code.

  18. #18
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut
    Mince désolé je ne savais pas qu'il y avait une différence entre les deux...

    Pourtant avec l'enregistreur de macro j'avais essayé d'en copier coller une pour voir ce que c'était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        ActiveSheet.Shapes("Check Box 166").Select
        Selection.Copy
        Range("X30:AE30").Select
        ActiveSheet.CheckBoxes.Add(234.75, 389.25, 25.5, 17.25).Select
        ActiveSheet.Paste
    Heu... Du coup, ça ressemblerait quand même au premier code ou faut tout revoir ?

  19. #19
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Peut être comme cela, mais il me manque le code pour cocher
    De plus le type 8 est pour tous les objets formulaire alors ca marchera que s'il y que des cases à cocher
    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
    Sub Coche_decoche(strAddress As String)
    Dim obj As Shape
     
    For Each obj In Me.Shapes
        If obj.Type = 8 Then
            If obj.TopLeftCell.Address(False, False) = strAddress Then
                'Code pour cocher
                obj.Select
                If Selection.Value = xlOn Then
                    Selection.Value = xlOff
                Else
                    Selection.Value = xlOn
                End If
            End If
        End If
    Next
     
    End Sub
    EDIT : Ajout du code pour cocher

  20. #20
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut
    Merci mille fois ça fonctionne !!!

    Ca c'est fort bravo !

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

Discussions similaires

  1. Readonly sur une checkbox
    Par Oluha dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 14/02/2005, 11h09
  2. [FLASH MX] Police d'une Checkbox
    Par n_tony dans le forum Flash
    Réponses: 5
    Dernier message: 08/12/2004, 12h04
  3. Etat coché ou décoché d'une checkbox
    Par El Saigneur dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/10/2004, 16h56
  4. [XML][XSL]afficher une checkbox cochée
    Par kirk80 dans le forum XMLRAD
    Réponses: 2
    Dernier message: 16/09/2004, 17h49
  5. [struts] mémorisation d'une checkbox avec cookie
    Par rocco dans le forum Struts 1
    Réponses: 3
    Dernier message: 22/04/2004, 12h39

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