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 devant ce code de bibi le bricoleur... Il faut bien commencer par quelque chose

'        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

Rechercher des sujets similaires à "boucle vba nommer formes"