[Excel 2007] Copier une plage de cellules dans un tableau de type Range

Résolu
sambeaugos Messages postés 2 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 29 juin 2011 - 28 juin 2011 à 17:52
sambeaugos Messages postés 2 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 29 juin 2011 - 29 juin 2011 à 09:33
Bonjour à tous,

Un problème tout simple qui m'a pris toute mon après-midi !

J'essaie de copier des cellules dans un tableau de type Range mais sans succès.
Voici mon bout de code :

Public Matrice() As Range
ReDim Matrice(1 To 5, 1 To 5)

Set MaPlage = MaFeuille.Range(MaFeuille.Cells(1, 1), MaFeuille.Cells(5, 5))
Matrice = MaPlage


Lors de l'exécution, j'ai une erreur "Incompatibilité de type" sur la ligne matrice = maplage
MaPlage et MaFeuille sont pourtant bien définies (vue avec Espions).

Merci d'avance pour toutes vos réponses.

5 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
29 juin 2011 à 08:11
Mais dans ce cas également, l'emploi d'une fonction pour si peu est assez abusif, puisque ceci reviendrait bien évidemment au même :
Dim tabl
  Dim laplage As Range
  Set laplage = Range("A1:A3")
  tabl = laplage
  MsgBox UBound(tabl, 1) & " ligne(s) et " & UBound(tabl, 2) & " colonne(s)"



____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 juin 2011 à 18:10
Bonjour,

Si matrice est une plage, elle n'est pas une matrice !

Et pourquoi passer par une matrice, d'ailleurs !

Public Matrice() As Range
[del]ReDim Matrice(1 To 5, 1 To 5)
/del
Set MaPlage Matrice = MaFeuille.Range(MaFeuille.Cells(1, 1), MaFeuille.Cells(5, 5))
Matrice = MaPlage




____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
29 juin 2011 à 07:30
Pour rester orthodoxe, matrice devrait être une fonction du type (exemple)
Public Function Matrice(mafeuille as worksheet) As Range
  Set Matrice = MaFeuille.Range(maFeuille.Cells(1, 1), MaFeuille.Cells(5, 5))
End Function

appelable (par exemple) de cette manière :

set mavariable = matrice(worksheets(2))

Mais on pourrait à vrai dire se demander la raison d'une fonction qui fait si peu et qui pourrait confortablement être remplacée par cette seule ligne de code (exemple):
set mavariable = worksheets(2).maplage



____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
29 juin 2011 à 07:59
Ton titre, maintenant, laisse penser à autre chose que ton code !
Si tu veux une fonction retournant un tableau des valeurs d'une plage, c'est de cette manière/exemple :

Private Sub CommandButton1_Click()
  Dim tabl
  Dim laplage As Range
  Set laplage = Range("A1:A3")
  tabl = matrice(laplage)
  MsgBox UBound(tabl, 1) & " ligne(s) et " & UBound(tabl, 2) & " colonne(s)"
End Sub
Private Function matrice(maplage As Range)
  matrice = maplage
End Function


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sambeaugos Messages postés 2 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 29 juin 2011
29 juin 2011 à 09:33
Merci pour tes réponses ucfoutu.

Tout le code autour de ma partie utilise des matrices, c'est pourquoi j'ai voulu rester dans l'esprit matrice.

Pour info, quand j'écris cette ligne :
Public Matrice() As Range
Set Matrice = MaFeuille.Range(maFeuille.Cells(1, 1), MaFeuille.Cells(5, 5))

j'obtiens le message d'erreur suivant :
"impossible d'affecter à un tableau"

Ce que j'ai fait :
For i = 1 To UBound(Matrice_Augeo, 1)
    For j = 1 To UBound(Matrice_Augeo, 2)
        Set Matrice_Augeo(i, j) = MaPlage.Cells(i, j)
    Next
Next

J'obtiens bien un tableau de cellules.
Maintenant, je pense utiliser la plage de cellule (plus orthodoxe) ;)

Merci pour tes renseignements ucfoutu.
0
Rejoignez-nous