Problème de concaténation dans une boucle en vb

Signaler
Messages postés
4
Date d'inscription
jeudi 21 avril 2011
Statut
Membre
Dernière intervention
21 avril 2011
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Bonjour tout le monde,

Dans le cadre d'un stage, je dois construire un questionnaire sous Excel à diffuser ensuite au personnel de l'entreprise concernant leur avis sur un site Intranet qui doit être refait.

A la fin de mon questionnaire, j'ai crée 3 boutons: "enregistrer les réponses", "effacer les réponses" et "quitter le questionnaire". Mon problème concerne le bouton "effacer les réponses". Je souhaite, grâce à ce bouton, décocher les cases à cocher (CheckBox) et les cases d'option (OptionButton), et effacer le contenu des zones de texte (TextBox) afin de rendre le questionnaire "vide".
Le programme que j'ai conçu est donc le suivant (le questionnaire étant contenu dans la feuille "questionnaire", elle-même contenue dans le classeur "enquete_site_RH.xls"):


Sub Effacer()

' effacement des 13 zones de texte
Workbooks("enquete_site_RH.xls").Sheets("questionnaire").ZT1.Value = ""
Workbooks("enquete_site_RH.xls").Sheets("questionnaire").ZT2.Value = ""
...
Workbooks("enquete_site_RH.xls").Sheets("questionnaire").ZT13.Value = ""

' effacement des 72 cases à cocher
Workbooks("enquete_site_RH.xls").Sheets("questionnaire").CC1.Value = False
Workbooks("enquete_site_RH.xls").Sheets("questionnaire").CC2.Value = False
...
Workbooks("enquete_site_RH.xls").Sheets("questionnaire").CC72.Value = False

' effacement des 9 cases d'option
Workbooks("enquete_site_RH.xls").Sheets("questionnaire").CO1.Value = False
Workbooks("enquete_site_RH.xls").Sheets("questionnaire").CO2.Value = False
...
Workbooks("enquete_site_RH.xls").Sheets("questionnaire").CO9.Value = False

rep = MsgBox("Vos réponses ont bien été effacées")
End Sub

Ce programme fonctionne parfaitement mais, pour le simplifier et le raccourcir, je souhaiterais intégrer 3 boucles pour respectivement les cases à cocher, les cases d'option et les zones de texte à décocher/effacer.

J'ai ainsi crée le programme suivant, qui ne marche pas pour une erreur que je n'ai pas réussi à déterminer:

Sub effacer()

' effacement des 13 zones de texte
Dim i as integer
For i=1 to 13
Workbooks("enquete_site_RH.xls").Sheets("questionnaire").ZT & i & .Value = ""
Next i

' effacement des 72 cases à cocher
Dim j as integer
For j=1 to 72
Workbooks("enquete_site_RH.xls").Sheets("questionnaire").CC & j & .Value = False
Next j

' effacement des 9 cases d'option
Dim k as integer
For k=1 to 9
Workbooks("enquete_site_RH.xls").Sheets("questionnaire").CO & k & .Value = False
Next k

rep = MsgBox("Vos réponses ont bien été effacées")
End Sub


Avez-vous des solutions pour corriger ce programme dont l'erreur est peut-être due, d'après moi, à un problème de concaténation ?

Merci d'avance,

Cordialement,

barbou33140

8 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
Salut

Si tu utilises les raccourcis genre .ZT1.Value, tu ne peux pas paramétrer la ligne.
En mettant la syntaxe complète, ça devrait fonctionner :
.Range("ZT" & CStr(i)).Value

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
4
Date d'inscription
jeudi 21 avril 2011
Statut
Membre
Dernière intervention
21 avril 2011

Salut jack,

Merci beaucoup pour ta réponse très rapide.

J'ai essayé dans mon programme ce que tu me proposes:

Workbooks("enquete_site_RH.xls").Sheets("questionnaire").Range("ZT" & CStr(i)).Value = ""


Cependant, en l'éxécutant, un message d'erreur s'affiche: erreur d'éxécution '1004' : erreur définie par l'application ou par l'objet.

Saurais-tu d'où peut venir cette erreur ?

Barbou33140
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
Erreur sur la ligne que tu nous montres ?
Chez moi, elle marche très bien.

PS : Puisque tu mets 3 boucles à la suite, tu peux très bien n'utiliser qu'une seule variable, i
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
Oups

ZT : Tu es sûr d'avoir autant de colonnes ?
Chez moi, en version 2003, les feuilles s'arrêtent à IV (ce qui devrait faire 255 ou 256 colonnes = limites classiques)
Messages postés
4
Date d'inscription
jeudi 21 avril 2011
Statut
Membre
Dernière intervention
21 avril 2011

Oui, le problème vient bien de la ligne que j'ai indiquée dans mon précédent message.

J'utilise Microsoft Excel 2002 mais je ne comprend ce que vient faire cette histoire de nombre de colonnes dans l'histoire.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
Bah sous Excel 2003, le nombre de colonnes maximum est de 255.
Je serais donc fort étonné que la version antérieure offre plus d'espace.

Est-ce que ZT1 représente bien la cellule de la colonne ZT, ligne 1 ?
Si non, dis nous ce que c'est.
Messages postés
4
Date d'inscription
jeudi 21 avril 2011
Statut
Membre
Dernière intervention
21 avril 2011

Ah non, ce que j'appelle ZT, ce sont des zones de texte (TextBox) que j'insère afin que la personne qui répond au questionnaire écrive sa réponse à une question ouverte tel que "Que souhaiteriez voir en plus sur le site?".
(Barre d'outils -> Boite à outils Contrôles -> Zone de texte pour en insérer une)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
Oui, je viens de comprendre et de faire la recherche dans l'aide de VBA.
Les objets genre TextBox, CheckBox (*) sont listables
(*) Attention, pas les objets OCX de même nom de la collection Forms2 (formulaire)
Exemple d'énumération des objets contenus dans une feuille :
    Dim oSheet As Worksheet
    Dim oShapes As Shapes
    Dim oShape As Shape

    Set oSheet = Sheets("Feuil1")
    Set oShapes = oSheet.Shapes
    For Each oShape In oShapes
        Debug.Print oShape.Name
    Next

Tu n'as plus qu'à t'en inspirer