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

Messages postés
2
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
29 juin 2011
- - Dernière réponse : 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.
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
2
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
29 juin 2011
0
Merci
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.
Commenter la réponse de sambeaugos