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

Signaler
Messages postés
2
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
29 juin 2011
-
Messages postés
2
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
29 juin 2011
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
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
Messages postés
2
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
29 juin 2011

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.