XL 2010 Récupérer l'indice d'une variable

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

J'ai plusieurs variables du même type déclarées en Public : Public compt(7) As byte
Donc, j'ai 7 variables compt qui vont de compt(1) à compt(7)

Comment s'y prendre, dans une procédure, pour récupérer le chiffre entre parenthèses ?

Supposons cette procédure :
VB:
Sub ExtraireIndice(compt As Byte)
'- compt : le compteur qui sera, par exemple, compt(7)

dim x As Byte

'L'astuce que je cherche pour extraire le numéro de la variable

x = 7

End Sub
 

patricktoulon

XLDnaute Barbatruc
re
bonsoir
NON!! tu n'a pas 7 variables tu n'en a qu'une et c'est un tableau(array)

combien d’éléments j'ai dans compt
msgbox ubound(compt)
mais ATTENTION !!!!!! j'utilise ubound mais en fait ubound te donne le dernier index de compt et non le nombre d’élément
(erreur d'interprétation que font beaucoup ;) )

autrement dit si tu dim à 7 le ubound tu a 8 elements dans compt car sans préciser l'option base on est par defaut en base 0

autrement dit
dim compt(7)
tu aura donc
compt(0)
compt(1)
compt(2)
compt(3)
compt(4)
compt(5)
compt(6)
compt(7)
autrement dit tu a bien 8 éléments

si tu veux être précis tu peux dimer la base

dim compt(1 to 7)
et là tu aura bien 7 element et il commence par le 1
sinon utiliser l'option base en haut de module
option base=1
dim compt(7)
et là tu aura toujours 7 éléments
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonsoir Magic_Doctor, salut patricktoulon,

Oui c'est un faux problème, place ce code dans un module standard et lance la macro Init :

VB:
Public compt(7) As Byte

Sub Init()
compt(0) = 10
compt(1) = 20
compt(2) = 30
compt(3) = 40
compt(4) = 50
compt(5) = 60
compt(6) = 70
compt(7) = 80
Call Extraire(7) 'pour tester
End Sub

Sub Extraire(n As Byte)
MsgBox compt(n)
End Sub
A+
 

Magic_Doctor

XLDnaute Barbatruc
Bonsoir patricktoulon, bof,

Rectifications faites tout marche bien maintenant.
En fait, c'était nettement plus simple que prévu, en comprenant que ces variables n'étaient en fait ni plus ni moins que des éléments d'un tableau.

Merci à vous deux.
 

Magic_Doctor

XLDnaute Barbatruc
Bonsoir job,

Je n'avais pas rafraîchi l'écran.
J'en profite pour mettre ma routine qui m'a fait tourner en rond :
VB:
Sub Actualiser_ComboChx(item$, compteur As Byte)
'Actualisation la liste de la ComboBox "ComboChx" après avoir sélectionné et validé l'item "Image" / "No Image"
'- item : l'item de la liste de la ComboBox "ComboChx" que l'on veut modifier
'- Compteur : le numéro de compteur associé à l'item modifiable

Application.ScreenUpdating = False

Dim dico As Object, listeocompteurs As Variant, listeoptions As Variant, i As Byte, pos As Byte, NouvelItem$(5), merde

    Set dico = CreateObject("Scripting.Dictionary")
    Compteurs compteur, 2 '--> compt(7) pour l'item "Image" / "No Image"
    
    listeoptions = Array("Calculatrice", "Bloc Note", "Relooking", "Image", "Help") 'liste originelle de tous items (avant modifications) de la ComboBox
    
    'Récupère la position de l'item dans l'Array
    For i = 0 To UBound(listeoptions)
        If item = listeoptions(i) Then pos = i: Exit For
    Next
    
    'Dresse la nouvelle liste des items (dont celui modifié) de la ComboBox "ComboChx"
    For i = 1 To UBound(listeoptions) + 1
        NouvelItem(i) = IIf(item <> listeoptions(i - 1), listeoptions(i - 1), IIf(compt(compteur) = 1, "No " & item, item))
    Next
    listeoptions = Array(NouvelItem(1), NouvelItem(2), NouvelItem(3), NouvelItem(4), NouvelItem(5)) 'nouveaux items de la ComboChx "ComboChx" de la feuille "Hoja1"
        
    For i = 0 To UBound(listeoptions) 'rempli le dictionnaire ("dico") avec les éléments de la matrice "listeoptions" (Option Base 0)
        dico(listeoptions(i)) = ""
    Next
    Sheets("Hoja1").ComboChx.List = dico.keys  'dresse la liste de la ComboBox "ComboChx" à partir du dictionnaire
    Sheets("Hoja1").ComboChx.ListIndex = pos 'sélection de l'item (qu'il soit "item" ou "No item") de la liste de la ComboBox "ComboChx"
    
    ActiveSheet.Shapes("LatLong").Visible = IIf(item = "Image" And compt(compteur) = 1, True, False) 'une image qui apparaît ou pas
    Worksheets(1).ScrollArea = IIf(VueEcran, "", IIf(item = "Image" And compt(compteur) = 1, "A1:T21", "A1:T17")) 'plage accessible de la feuille en modes "Vue Normal" & "Plein Écran",
                                                                                                                  'et suivant qu'il y ait ou pas l'image en mode "Plein Écran"
[C2500].Select: Application.ScreenUpdating = True

End Sub
Sans oublier celle de Compteurs pour mieux comprendre :
VB:
Sub Compteurs(n As Byte, x As Byte)
'Administre tous les compteurs de la feuille
'- n : numéro du compteur
'- x : incrémentation
'job75

    compt(n) = IIf(IsNumeric(Evaluate("Compteur" & n)), Evaluate("Compteur" & n), 0)
    compt(n) = IIf(compt(n) < x, compt(n) + 1, 1)
    ActiveWorkbook.Names.Add Name:="Compteur" & n, RefersTo:=compt(n), Visible:=False
    
End Sub
Permettant d'attribuer, ad libitum, des compteurs.
Tout ça sert, tout simplement, à modifier certains items d'une ComboBox.
 

patricktoulon

XLDnaute Barbatruc
re
et match alors c'est pour des nèfles ;)




'Récupère la position de l'item dans l'Array
'ok c'est archaïque mais bon passons
For i = 0 To UBound(listeoptions)
If item = listeoptions(i) Then pos = i: Exit For
Next

bizarre de partir de 1 pour pointer le -1
'Dresse la nouvelle liste des items (dont celui modifié) de la ComboBox "ComboChx"
For i = 1 To UBound(listeoptions) + 1
NouvelItem(i) = IIf(item <> listeoptions(i - 1), listeoptions(i - 1), IIf(compt(compteur) = 1, "No " & item, item))
Next

mais bon si tu dis que c'est bon
;)
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG