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 :

Checkbox Bug changement de nom


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut Checkbox Bug changement de nom
    Bonsoir,
    Je créer sur une Feuille excel, des checkbox de manière dynamique.

    Les ajout de ligne et donc de checkbox sont fait par un Userform.
    Je voudrais pouvoir supprimer une ligne par userform.

    J'ai fait une macro qui fonctionne mais de manière aléatoire... Lorsqu'on supprime une ligne, un code s'occupe de renommer les checkbox qui sont placés en dessous de la ligne supprimée.

    Parfois, j'ai quelques checkbox qui ne sont pas renommés, vous avez une idées?

  2. #2
    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 : 52
    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,

    Parfois, j'ai quelques checkbox qui ne sont pas renommés, vous avez une idées?
    Bah non

    Sans code, pas de réponse

  3. #3
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    C'est le code classique en fait...
    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 test(LineHaut as integer, NomCheck As String)
    Dim Objet2 As OLEObject
            Set Objet2 = ActiveSheet.OLEObjects.Add("Forms.CheckBox.1")
            With Objet2
                .Top = Cells(LineHaut, 1).Top + 0.75
                .Left = Cells(LineHaut, 1).Left + 2
                .Name = NomCheck
                .Width = 298
                .Height = HteurCheck '- 3
                .PrintObject = False
                .Object.Caption = Cells(LineHaut, 1)
                .Object.Font.Bold = True
                .Object.Font.Size = 12
                .Object.BackStyle = 0
                .Object.Value = "False"
            End With
    End Sub
    ...Sauf que ce code Lancé 20 fois de suite ne marche pas à chaque fois... Parfois en propriété Name j'ai "Checkbox1" au lieu d'avoir le nom...

  4. #4
    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 : 52
    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
    je viens d'essayer ton code avec une modif sur la hauteur de l'objet
    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
    Sub test(LineHaut As Integer, NomCheck As String)
    Dim Objet2 As OLEObject
            Set Objet2 = ActiveSheet.OLEObjects.Add("Forms.CheckBox.1")
            With Objet2
                .Top = Cells(LineHaut, 1).Top + 0.75
                .Left = Cells(LineHaut, 1).Left + 2
                .Name = NomCheck
                .Width = 298
                .Height = 20
                .PrintObject = False
                .Object.Caption = NomCheck 'Cells(LineHaut, 1)
                .Object.Font.Bold = True
                .Object.Font.Size = 12
                .Object.BackStyle = 0
                .Object.Value = "False"
            End With
    End Sub
    lancé avec cette boucle, et pas de problème, le nom est ok sur 50 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim i As Integer
     
    For i = 1 To 50
        test i, "chk" & i
    Next

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonsoir,

    Je ne pense pas que le problème soit dans l'insertion de bouton seul.

    Lorsqu'on supprime une ligne, un code s'occupe de renommer les checkbox qui sont placés en dessous de la ligne supprimée.
    Je pense que le problème est lié à la suppression, puis à la réutilisation du nom.

    Est-ce que tu peux vérifier que le nouveau nom que tu veux donner en ligne 8, de Sub test() est bien disponible ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    En vérité, mon code est beaucoup plus complexe qu'une simple boucle...

    Mais je suis sur des noms que j'envois à la procedure.
    Je test les valeurs avec debug.Print, je contrôle tout ce que j'envois et après la macro, je controle les noms des checkbox et il y en a qui ne portent pas le bon nom...

    J'ai peut être une solution alternative... Très tordue, mais est-il possible d'executer une macro que l'on vient juste de créer dynamiquement? par exemple (purement à titre d'exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
    CreationMacro("NomMacro")
    Call NomMacro
    End Sub
    Merci !

    Citation Envoyé par BlueMonkey Voir le message
    Je pense que le problème est lié à la suppression, puis à la réutilisation du nom.

    Est-ce que tu peux vérifier que le nouveau nom que tu veux donner en ligne 8, de Sub test() est bien disponible ?
    Oui il est forcement disponible, puisqu'en cas de doublons, je renomme un checkbox en NOM_OLD...

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Oui il est forcement disponible, puisqu'en cas de doublons, je renomme un checkbox en NOM_OLD
    Le symptôme d'avoir un checkbox avec le nom par défaut (CheckBox1) semble indiqué qu'un changement de nom n'a pas fonctionné.
    Une des causes probables est que le nom existe déjà.
    Utiliser un autre nom unique NOM_OLD (indépendamment du fait que ça ne figure pas dans le code exemple) ne permet pas d'exclure
    que ce second nom également existe déjà.

    Plutôt que de renommer les boutons, ou de créer du code dynamiquement, pourquoi ne pas utiliser tout simplement un tableau de CheckBox
    avec pour indice le numéro de ligne ?

  8. #8
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Quand tu parles de tableau, tu penses à une variable tableau?
    Sinon, mes check porte déjà l'indice de la ligne... exemple : "Line3" ou "Line12"

    Je ne sais plus comment faire...
    Pour le tableau de checkBox, merci de me dire si tu penses à une variable tableau. Si oui comment la déclarer? (Dim Tableau() As...)
    Sachant que le nombre de ligne est totalement dynamique...

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    comment la déclarer
    Pour stocker les Checkbox créés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Dim CheckBoxs(10) As Object
        Set CheckBoxs(<index>) =    ActiveSheet.OLEObjects.Add("Forms.CheckBox.1")
    Pour savoir s'il est coché ou non :
    CheckBoxs(<index>).Value True/False

    Pour redimensionner dynamiquement le tableau sans perte de contenu
    ReDim Preserve CheckBoxs(<nouvelle taille>)

  10. #10
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Bien vu pour le redim PRESERVE j'etais sur qu'il fallait perdre toutes les données lors du redimensionnement.

    Par contre, pour remplir mon tableau je suis obligé de le remplir de 0 a 9 ( si je reprend ton exemple...) ou bien je peux plager 9 valeur avec n'importe quel indice???
    Car ma feuille sur laquelle sont crées les checkboxs, peux contenir des lignes vides...

    Merci!

  11. #11
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    pour remplir mon tableau je suis obligé de le remplir de 0 a 9 ( si je reprend ton exemple...) ou bien je peux plager 9 valeur avec n'importe quel indice???
    Comme n'importe quel tableau, les indices vont de 0 à UBound(tableau).
    voir FAQ sur les tableaux

    Car ma feuille sur laquelle sont crées les checkboxs, peux contenir des lignes vides...
    Rien ne t'oblige à affecter un CheckBox à chaque indice de ton tableau.

Discussions similaires

  1. Changement du nom d'une base de donnée
    Par SILO dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/12/2004, 15h20
  2. Changement de nom de la rubrique UML ? Modélisation ?
    Par Marc Lussac dans le forum Evolutions du club
    Réponses: 12
    Dernier message: 14/11/2004, 20h54
  3. [install] changement de nom
    Par ALCINA dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/06/2004, 12h21
  4. changement de nom de fichier avec smartupload
    Par bourvil dans le forum ASP
    Réponses: 2
    Dernier message: 24/05/2004, 14h50
  5. Changement de nom de PC [DEBIAN]
    Par [_Key_Zee__] dans le forum Réseau
    Réponses: 8
    Dernier message: 22/04/2004, 13h09

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