XL 2013 [RESOLU] Passage d'arguments statique et dynamique en utilisant paramarray

Jo_VBA

XLDnaute Nouveau
Bonjour à tous,

Je suppose que j'ai un problème de déclaration de variable.

J'utilise une sub dans un module pour faire la mise en forme des mes onglets.
Lors de l'appel de ce code, je passe en paramètre fixe l'index des onglets à mettre en forme.

Code:
Sub Mise_En_Forme(ParamArray IndexPage1() As Variant)

  'MISE EN FORME DES ONGLETS DONT L'INDEX EST PASSE VIA "IndexPage1"

Dim Wsh As Worksheet

If IndexPage1(0) = 0 Then
        For Each Wsh In ThisWorkbook.Worksheets
            If Not ThisWorkbook.Worksheets(Wsh.Index).Index = 4 And Not ThisWorkbook.Worksheets(Wsh.Index).Index = 18 And Not ThisWorkbook.Worksheets(Wsh.Index).Index = 3 And Not ThisWorkbook.Worksheets(Wsh.Index).Index = 2 And Not ThisWorkbook.Worksheets(Wsh.Index).Index = 1 Then
    Else
        For i = 0 To UBound(IndexPage1)
            If Not i = 4 And Not i = 18 And Not i = 3 And Not i = 2 And Not i = 1 Then
            endif
        next
    End If
End Sub

Cette façon me permet de passer les numéro d'onglets à traiter ou si je mets "0" cela va traiter tous les onglets.
La variable "IndexPage1" ayant ParamArray comme argument facultatif, cela me transforme ma liste de numéro d'index en tableau.


Jusqu'à maintenant ça fonctionnait sans problème étant donné que les numéros d'onglets sont passé en "dur", du style :
Code:
Call Mise_En_Forme(TargetBackup, 17)
ou
Code:
Call Mise_En_Forme(0)

Le problème est que j'aimerais via une autre sub s'occupant de l'impression, de passer les index de pages dynamiquement suivant comment le code d'impression s'effectue, example :
Code:
Call Mise_En_Forme(TabImpMeF)

Si la variable passée est déclarée de ces types :
Code:
Dim TabImpMeF As String
Dim TabImpMeF As Variant
alors IndexPage1() aura cette valeur (par example) : "1, 2, 4, 17", ça ne passe pas les valeurs dans une forme tableau (paramarray)

Si la variable passée est directement un tableau :
Code:
Dim TabImpMeF() as variant
alors indexPage1() sera une imbrication de 2 tableaux (TabImpMeF sera dans indexPage1(0)).


Donc ma question est comment déclarer ma variable "TabImpMeF" pour que indexPage1() soit comme ceci (par example):

indexPage(0)=1
indexPage(1)=5
indexPage(2)=13
etc...

Merci d'avance pour votre aide !
 
Dernière modification par un modérateur:

Paf

XLDnaute Barbatruc
Re : Passage d'arguments statique et dynamique en utilisant paramarray

bonjour,

l'intérêt d'utiliser ParamArray , c'est qu'on peut passe 1 ou plusieurs paramètres sans se poser de problèmes, puisqu'ils seront éléments du tableau désigné par ParamArray.

le soucis comme vous l'avez remarqué, c'est que si le paramètre est un tableau, ce tableau sera le premier élément du tableau désigné par ParamArray .

une solution pourrait consister à passer comme paramètre, systématiquement, un tableau, et supprimer ParamArray de la sub:

Code:
Sub Mise_En_Forme(IndexPage1)

  'MISE EN FORME DES ONGLETS DONT L'INDEX EST PASSE VIA "IndexPage1"

Dim Wsh As Worksheet

If IndexPage1(0) = 0 Then
        For Each Wsh In ThisWorkbook.Worksheets
            If Not ThisWorkbook.Worksheets(Wsh.Index).Index = 4 And Not ThisWorkbook.Worksheets(Wsh.Index).Index = 18 And Not ThisWorkbook.Worksheets(Wsh.Index).Index = 3 And Not ThisWorkbook.Worksheets(Wsh.Index).Index = 2 And Not ThisWorkbook.Worksheets(Wsh.Index).Index = 1 Then
    Else
        For i = lBound(IndexPage1) To UBound(IndexPage1)
            If Not i = 4 And Not i = 18 And Not i = 3 And Not i = 2 And Not i = 1 Then
            endif
        next
    End If
End Sub

appel à la sub:
Code:
tablo=array(0)
Call Mise_En_Forme(tablo)

ou
Code:
tablo = Array(5, 17)
 Call Mise_En_Forme(tablo)

ou

Code:
Call Mise_En_Forme(TabImpMeF)

A+
 

Discussions similaires

Réponses
19
Affichages
2 K

Statistiques des forums

Discussions
312 360
Messages
2 087 598
Membres
103 604
dernier inscrit
CAROETALEX59