Utilisation d'un tableau array

Bonjour à tous,

Je m'en veux, je me plante sur l'utilisation d'un tableau car je ne sais plus quel type il faut lui attribuer !!!!

image
13classeur1.xlsm (21.45 Ko)

bonjour Jacky,

couleur = Array(RGB(255, 0, 0), RGB(0, 255, 0), RGB(0, 0, 255), RGB(255, 255, 0), RGB(255, 0, 255))

sans ces " ", autrement ce seront des textes !!! et c'est de 0 à 4

Salut @Jacky,

ForeColor est de type Long, donc ton array ne doit contenir que des nombre entiers. La 1e valeur est ok car RGB te renvoie un Long justement (pense à utiliser la doc, il suffit de sélectionner un mot clé et d'appuyer sur F1 pour l'ouvrir !).

Mais dans ton array les valeurs suivantes sont du texte, tu as mis des "". Retire les et ça fonctionnera.

Array(RGB(255, 0, 0), RGB(0, 255, 0), RGB(0, 0, 255), RGB(255, 255, 0), RGB(255, 0, 255))

Bonne journée.

EDIT : salut @Bart, on s'est croisés ✌

Bonjour à vous deux et heureux de vous retrouver sur le Forum,

Vous avez totalement raison quand vous me dites que j'ai utilisé des "". Alors pourquoi j'ai essayé cela ?

Quand il n'y a pas de guillemets, un MsgBox couleur(0) me donne 255 alors sque j'attends RGB(255, 0, 0)
J'avoue que je suis complètement perdu

La valeur RGB(rouge, vert, bleu) est calculée comme ceci :

RGB(r,v,b) = r * 1 + v * 256 + b * 256^2

Avec le blanc tq r = v = b = 255 et le noir tq r = v = b = 0

Donc avec ton tableau couleur, pour le 1e indice (0) :

couleur(0) = RGB(255,0,0) = 255*1 +0*256+0*256^2 = 255

Comme je te le disais, la couleur est un Long, càd un nombre entier. Pas une array.

Ouah!! voila encore une chose que je ne savais pas
couleur(0) = RGB(255,0,0) = 255*1 +0*256+0*256^2 = 255

donc évidemment cette couleur est donc un Long et non un Integer ou un String

Mersi Saboh, que ferais-je sans toi

Pas de soucis. Je te laisse l'exercice de retrouver les valeurs de rouge, vert et bleu à partir de ce long 😉😁

Indice : division euclidienne.

Ne te formalise pas trop sur Long/Integer/String… => C'est un nombre entier. Cependant il peut dépasser la taille maxi d'un "integer" (puisque 255^2 = 65536 > 32767) donc c'est un "Long" (= "gros" integer : taille max = (2,15E+9). Mais en langage courant c'est simplement un "nombre entier".

Bonjour à tous,

Il me semble que votre code tel qu'il est écrit ne montrera rien du tout même avec la correction de l'array.

  • Si le userform était affiché en modal, on ne verrait rien car l'exécution attend la fermeture de l'userform pour continuer
  • La boucle va de 0 à 4 car, en l'absence de Option Base 1, les array ont les indices qui commencent à 0 (sauf si définis explicitement). C'est pourquoi avant d'utiliser un array, je préfère déclarer d'abord Redim couleur (0 to 4) ou couleur(1 to 5) qui permet de maitriser la plage des indices (quelque soit Option base). Exception : quand on utilise la fonction SPLIT() le tableau renvoyé est toujours de base 0.
  • Sans introduire une boucle d'attente ou une tempo, les couleurs défileront trop vite pour que l'œil puisse les percevoir.

Ce code doit fonctionner :

Private Sub CommandButton1_Click()
   UserForm1.Show vbModeless  
   couleur = Array(RGB(255, 0, 0), RGB(0, 255, 0), RGB(0, 0, 255), RGB(255, 255, 0), RGB(255, 0, 255))
   With UserForm1.Lb_machin
      .Caption = "allo"
      .Width = 400
      .Height = 250
      .Left = 10
      .Top = 5
      .Font.Size = 24
      For i = 0 To 4
         .ForeColor = couleur(i)
         For j = 1 To 15000: DoEvents: Next
      Next i
   End With
End Sub

Je ne me formalise pas sur Long/Integer/String, je ne me remets en question sur l'explication que tu m'as donnée en ce qui concerne la valeur retournée par RGB
Que veux tu ajouter avec ?

Indice : division euclidienne.

où vois tu une division enclidienne dans le calcul de RGB(255,0,0) ?

Je ne me formalise pas sur Long/Integer/String, je ne me remets en question sur l'explication que tu m'as donnée en ce qui concerne la valeur retournée par RGB
Que veux tu ajouter avec ?

Indice : division euclidienne.

où vois tu une division enclidienne dans le calcul de RGB(255,0,0) ?

C'était un indice par rapport au défi en te donnant 255 (ou n'importe quelle valeur), comment retrouver le triplet (255,0,0) ? Ca se fait bien avec des divisions euclidiennes.

Les remarques de @mafraise sont intéressantes, c'est d'ailleurs pourquoi personnellement je code souvent en utilisant LBound et UBound pour boucler sur les array. Comme ça pas de problème de base.

Bonjour MaFraise,

La boucle va de 0 à 4 car en l'absence de Option Base 1 les array ont leurs indices qui commencent à 0 (

oui, je me suis rendu compte de mon erreur faite par inadvertance

Sans introduire de boucle d'attente ou une tempo, les couleurs défileront trop vite pour que notre œil puisse les percevoir.

et là aussi je m'en veux car je croyais avoir écrit cette boucle d'attente mais sous une autre forme

DoEvents
Call Attente

Sub Attente()
Sleep 10
End Sub

mais non, je dois être fatigué, j'avais oublié

Un grand merci et au plaisir ce qui est toujours le cas

Encore un grand merci à vous
Voila ce que j'ai réalisé, mon choix de couleur ét

17classeur1.xlsm (25.53 Ko)

ant aléatoire certaines couleurs apparaissent mal, mais peu importe j'ai obtenu ce que je voulais

Rechercher des sujets similaires à "utilisation tableau array"