Convertir une plage de cellules en une matrice a 2 dimensions

Lameblanche Messages postés 7 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 30 novembre 2013 - 30 nov. 2013 à 09:05
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 30 nov. 2013 à 13:15
Bonjour,

Je dois ecrire, comme ecris dans le titre, une fonction qui convertit une plage de cellules selectionnees sur excel en une matrice a 2 dimensions.

Dans tous les exemples que j'ai vu durant mes recherches, la plage est toujours connu, par exemple A1:D5, alors que la elle ne l'est pas, et je ne suis pas sur d'avoir bien compris comment inserer chaque valeur de la plage(i,j) dans la matrice, j'ai fais enormement d'essai mais ils rapportent tous des erreurs..

Function convertir(plage as range) as double() (l'entete ne peux pas etre change)
Dim Matrice

For i = 1 To plage.columns.count
For j = 1 To plage.rows.count
Set Matrice(i, j) = plage.Cells(i, j)
Next j
Next i

convertir = Matrice
End Function

13 réponses

jordane45 Messages postés 38193 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 mai 2024 344
30 nov. 2013 à 09:34
Bonjour
Lorsque l'on utilise les tableaux (array) il faut penser redimension .
Recherche les mots clés suivants : REDIM et PRESERVE
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 nov. 2013 à 09:34
Bonjour,
Sujet traité mille et une fois sur ce forum !
Regarde ce que fait ceci (exemple) :
 Dim matrice()
matrice = Range("A1:C1")
MsgBox UBound(matrice, 1) & vbCrLf & UBound(matrice, 2)
0
Lameblanche Messages postés 7 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 30 novembre 2013
30 nov. 2013 à 10:16
Deja, merci pour vos reponses,

J'avais vu pour Redim et Preserve que ca permet de redimensionner un tableau tout en gardant les valeurs a l'interieur mais j'avoue ne pas etre sur de comprendre en quoi ca met utile.

Et je me doute ucfoutu, j'ai d'ailleurs lu au moins un post ou tu intervenais mais j'arrive toujours pas a m'en sortir...

Ton exemple je sais va me donner le nombre de lignes et colonne, en l'occurence 1 et 3. J'ai donc changer les bornes de mes boucles de cette maniere:

Function convertir(plage) As Double()
Dim Matrice()

Matrice = Range(plage)
For i = 1 To UBound(Matrice, 1)
For j = 1 To UBound(Matrice, 2)
Set Matrice(i, j) = Range(plage).Cells(i, j)
Next j
Next i

convertir = Matrice
End Function

Mais ma fonction est sense etre des nombres (double) alors que ma matrice c'est du string non?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 nov. 2013 à 10:24
Que me racontes-tu ?
Matrice est un tableau de VARIANT.
Si ta plage contirent des doubles, les valeurs de matrice en seront également.
Fais donc ce petit test :
Mets des doubles dans les cellules de la plage A1:B2 et :
 Dim matrice()
matrice = Range("A1:B2")
For i = 1 To UBound(matrice, 1)
For j = 1 To UBound(matrice, 2)
MsgBox matrice(i, j) & " " & TypeName(matrice(i, j))
Next
Next
0

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

Posez votre question
Lameblanche Messages postés 7 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 30 novembre 2013
30 nov. 2013 à 10:33
Ah desole, j'avoue avoir commence il y a moins d'un mois, je suis assez perdu..

Mais c'est parce qu'avec mon code, j'obtiens comme message:

Erreur de compilation : Impossible d'affecter a un tableau.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 30/11/2013 à 10:36
Avec quel code ?
Mets-le ici, tel qu'il est (copier/coller).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
Lameblanche Messages postés 7 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 30 novembre 2013
30 nov. 2013 à 10:37
Function convertir(plage) As Double()
Dim Matrice()

Matrice = Range(plage)
For i = 1 To UBound(Matrice, 1)
For j = 1 To UBound(Matrice, 2)
Set Matrice(i, j) = Range(plage).Cells(i, j)
Next j
Next i

convertir = Matrice
End Function
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 nov. 2013 à 10:39
Bé !
1) Pourquoi t'obstines-tu avec cette méthode ?
2) où et comment as-tu déclaré et initialisé plage ?

0
Lameblanche Messages postés 7 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 30 novembre 2013
30 nov. 2013 à 10:44
Ben en fait je suis pas sur de comprendre , en mettant juste:
matrice = Range(plage) si c'est suppose creer le tableau avec les valeurs bien place?

Et sinon, Plage c'est la selection de cellule que je fais sur excel, j'ai rempli les cellules B9 a D11 de nombres et j'essaie d'appeller la fonction pour voir ce que ca fait.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 nov. 2013 à 10:48
veux-tu bien, oui ou non) montré ce que je te demande ? (où et comment est définie Plage ? Par quel code ? Car sinon, plage n'est rigoureusement rien !)
0
Lameblanche Messages postés 7 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 30 novembre 2013
30 nov. 2013 à 10:50
Ah pardon, j'avais mal lu.

Dans l'entete de la fonction:
Function convertir(plage as range) as double()
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 30/11/2013 à 11:27
C'est pas vrai !!!!! (je dois parler chinois !)
Tu dois normalement avoir DEUX lignes de code :
L'une, pour déclarer la variable Plage : Dim Plage as Range
L'autre, pour l'initialiser : Set Plage = ........
Montre-moi (comment faut-il le dire ?) CES DEUX LIGNES de ton code


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
Lameblanche Messages postés 7 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 30 novembre 2013
30 nov. 2013 à 11:48
En chinois j'aurais compris!

Blague a part, suis desole mais j'ai fais 3 cours de programmation dans ma vie, je suis pas une fleche.

Function convertir(plage As Range) As Double()
Set plage = Range(plage)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 30/11/2013 à 13:17
Bonne chance, alors ... Moi, je suis déjà trop âgé et j'ai mes limites, mes rigueurs, mes notions de base minimum, etc ...ami....

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
Rejoignez-nous