Simplification code VBA

yeti_yeti

XLDnaute Junior
Bonjour à tous,

J'ai créé le code suivant mais je suis sûr qu'il existe un moyen plus "propre" de le faire.

Code:
If OptionButton1.Value = True Then
    With MultiPage1
        .Pages("Geographic").Enabled = True
        .Pages("Product").Enabled = True
        .Pages("Order").Enabled = True
        .Pages("Shipping").Enabled = True
        .Pages("Invoicing").Enabled = True
        .Pages("Wholesaler").Enabled = True
        .Pages("Other").Enabled = True
        .Pages("Actions").Enabled = False
        .Pages("Search").Enabled = False
    End With
End If

J'ai pensé que d'ajouter des virgules aiderait mais apparemment VBA n'accepte pas cette syntaxe:

Code:
If OptionButton1.Value = True Then
    With MultiPage1
        .Pages("Geographic", "Product", "Order", "Shipping", "Invoicing", "Wholesaler", "Other").Enabled = True
        .Pages("Actions", "Search").Enabled = False
    End With
End If

Une petite idée?

Merci :)

YeTi
 
G

Guest

Guest
Re : Simplification code VBA

bonjour Yeti-Yeti, Porcinet:D

Essaie ceci:
Attention dans ces lignes c'est le nom de la page qui est comparé.
Si les noms sont dans la propriété caption de chaque page alors il faut changer pge.Name par pge.Caption
Code:
Private Sub OptionButton1_Change()
Dim pge As Page
For Each pge In MultiPage1.Pages
   'Si le nom de la page est dans la chaine de caractère
    If InStr(1, "Geographic,Product,Order,Shipping,Invoicing,Wholesaler,Other", pge.[SIZE=3][COLOR=red]Name[/COLOR][/SIZE]) > 0 Then
        pge.Enabled = OptionButton1.Value
    Else
        pge.Enabled = Not OptionButton1.Value
    End If
Next
End Sub

A bientôt
 

Jam

XLDnaute Accro
Re : Simplification code VBA

Salut Yeti-Yeti, Porcinet, hasco :D

hasco, désolé mais tu vas croire que je t'en veux...je t'assure que ce n'est pas le cas
- L'idée que tu proposes est astucieuse malheureusement le code va effectuer l'inverse car l'état qui va être attribué au Page va être celui avant que le optionButton ne change soit False :(
- Je pense aussi que l'événement Change() serait plus approprié dans le cadre d'une checkbox surtout. Mais faute de plus d'info de Yeti-yeti, je ne préjugerai donc pas.

Sinon j'étais partis pour donner une réponse similaire à la tienne, finalement je propose à yeti-yeti une solution alternative, dans le même esprit, dont l'avantage pourrait être de ne pas passer en revue toutes les pages (mais on sait pas s'il s'agit ici de toutes les pages).

Code:
Dim myArray As Variant
Dim i As Integer
myArray = Array("Geographic", "Product", "Order", "Shipping", "Invoicing", "Wholesaler", "Other")
If OptionButton1.Value Then
    For i = 1 To UBound(myArray)
        MultiPage1.Pages(i).Enabled = True
    Next
End If

dans le cas où tu voudrais activer toutes les pages, je te conseille un truc du genre:
Code:
Dim i As Integer
With MultiPage1
     For i = 0 To .Pages.Count - 1
          .Pages(i).Enabled = True
     Next
End With

Bon courage
 
G

Guest

Guest
Re : Simplification code VBA

Re,

Jam, puisque apparement tu demandes justification des choix que je fait dans les réponses:

jam à dit:
L'idée que tu proposes est astucieuse malheureusement le code va effectuer l'inverse car l'état qui va être attribué au Page va être celui avant que le optionButton ne change soit False .

C'est volontairement que j'ai choisis cette option.
jam à dit:
Mais faute de plus d'info de Yeti-yeti
il nous faut donc bien choisir une option en fonction de ce que l'on sent en attendant ses réponses.

De plus pour inverser les conditions il suffit de déplacer le Not OptionButton1.Value au bon endroit.

jam à dit:
Toutes les bonnes idées ne sont pas dans la même tête.

C'est effectivement le cas et c'est pour cela que je ne me permettrais pas de juger de la qualité d'une réponse, ni de théoriser sur ce qui serait possible ou non en étalant mon savoir.

A+
 

Discussions similaires

Réponses
2
Affichages
263

Statistiques des forums

Discussions
312 564
Messages
2 089 705
Membres
104 265
dernier inscrit
TofLia