Boucle VBA pour nommer des formes
Salut,
J'ai un fichier dans lequel j'ai des formes qui sont visibles selon la valeur de la chekbox de l'userform.
Le code ci-dessous fonctionne.
Je vous vois sourire
' If Me.TextBox_objet6.Value <> "" Then Me.TextBox_objet6.Visible = True
' If Me.TextBox_objet6.Value <> "" Then Me.CheckBox_objet6.Value = True
' ActiveSheet.Shapes.Range(Array("Group 6")).Visible = CheckBox_objet6.Value
' If Me.TextBox_objet7.Value <> "" Then Me.TextBox_objet7.Visible = True
' If Me.TextBox_objet7.Value <> "" Then Me.CheckBox_objet7.Value = True
' ActiveSheet.Shapes.Range(Array("Group 7")).Visible = CheckBox_objet7.Value
' If Me.TextBox_objet8.Value <> "" Then Me.TextBox_objet8.Visible = True
' If Me.TextBox_objet8.Value <> "" Then Me.CheckBox_objet8.Value = True
' ActiveSheet.Shapes.Range(Array("Group 8")).Visible = CheckBox_objet8.Value
' If Me.TextBox_objet9.Value <> "" Then Me.TextBox_objet9.Visible = True
' If Me.TextBox_objet9.Value <> "" Then Me.CheckBox_objet9.Value = True
' ActiveSheet.Shapes.Range(Array("Group 9")).Visible = CheckBox_objet9.Value
' If Me.TextBox_objet10.Value <> "" Then Me.TextBox_objet10.Visible = True
' If Me.TextBox_objet10.Value <> "" Then Me.CheckBox_objet10.Value = True
' ActiveSheet.Shapes.Range(Array("Group 10")).Visible = CheckBox_objet10.Value
Comme j'ai des formes à ajouter je me suis lancé dans la rédaction d'une boucle de ce type (je m'améliore
For n = 6 To 10
If Me.Controls("TextBox_objet" & n).Value <> "" Then
Me.Controls("TextBox_objet" & n) = True
Me.Controls("CheckBox_objet" & n) = True
End If
ActiveSheet.Shapes.Range(Array("Group " & n)).Visible = Me.Controls("CheckBox_objet" & n).Value
Next n
Ce code ne fonctionne pas entièrement car je ne sais pas gérer la méthode de dénomination de la forme ActiveSheet.Shapes.Range(Array("Group " & n)).Visible . J'ai un bug avec Array()
Quelqu'un aurait une piste ?
Leakim
Bonsoir,
1- Nomme les check box: cbxShape1, cbxShape2...
2- Nomme les formes: shpShape1, shpShape2...
3- Créer un boucle qui parcourt la collection de check box de ton formulaire
4- Dans la 1ère boucle, créer une boucle parcourant la collection shapes
5- Tester le nom de la shape parcouru (son nom moins les 3 1er caractères) avec celui de la check box parcourue (même méthode pour le nom)
6- Si les noms sont identiques, appliquer ce que tu souhaites en fonction de la valeur de la check box
Gdal29
Salut,
Merci pour ta réponse.
Comment je fais avec ActiveSheet.Shapes.Range(Array("Group " & n)) ?
Je suis désolé, je comprends pas la logique...
Leakim
Bonjour,
Il manque:
.visible
après
Me.Controls("..." & n)
Si tu places un point d'arrêt sur la ligne contenant Array, le code s'exécute-t-il sans erreur? Et quel valeur prend active...
Je manque de temps et surtout mon pc à quelques soucis, pour te répondre avec une vraie solution. (je réponds a mon smartphone...)
Gdal29
Salut,
J'ai lu et relu de nombreux forum français et j'ai fini par trouver la réponse sur un forum anglais.
Cela est si simple que je n'imaginais pas cela possible.
Mon code étant issu de l'enregistreur de macro de excel. Celui-ci utilise array() pour nommer les formes. Mais il n'est pas utile de l'utiliser dans une boucle, d'où le bug initial.
Voici le code qui fonctionne et qui remplace l'ancien trop long.
For n = 6 To 10
If Me.Controls("TextBox_objet" & n).Value <> "" Then
Me.Controls("TextBox_objet" & n).Visible = True
Me.Controls("CheckBox_objet" & n) = True
End If
ActiveSheet.Shapes("Group " & n).Visible = Me.Controls("CheckBox_objet" & n).Value
Next n
Merci pour Gdal29, ta dernière remarque était bien vu
Leakim