[VBA Word] : case à cocher
Résolu/Fermé
speedy31
Messages postés
6
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
20 septembre 2007
-
20 sept. 2007 à 09:21
speedy31 - 21 sept. 2007 à 09:17
speedy31 - 21 sept. 2007 à 09:17
A voir également:
- [VBA Word] : case à cocher
- Espace insécable word - Guide
- Supprimer une page word - Guide
- Organigramme word - Guide
- Suivi des modifications word - Guide
- Tableau word - Guide
6 réponses
ShaBoo
Messages postés
392
Date d'inscription
mercredi 12 septembre 2007
Statut
Membre
Dernière intervention
5 septembre 2009
50
20 sept. 2007 à 11:18
20 sept. 2007 à 11:18
Bonjour,
1) Est-ce que tes cases à cocher ont été insérées via "Boite à outils contrôles" ou via boites à outils "Formulaires" ?
2) Dans le cas ou tes caches à cocher ont été insérées via "Boite à outils contrôles", as tu mis la propiété "TripleState" à True ?
3) Es tu sur que que ce sont des cases à cocher et non pas des radio-boutons ?
@+
1) Est-ce que tes cases à cocher ont été insérées via "Boite à outils contrôles" ou via boites à outils "Formulaires" ?
2) Dans le cas ou tes caches à cocher ont été insérées via "Boite à outils contrôles", as tu mis la propiété "TripleState" à True ?
3) Es tu sur que que ce sont des cases à cocher et non pas des radio-boutons ?
@+
speedy31
Messages postés
6
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
20 septembre 2007
3
20 sept. 2007 à 17:08
20 sept. 2007 à 17:08
J'ai le message d'erreur suivant en exécutant ta procédure :
Variable objet ou variable bloc With non définie (erreur 91)
Merci en tout cas pour ton aide, je sens qu'on va y arriver !
Variable objet ou variable bloc With non définie (erreur 91)
Merci en tout cas pour ton aide, je sens qu'on va y arriver !
ShaBoo
Messages postés
392
Date d'inscription
mercredi 12 septembre 2007
Statut
Membre
Dernière intervention
5 septembre 2009
50
20 sept. 2007 à 17:16
20 sept. 2007 à 17:16
Tu executes la procédure de quelle manière ?
speedy31
Messages postés
6
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
20 septembre 2007
3
20 sept. 2007 à 17:14
20 sept. 2007 à 17:14
J'avais essayer ceci en vain :
Private Sub UpdateCompteurs(Obj As CheckBox)
If TypeOf Obj Is CheckBox Then
Select Case objName.Value
Case True: objName.Caption = "OK"
compteurOK = compteurOK + 1
Case False: objName.Caption = "KO"
compteurKO = compteurKO + 1
Case Else: objName.Caption = "NOT TESTED"
compteurNT = compteurNT + 1
End Select
End If
TextBox1.Value = compteurOK
End Sub
Private Sub CheckBox1_Change()
UpdateCompteurs (ActiveDocument.FormFields("CheckBox1").CheckBox)
End Sub
Mais l'appel de ma fonction UpdateCompteurs retourne systématiquement "Incompatibilité de type". Je ne parviens pas à passer ma fameuse CheckBox dont la propriété Name est pourtant bien "CheckBox1" à ma fonction UpdateCompteurs...
Peut-être que je m'y prends carrément mal ?
En tout cas ta méthode semble 100 fois mieux, car avec la mienne, je devrais appeller ma méthode dans le code de chaque checkbox, avec ta méthode, c'est fait en une seule fois...
Private Sub UpdateCompteurs(Obj As CheckBox)
If TypeOf Obj Is CheckBox Then
Select Case objName.Value
Case True: objName.Caption = "OK"
compteurOK = compteurOK + 1
Case False: objName.Caption = "KO"
compteurKO = compteurKO + 1
Case Else: objName.Caption = "NOT TESTED"
compteurNT = compteurNT + 1
End Select
End If
TextBox1.Value = compteurOK
End Sub
Private Sub CheckBox1_Change()
UpdateCompteurs (ActiveDocument.FormFields("CheckBox1").CheckBox)
End Sub
Mais l'appel de ma fonction UpdateCompteurs retourne systématiquement "Incompatibilité de type". Je ne parviens pas à passer ma fameuse CheckBox dont la propriété Name est pourtant bien "CheckBox1" à ma fonction UpdateCompteurs...
Peut-être que je m'y prends carrément mal ?
En tout cas ta méthode semble 100 fois mieux, car avec la mienne, je devrais appeller ma méthode dans le code de chaque checkbox, avec ta méthode, c'est fait en une seule fois...
ShaBoo
Messages postés
392
Date d'inscription
mercredi 12 septembre 2007
Statut
Membre
Dernière intervention
5 septembre 2009
50
20 sept. 2007 à 17:41
20 sept. 2007 à 17:41
En incluant tes variables compteur cela devrait donner ceci :
Tu ne m'as pas dit comment tu executais la procédure ?
Sub TestValueCkb() Dim Ctrl As Variant Dim Controle As InlineShape Dim Check As MSForms.CheckBox Dim cptOK As Integer Dim cptKO As Integer Dim cptNT As Integer Dim Msg As String cptOK = 0 cptKO = 0 cptNT = 0 ActiveDocument.Activate With ActiveDocument For Each Controle In .InlineShapes If StrComp(Left(Controle.OLEFormat.Object.Name, 3), "ckb", vbTextCompare) = 0 Then Set Check = Controle.OLEFormat.Object If IsNull(Check.Value) Then Ctrl = 1 Else Ctrl = Check.Value End If Select Case Ctrl Case True 'TEST OK 'MsgBox Controle.OLEFormat.Object.Name & " True", vbOKOnly, "" cptOK = cptOK + 1 Case False 'TEST PAS OK 'MsgBox Controle.OLEFormat.Object.Name & " False", vbOKOnly, "" cptKO = cptKO + 1 Case 1 'PAS DE TEST 'MsgBox Controle.OLEFormat.Object.Name & " Null", vbOKOnly, "" cptNT = cptNT + 1 End Select End If Next End With Msg = "Nb Test OK = " & cptOK & Chr(10) Msg = Msg & "Nb Test KO = " & cptKO & Chr(10) Msg = Msg & "Nb non testé = " & cptNT MsgBox Msg, vbOKOnly, "Résultat test" Set Controle = Nothing Set Check = Nothing End Sub
Tu ne m'as pas dit comment tu executais la procédure ?
ShaBoo
Messages postés
392
Date d'inscription
mercredi 12 septembre 2007
Statut
Membre
Dernière intervention
5 septembre 2009
50
>
ShaBoo
Messages postés
392
Date d'inscription
mercredi 12 septembre 2007
Statut
Membre
Dernière intervention
5 septembre 2009
20 sept. 2007 à 18:02
20 sept. 2007 à 18:02
Je viens de m'apercevoir de p'tit beug ;p
Si on part sur ces conditions :
pas coché = NON TESTE = False
coché = TEST OK = True
coché grisé = TEST PAS OK = Null.
le code suivant :
est faux
il faux avoir ceci :
de plus le test suivant :
doit etre remplacé par :
Si on part sur ces conditions :
pas coché = NON TESTE = False
coché = TEST OK = True
coché grisé = TEST PAS OK = Null.
le code suivant :
Select Case Ctrl Case True 'TEST OK 'MsgBox Controle.OLEFormat.Object.Name & " True", vbOKOnly, "" cptOK = cptOK + 1 Case False 'TEST PAS OK 'MsgBox Controle.OLEFormat.Object.Name & " False", vbOKOnly, "" cptKO = cptKO + 1 Case 2 'PAS DE TEST 'MsgBox Controle.OLEFormat.Object.Name & " Null", vbOKOnly, "" cptNT = cptNT + 1 End Select
est faux
il faux avoir ceci :
Select Case Ctrl Case True 'TEST OK 'MsgBox Controle.OLEFormat.Object.Name & " True", vbOKOnly, "" cptOK = cptOK + 1 Case False 'PAS DE TEST 'MsgBox Controle.OLEFormat.Object.Name & " False", vbOKOnly, "" cptNT = cptNT + 1 Case 2 'TEST PAS OK 'MsgBox Controle.OLEFormat.Object.Name & " Null", vbOKOnly, "" cptKO = cptKO + 1 End Select
de plus le test suivant :
If IsNull(Check.Value) Then Ctrl = 1 Else Ctrl = Check.Value End If
doit etre remplacé par :
If IsNull(Check.Value) Then Ctrl = 2 Else Ctrl = Check.Value End If
De retour à la maison où je n'ai pas Excel, je testerai cela demain matin.
J'exécute la procédure en pas à pas avec le debuggeur Visual Basic, directement depuis le code que tu m'as donné.
Je teste cela demain matin et te tiens au courant.
Merci, j'appréci ton coup de main !
J'exécute la procédure en pas à pas avec le debuggeur Visual Basic, directement depuis le code que tu m'as donné.
Je teste cela demain matin et te tiens au courant.
Merci, j'appréci ton coup de main !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
speedy31
Messages postés
6
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
20 septembre 2007
3
20 sept. 2007 à 19:23
20 sept. 2007 à 19:23
J'avais oublié que j'avais Word sur le PC de ma femme.
Je viens donc de tester ta fonction : CA MARCHE !!!
Excellent, un grand merci, je vais ainsi pouvoir faire exactement ce que je souhaitais !
Vraiment super !
Je viens donc de tester ta fonction : CA MARCHE !!!
Excellent, un grand merci, je vais ainsi pouvoir faire exactement ce que je souhaitais !
Vraiment super !
ShaBoo
Messages postés
392
Date d'inscription
mercredi 12 septembre 2007
Statut
Membre
Dernière intervention
5 septembre 2009
50
20 sept. 2007 à 19:46
20 sept. 2007 à 19:46
Bonsoir,
Les pb vont commencer lorsque tu vas aborder ce sujet :
dans un document Word, j'ai plusieurs tableau représentant chacun un test.
Chaque test dispose de trois cases à cocher : OK, KO, NON TESTE
Car pour l'instant la procédure comptabilise ttes les checkbox sur un document ...
Les pb vont commencer lorsque tu vas aborder ce sujet :
dans un document Word, j'ai plusieurs tableau représentant chacun un test.
Chaque test dispose de trois cases à cocher : OK, KO, NON TESTE
Car pour l'instant la procédure comptabilise ttes les checkbox sur un document ...
Bonjour,
Ta macro fonctionne à merveille, même dans plusieurs tableaux, je te le confirme !
Par contre, j'ai eu un problème ce matin, en voulant utiliser ta macro dans mon document définitif.
Je place mes CheckBox, copie-colle ta macro, mais rien à faire... j'avais toujours l'erreur :
Variable objet ou variable bloc With non définie (erreur 91)
Pourtant, tout fonctionne parfaitement dans mon essai de document réalisé hier soir.
J'ai cherché un bon bout de temps, et j'ai fini par trouver...un truc de fou...
Dans le template de document que j'utilise (qui est assez complexe, y des sections, des champs, des commentaires,des tableaux, bref, tout un paquet d'objets), il y a en première page le logo de la boite. je me suis aperçu que le fait d'enlever ce logo solutionnait mon problème.
En cherchant encore, j'ai trouvé la manip suivante :
Clic droit sur l'image / Objet Image / Convertir....
Là, je sélectionne "Activer comme...." et dans la liste je choisi "Image Microsoft Word".
Et là, j'enregistre le doc, et c'est gagné...
Voilà, je pense que ta boucle qui parse les objets du documents ne devait pas aimer de tomber sur l'image dans un format qu'elle ne connaissait pas, et cette manip permet de lire correctement l'objet image...enfin c'est ce que je pense.
Donc voilà, super grand merci, maintenant, c'est NICKEL, mon doc est fini, j'ai mes 300 checkbox dans pleins de tableaux, et cela fonctionne à merveille, à la fin, tout est calculé automatique.
MERCI !
Ta macro fonctionne à merveille, même dans plusieurs tableaux, je te le confirme !
Par contre, j'ai eu un problème ce matin, en voulant utiliser ta macro dans mon document définitif.
Je place mes CheckBox, copie-colle ta macro, mais rien à faire... j'avais toujours l'erreur :
Variable objet ou variable bloc With non définie (erreur 91)
Pourtant, tout fonctionne parfaitement dans mon essai de document réalisé hier soir.
J'ai cherché un bon bout de temps, et j'ai fini par trouver...un truc de fou...
Dans le template de document que j'utilise (qui est assez complexe, y des sections, des champs, des commentaires,des tableaux, bref, tout un paquet d'objets), il y a en première page le logo de la boite. je me suis aperçu que le fait d'enlever ce logo solutionnait mon problème.
En cherchant encore, j'ai trouvé la manip suivante :
Clic droit sur l'image / Objet Image / Convertir....
Là, je sélectionne "Activer comme...." et dans la liste je choisi "Image Microsoft Word".
Et là, j'enregistre le doc, et c'est gagné...
Voilà, je pense que ta boucle qui parse les objets du documents ne devait pas aimer de tomber sur l'image dans un format qu'elle ne connaissait pas, et cette manip permet de lire correctement l'objet image...enfin c'est ce que je pense.
Donc voilà, super grand merci, maintenant, c'est NICKEL, mon doc est fini, j'ai mes 300 checkbox dans pleins de tableaux, et cela fonctionne à merveille, à la fin, tout est calculé automatique.
MERCI !
20 sept. 2007 à 14:21
1- les cases à cocher ont été insérées via la boite à outils Formulaires.
2- si la case à cocher
3- il s'agit bien de cases à cocher et non de radio-boutons.
Pour mon document, je peux tout à fait utiliser une case à cocher par test (avec la fameuse option TripleState correspondant à mes état OK, KO et NON TESTE), dans ce cas, il me faudrait savoir comment compatibiliser les cases à OK, KO etc... pour faire le compte rendu des tests à la fin.
20 sept. 2007 à 16:24
Tu définit la propriéte "Name" de chaque CheckBox ainsi : ckb1, ckb2, ckb3, ..., ckb20.
Tu définit la propriéte "TripleState" de chaque CheckBox à True.
A partir de là, chaque CheckBox pour être affecté de 3 valeur :
pas coché = NON TESTE = False
coché = TEST OK = True
coché grisé = TEST PAS OK = Null.
Voici un bout de code que tu pourras adapté à ta guise :