Range - Tableau - Incompatibilité de type

Bricolo

XLDnaute Nouveau
Bonjour à tous ,
Mon but est de passer la contenu d'une plage dans un tableau pour pouvoir l'utiliszer plus facilement en VBA . J'ai donc écrit la petite procédure suivante et une seconde pour la tester .
Dans l'état actuel , la procédure de test fait l'équivalent d'un simple copier-coller et fonctionne bien .




Sub ZoneEnTableau(Zorig As Range, Table()) '05-09-14 copie zone en tableau
NbLgZorig = Zorig.Rows.Count
NbColZorig = Zorig.Columns.Count
ReDim Table(1 To NbLgZorig, 1 To NbColZorig)
For I = 1 To NbLgZorig
For J = 1 To NbColZorig
Table(I, J) = Zorig.Offset(I - 1, J - 1).Value
Next
Next
End Sub

Sub ZoneEnTableauTest()
Dim Zorig As Range, Zdest As Range, Table()
Set Zorig = Workbooks('ZoneEnTableau.xls').Sheets('Feuil1').Range(Cells(10, 1), Cells(15, 3))
Call ZoneEnTableau(Zorig, Table())
Set Zdest = Workbooks('ZoneEnTableau.xls').Sheets('Feuil1').Cells(10, 5)
For I = 1 To UBound(Table, 1)
For J = 1 To UBound(Table, 2)
Zdest.Offset((I - 1), (J - 1)).Value = Table(I, J)
' MsgBox Table(I, J) '<-------------- incompatibilité de type
Next
Next
' MsgBox Table(1, 1) '<-------------- incompatibilité de type

End Sub

Quand j'essaie d'utiliser un élément du tableau , j'obtiens le message d'erreur . Les deux lignes en commentaire permettent d'en faire le test .
Quelque chose m'échappe . Merci à ceux qui pourront éclairer ma lanterne .

Je vous joins le fichier de test .
[file name=ZoneEnTableau.zip size=8905]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ZoneEnTableau.zip[/file]
 

Pièces jointes

  • ZoneEnTableau.zip
    8.7 KB · Affichages: 44
B

bebere

Guest
bonjour Bricolo,le Forum
je t'ai mis un commentaire dans le code
à bientôt [file name=ZoneEnTableau_20050924094655.zip size=9024]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ZoneEnTableau_20050924094655.zip[/file]
 

Pièces jointes

  • ZoneEnTableau_20050924094655.zip
    8.8 KB · Affichages: 42

Bricolo

XLDnaute Nouveau
Bonjour bebere ,

Merci de t'être interessé à mon petit problème .
La première procédure fonctionne correctement . C'est au niveau de la seconde que j'éprouve quelque souci . J'ai ajouté une ligne intermédiaire pour l'illustrer :

Code:
        Zdest.Offset((I - 1), (J - 1)).Value = Tableau(I, J)
        MsgBox Zdest.Offset((I - 1), (J - 1)).Value
'        MsgBox Tableau(I, J)     '<-------------- incompatibilité de type

La première m'indique que le tableau est correctement rempli puisque j'arrive à en copier les valeurs sur la feuille : il n'y a donc pas de problème du côté des indices . Cependant , je ne parviens pas à afficher les éléments dans une boîte de dialogue . Même chose quand j'essaie de l'affecter à une variable .
Cele me semble bien mystérieux . Je ne comprends pas pourquoi ça marche sur la première ligne et pas sur la troisième . C'est peut-être quelque chose de tout bête mais tant qu'on n'a pas mis le doigt dessus ...

Tes lumières sont les bienvenues .
Bonne soirée

[file name=ZoneEnTableau_20050924193235.zip size=8884]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ZoneEnTableau_20050924193235.zip[/file]

Message édité par: bricolo, à: 27/09/2005 11:37
 

Pièces jointes

  • ZoneEnTableau_20050924193235.zip
    8.7 KB · Affichages: 35
B

bebere

Guest
bonjour Bricolo
je t'ai mis des commentaires dans le code
j'ai fais une procédure plus simple qui donne le même résultat
ds ta procédure j'ai mis 2 lignes en commentaires et c'est ok
à bientôt
[file name=ZoneEnTableauv1.zip size=9921]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ZoneEnTableauv1.zip[/file]
 

Pièces jointes

  • ZoneEnTableauv1.zip
    9.7 KB · Affichages: 42

Bricolo

XLDnaute Nouveau
Bonjour bebere ,

Mon but était de créer une procédure standard permettant de passer un objet plage à un tableau VBA pour pouvoir le manipuler dans une autre procédure .
Le programme de test avait pour but de vérifier que le tableau était bien créé en recopiant chacun de ses éléments dans un autre endroit de la feuille , ce qui semblait être bien le cas .
En attendant , j'ai contourné le problème par un
set x=Range('toto')
et des
x.cells(I,J).value
ce qui m'amène au même résultat si ce n'est que cela m'enpêche , je crois , de fermer ou de renommer le classeur d'origine .

Finalement , tu m'as mis sur la voie de la solution . Chaque élément de mon tableau était en effet lui-même un tableau .
Cette ligne est en cause :
Tableau(I, J) = Zorig.Offset(I - 1, J - 1).Value

Je pensais , trop sans doute , que Zorig me renvoyait l'adresse de la première cellule .
Avec la correction suivante , tout rentre dans l'ordre :
Tableau(I, J) = Zorig.Cells(1, 1).Offset(I - 1, J - 1).Value
et je vais pouvoir poursuivre mes aventures . En effet , c'était tout bête !

Merci encore bebere , et à bientôt .
 

Discussions similaires

Réponses
11
Affichages
297

Statistiques des forums

Discussions
312 321
Messages
2 087 237
Membres
103 497
dernier inscrit
JP9231