Tableau

lio

XLDnaute Occasionnel
Bonjour le forum,

Voici ma question. Comment incrémenter dans un tableau des valeurs ?
Ci joint la macro.

Private Sub CommandButton1_Click()
Dim Tablo As Variant
Dim I As Byte
Dim X As Byte
Dim Z As Byte
Tablo = Range('A1:D10').Value
For I = 1 To UBound(Tablo)
For X = 1 To 10
For Z = 2 To 20
Tablo(X, 1)
Tablo (Z, 2)

Next Z
Next X
Next I
End Sub

Les lignes en rouge buguent. Quel est le code?

Merci pour votre aide.

Question complémentaire: Comment mettre dans la colonne 2, les chiffres comme suit : 2, 4, 6,8....

Message édité par: lio, à: 24/02/2006 20:08
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir lio,

On peut savoir ce que tu souhaites faire avec ce code lio ?

Tout d'abord, Tablo(X, 1) ou Tablo(Z, 1) tout seul comme ça, ça ne veut rien dire, je suppose même que ces deux lignes sont en rouge dans l'éditeur VBE. C'est un peu comme si tu faisais une ligne de code mentionnant simplement Range('A1'), tout seul ça ne signifie rien et Excel ne sait pas quoi en faire...

Ensuite, ta boucle For I = 1 To UBound(Tablo) ...Next ne sert à rien ici, comme tu réutilises nulle part cette variable I dans la boucle elle-même, cette boucle va simplement te permetre de refaire 'I' fois la même chose...

Par ailleurs, tu affectes au Tablo les valeurs de Range('A1:D10').Value. Ton tableau variant représente donc la plage comme suit : Tablo(Lignes, Colonnes). Remarque au passage que cette plage fait donc 10 lignes sur 4 colonnes.
Ensuite, dans la boucle For Z = 1 To 20 Step 2...Next ta variable Z va prendre les valeurs 1, 3, 5, 7,... et ainsi de suite jusqu'à 19. Ta ligne de code Tablo(Z,1) ne peut donc pas marcher car Z va prendre une valeur supérieure à celles supportées par la première dimension de Tablo().

Espèrant t'avoir un peu aidé à éclaircir tout ça...

Cordialement,
 

lio

XLDnaute Occasionnel
Bonsoir My dead Friend, :p

Merci pour tes explications, en fait je suis aller un peu vite. En fait, je voudrais mettre en colonne 1 : 1,2,3,4....10, ensuite en colonne 2 : 2,4,6,... 20.

Ci joint une autre macro qui fonctionne pour le premier point seulement :

Private Sub CommandButton1_Click()
Dim Z As Byte
Dim x As Byte
For Z = 1 To 10
For x = 1 To 10
Cells(Z, 1) = Z
Cells(x, 2) = x
Next x
Next Z
End Sub

Le but de la question est surtout d'apprendre les 'variables' tableau.
En gros, dans mon code, j'aimerai avoir une solution avec Tablo = Range ('A1:B10').Value.

Merci
Edition: j'écorche ton nom suite au premier post où tu m'avais répondu, il y a quelques mois ( j'avais fait une erreur de frappe !). J'en souris encore !
Message édité par: lio, à: 24/02/2006 20:42

Message édité par: lio, à: 24/02/2006 20:46
 

myDearFriend!

XLDnaute Barbatruc
Re-bonsoir... lieaux ;) ,

Peut-être que le code ci-dessous répondra à tes attentes... (la variable Tablo n'est pas ici d'une grande utilité mais j'ai cru comprendre que tu souhaitais l'utiliser à titre d'exemple)
Private Sub CommandButton1_Click()
Dim Tablo As Variant
Dim
Z As Byte
      'On efface la plage de cellules
      Range('A1:D10').ClearContents
      'On définit le tableau variant Tablo
      Tablo = Range('A1:D10').Value
      'On affecte de nouvelle valeur à Tablo
      For Z = 1 To 10
            Tablo(Z, 1) = Z
            Tablo(Z, 2) = Z * 2
      Next Z
      'On met à jour la feuille à l'aide de Tablo
      Range('A1:D10').Value = Tablo
End Sub
Cordialement,
 

lio

XLDnaute Occasionnel
Ah tiens, j'en profite ( j'espère ne pas être trop lourd !),

J'ai vu souvent dans des codes :

Dim Tablo As Range ( A la place de Variant) et Set Tablo = Range('A1:D10').Value

Pourrais tu STP m'expliquer les subtilités de ces différences... :eek:

Merci.

Message édité par: lio, à: 24/02/2006 21:15
 

myDearFriend!

XLDnaute Barbatruc
Re,

Pas de problème lio, pour ma part, je suis content de répondre à quelqu'un qui s'intéresse et s'investit dans son projet :) et c'est tout à fait ce genre de fil que j'apprécie dans ce Forum...

Bon, en premier, si tu as rencontré Set Tablo = Range('A1:D10').Value dans le Forum, alors tu peux tout de suite te dire que celui qui écrit ça, n'a pas testé son code, car tu te confronteras immédiatement à une erreur au lancement de la procédure...

Je vais tenter une explication...(je change les noms exprès pour que tu puisses mieux appréhender la chose....)

[ol][li]Si tu fais :
Dim Plage As Range
      Set Plage = Range('A1:D10')
Tu définis la variable Plage comme étant un Objet Range. C'est à dire que, grâce à cette variable, tu feras directement référence à une Plage de cellules sur la feuille et tu bénéficieras, non seulement des valeurs mais aussi de l'ensemble des propriétés, méthodes liées à ces cellules au travers de cette variable. Plus qu'une variable , c'est une référence d'objet et c'est pourquoi l'instruction Set devient ici obligatoire. Tu pourras donc faire ensuite : Plage.Value = 10, Plage.ClearContents, Plage.Interior.ColorIndex = 6, Plage.Select... etc. Bref, tu manipules la variable Plage comme tu manipulerais une selection de cellules...[/li]

[li]Si tu fais :
Dim Tablo As Variant
      Tablo = Range('A1:D10').Value
Ici, la notion de Value prend tout son sens. Tu viens de définir une variable (de type variant). Comme pour toute variable 'classique', celle-ci te permet de stocker uniquement des valeurs et comme elle est de type Variant, tu peux donc y stocker tout type de valeurs.
Ainsi, lorsque tu fais 'Tablo = Range('A1:D10').Value', tu lui affectes les valeurs de la plage A1:A10 et cette variable devient automatiquement une variable Tableau à 2 dimensions (Lignes et Colonnes) pour y stocker ces valeurs (comme dans la plage d'origine).[/li][/ol]
Voilà, j'espère avoir un peu dégrossi le sujet et t'avoir un peu aidé à comprendre le principe...

Cordialement,
 

Discussions similaires

Statistiques des forums

Discussions
312 429
Messages
2 088 352
Membres
103 824
dernier inscrit
frederic.marien@proximus.