|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : mai 2004 Messages : 61 ![]() |
Bonjour,
Je fais des tests pour essayer de comprendre le principe des tableaux en VBA. Le code ci-dessous devrait me permettre de mettre les données contenues dans la plage "A8: D8" dans vTableau puis de les restituer dans la feuille excel à partir de la cellule "B1"... En tous cas, c'est ce que j'essaie de faire !! Or, je ne récupère que les données de la cellule "A8". Est-ce que vous pourriez m'expliquer pourquoi ? Merci d'avance. Alfred Code :
|
||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : septembre 2003 Messages : 4 300 ![]() |
bjr,
à tester : Code :
Range(Cells(1, 2), Cells(UBound(vTableau, 1), 1 + UBound(vTableau, 2))) = vTableau
__________________
Assistant de création/modification de rubans Office Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL Blog Office Mon Site DVP |
|
|
00
|
|
|
#3 | ||
|
Invité régulier
![]() Inscription : mai 2004 Messages : 61 ![]() |
Oups, désolé, je n'avais rien dans les cellules A8: D8... Les données étaient en A7: D7...
Bonjour J'ai un autre soucis qui doit être du même type, mais je ne comprends pas comment y palier... J'ai un message d'erreur 'incompatibilité de type' à la ligne : Pourtant je croyais que le type Variant acceptait tous les types de données. Code :
Alfred |
||
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() Inscription : octobre 2008 Messages : 327 ![]() |
Bonjour Alfred,
enlève les parenthèses derrière Tableau Edit : D'ailleurs tu peux aussi les enlever à la déclaration de la variable, un variant peut contenir un tableau
__________________
|
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : mai 2004 Messages : 61 ![]() |
Merci tototiti2008 ,
Mais ça ne change rien malheureusement... |
|
|
00
|
|
|
#6 |
![]() ![]() Didier GONARDFormateur Développeur Office - indépendant Inscription : février 2008 Messages : 2 353 ![]() |
Bonjour,
Alfred23, tu ne peux pas écrire comme tu l'as fait, tu ne peux affecter le contenu d'une seule cellule ainsi si c'est ce que tu veux faire... vois ceci : http://didier-gonard.developpez.com/...u-vba/#LVIII-C cordialement, Didier
__________________
Didier Gonard Ps : Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite ! Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP N'oubliez pas de mettre : ..quand c'est le cas !
|
|
|
00
|
|
|
#7 | ||||
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
[EDIT] Suite à un bug (?), ceci est une réponse à un post qui n'existe plus...à supprimer donc??
Il semble que tu n'aies qu'une idée assez floue de ce qu'est un tableau. Je vais essayer de te l'expliquer d'après ce que j'en sais (mais peut-être aie-je tort sur certains points donc merci de me corriger si tel est le cas). A la base, un tableau est un moyen de regrouper un ensemble de variables d'un même type. Une manière simple d'illustrer cela est de prendre l'exemple de coordonnées cartésiennes. Chaque fois que l'on veut représenter un point on doit donc lui associer un doublet de coordonnées (x,y). Imaginons que l'on aie 3 points à gérer (A,B,C). Sans tableau, on devrait manipuler chacune des coordonnées indépendamment, ce qui dans mon cas en fait 6 en tout. Par exemple: Code :
Utilisons donc maintenant un tableau de 3 "lignes" et 2 "colonnes" (je mets de guillemets car dans la mémoire physique de l'ordinateur il n'y a pas de lignes et de colonnes, seulement des adresses mémoires qui se suivent): Code :
Tout cela est possible parce que tous les éléments du tableau sont du même type et ont la même taille en mémoire. Pour le type que j'avais choisi (Double), la taille d'une variable est de 8 octets. Donc si j'ai un tableau de n doubles et que je veux accéder à l'élément i, c'est possible car l'adresse mémoire de l'élément i est (schématiquement): Adresse élément i = Adresse élément 0 + i*8 octets Toutes ces explications ont pour but de te montrer l'intérêt des tableaux et la nécessité que les éléments du tableau soient tous d'un type bien déterminé (sinon impossible de les repérer dans la mémoire physique). Le type 'Variant' n'existe pas en fait et je pense qu'il est déterminé à la compilation (si quelqu'un peut confirmer...). Pour en revenir à tes moutons, ça plante à la compilation parce que Tableau() ne représente rien. Un tableau n'est qu'un groupe de variables d'un type déterminé organisé de telle façon qu'on puisse facilement énumérer ses éléments et y accéder. Tableau(1), Tableau(2),...., Tableau(10) sont tous des variables certain type (celui de la propriété Value de tes cellules donc String, Long, Double...) mais pas Tableau()! |
||||
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Inscription : mai 2004 Messages : 61 ![]() |
Merci Didier !
Effectivement, je ne savais pas qu'on ne pouvait pas affecter le contenu d'une seule cellule. Merci aussi pour ton tuto sur les tableaux ! Je vais l'étudier de près. J'ai fait des tests en suivant tes instructions, et ça, ça fonctionne : Mais je n'arrive pas à utiliser mes variables resul et resul2... Par exemple, ce code ne fonctionne pas : Est-ce qu'il est possible de les utiliser ? Merci d'avance. Alfred |
|
|
00
|
|
|
#9 | ||
|
Membre Expert
![]() Retraité Inscription : avril 2011 Messages : 692 ![]() |
Bonjour,
essaie de décortiquer ce code Code :
|
||
|
|
10
|
|
|
#10 | ||
|
Invité régulier
![]() Inscription : mai 2004 Messages : 61 ![]() |
Didier,
En fait ça fait des jours que j'essaie de copier des données dans un tableau, mais je commence à me demander si ce que je veux faire est vraiment possible... Je vais te l'expliquer comme ça je ne perdrai pas plus de temps si c'est impossible à faire ! Merci d'avance pour tes explications. Alfred Le code suivant me permet de copier les valeurs de certaines cellules SI une cellule de la colonne 12 a été modifiée. Ça fonctionne mais je voudrais non pas utiliser copy/paste, mais mettre les données dans un tableau sachant que les cellules que je veux copier sont sur la même ligne mais elles ne sont pas contigües. Code :
|
||
|
|
00
|
|
|
#11 | ||||
![]() ![]() Didier GONARDFormateur Développeur Office - indépendant Inscription : février 2008 Messages : 2 353 ![]() |
Bonjour,
Pour info, voir le lien vers Sykyraod dans le tutoriel précédemment cité => très précieux Sinon pour montrer, si besoin en est que l'utilisation de Variables tableau est native et fondamentale dans Excel, on va juste se servir de la propriété Value de l'objet Range qui est, on en conviendra, des plus utilisée. On n'est pas plus explicite volontairement au niveau code : Code :
Code :
Alfred23 ceci explique ton dernier souci, c'est un comportement natif d'Excel cordialement, Didier
__________________
Didier Gonard Ps : Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite ! Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP N'oubliez pas de mettre : ..quand c'est le cas !
|
||||
|
|
00
|
|
|
#12 | |
![]() ![]() Didier GONARDFormateur Développeur Office - indépendant Inscription : février 2008 Messages : 2 353 ![]() |
Bonjour,
Citation:
Il faut passer alors par une boucle pour l'alimenter.. cordialement, Didier
__________________
Didier Gonard Ps : Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite ! Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP N'oubliez pas de mettre : ..quand c'est le cas !
|
|
|
|
00
|
|
|
#13 | ||||
![]() ![]() Didier GONARDFormateur Développeur Office - indépendant Inscription : février 2008 Messages : 2 353 ![]() |
Bonjour,
Citation:
Citation:
Code :
cordialement, Didier
__________________
Didier Gonard Ps : Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite ! Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP N'oubliez pas de mettre : ..quand c'est le cas !
|
||||
|
|
00
|
|
|
#14 |
|
Invité régulier
![]() Inscription : mai 2004 Messages : 61 ![]() |
OK. Merci Didier.
Je crois que je ne m'en sortirai pas... Je déprime franchement, là. |
|
|
00
|
|
|
#15 |
![]() ![]() Didier GONARDFormateur Développeur Office - indépendant Inscription : février 2008 Messages : 2 353 ![]() |
Bonjour,
pas de déprime, tu boucles simplement sur ta plage non contigüe avec un for each et tu alimentes ton tableau avec des variables compteur, il doit y avoir ça dans le tuto de Silkyraod ça paraît lourd, mais c'est simple en écriture cordialement, Didier
__________________
Didier Gonard Ps : Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite ! Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP N'oubliez pas de mettre : ..quand c'est le cas !
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com