Copier une plage de valeur dans une variable

Résolu
eltigre85 Messages postés 35 Date d'inscription mercredi 4 janvier 2012 Statut Membre Dernière intervention 12 septembre 2013 - 22 févr. 2012 à 15:00
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 29 févr. 2012 à 10:30
Slt,
J'ai essayé de stocker un tableau dans une variable mais je n'y arrive pas.
j'ai essayé l'expression

e = s.Range(Cells(1, 4), Cells(n, 4))


avec e une variable de type range,
s une variable de type range qui me specifie la cellule à partir de laquelle je commence à copier la colonne. Mais boff ça ne marche pas

17 réponses

eltigre85 Messages postés 35 Date d'inscription mercredi 4 janvier 2012 Statut Membre Dernière intervention 12 septembre 2013
29 févr. 2012 à 10:01
Il suffisait d'enlever le .value ce qui donne:
Dim d As Integer
Dim j As Integer
Dim k As Integer
Dim etab(23) As Variant
For j = 0 To 23
etab(j) = Cells(s.Row + j, s.Column + 4)
MsgBox etab(j)
Next j

Et ça tourne
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 févr. 2012 à 16:48
Bonjour,
montre le reste (sinon : incompréhensible)
- où et comment as-tu déclaré puis définu la plage e ?
- où et comment as-tu déclaré puis défini la variable n ?
- où et comment as-tu déclaré l'objet e ?
Car si :
s une variable de type range qui me specifie la cellule

on voit très mal ce que pourrait bien alors être :
s.Range(Cells(1, 4), Cells(n, 4))


et par ailleurs : si e est un objet (un Range, dis-tu): on ne peut lui affecter quoi que ce soit par un simple =

Ce que je lis + tes "explications" constituent un ensemble plus que décousu qui met en évidence d'énormes lacunes.
Quant à :
Mais boff ça ne marche pas

Cela ne veut rien dire ! cela ne "marche" pas avec quels effets (erreur, résultat inattendu ?)
Bref ...
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 févr. 2012 à 17:48
Salut

"e" est un mot réservé du langage (exponentiel)
Change le nom de ta variable pour éviter toute confusion du compilateur.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 févr. 2012 à 17:48
pas exponentiel, mais puissance de 10, pardon.
0

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

Posez votre question
mjpmjp Messages postés 115 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 29 juin 2012
22 févr. 2012 à 17:49
bonjour
peut etre...
e.Value = Range(Cells(1, 4), Cells(n, 4)).Value
@+JP
0
mjpmjp Messages postés 115 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 29 juin 2012
22 févr. 2012 à 17:54
bonjour
pour un tableau...
Tab_e(n)= Range(Cells(1, 4), Cells(n, 4)).Value
si s as range ?
Tab_e(n)= s.Value
@+JP
0
mjpmjp Messages postés 115 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 29 juin 2012
22 févr. 2012 à 18:01
bonjour
j'ai encore oublié un détail
dans la boucle pour agrandir le tableau...
ReDim Preserve Tab_e(n +1 )
Tab_e(n)= Range(Cells(1, 4), Cells(n, 4)).Value
avec comme déclaration...
Public... Private... Tab_e() As String... As Variant...
@+JP
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
23 févr. 2012 à 15:52
Salut,

je crois que tu mélanges un peu tous...
Tu veux mettre le contenu(valeurs) d'une plage de cellules dans une variable tableau ou tu veux mettre une plage de cellules dans une variable ?

Ce n'est pas la même chose et cela ne ce travail pas de la même façon.

A+
0
eltigre85 Messages postés 35 Date d'inscription mercredi 4 janvier 2012 Statut Membre Dernière intervention 12 septembre 2013
28 févr. 2012 à 09:47
Salut dslé pour mon silence, je viens d'essayer le code suivant:
Dim s as range 's est une cellule dont l'adresse a été trouvé dans un programme précédent
Dim d As Integer
Dim j As Integer
Dim k As Integer
Dim etab(23) As Variant
For j = 0 To 23
etab(j) = Range(Cells(s.Row, s.Column + 4), Cells(s.Row + j + 1, s.Column + 4)).Value
MsgBox etab(j)
Next j
End Sub

ça m'affiche erreur 13 incompatibilité de type.
Je me demande bien ce qui peut clocher.
Merci de votre aide
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 févr. 2012 à 10:43
L'erreur est évidente :
tu déclare un tableau dynamique à une dimension ( ton Dim etab(23) )
puis tu tentes, dans ce tableau destiné à recevoir 24 éléments, des éléments eux-mêmes composés, chacun, d'un tableau dynamique :
etab(j) = Range(Cells(s.Row, s.Column + 4), Cells(s.Row + j + 1, s.Column + 4)).Value

et en plus, que pourrait selon toi (même si ça "marchait") retourner Msgbox etab(j) ?

explique en peu de mots (concision et précision) techniques tes tenants et aboutissants.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 févr. 2012 à 10:58
et le "clou" :
Dim s as range 's est une cellule dont l'adresse a été trouvé dans un programme précédent

Donc s = nothing ici (dans ton code).
Voilà qui fait beaucoup, pour peu de lignes, et qui dénote des lacunes fondamentales.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
eltigre85 Messages postés 35 Date d'inscription mercredi 4 janvier 2012 Statut Membre Dernière intervention 12 septembre 2013
28 févr. 2012 à 13:40
Dslé autant pour moi j'ai rectifié le code tjrs rien

Dim d As Integer
Dim j As Integer
Dim k As Integer
Dim etab(23) As Variant
For j = 0 To 23
etab(j) = Cells(s.Row + j, s.Column + 4).Value
MsgBox etab(j)
Next j


Il y a quelque chose qui cloche avec le 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
28 févr. 2012 à 15:03
Oui : ce que j'ai pris la peine (pourquoi ?) de t'exposer dans ton autre discussion (sur le même sujet !)
Mais je parle probablement chinois, ces temps-ci. Va falloir que je réapprenne le langage que je parlais à l'âge de 10 ans.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
mjpmjp Messages postés 115 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 29 juin 2012
28 févr. 2012 à 21:10
bonjour eltigre85
euh...comment dire...en fait ce que j'ai ecrit c'est une grosse betise
Tab_e(n)= Range(Cells(1, 4), Cells(n, 4)).Value


Cells(1, 4) équivaut à dire Range("D1")
en suite tu utilise la meme colonne 4 et n lignes

ReDim Preserve Tab_e(n +1 ) 
Tab_e(n)= Cells(n, 4).Value 


c'est mieux
@+JP
0
eltigre85 Messages postés 35 Date d'inscription mercredi 4 janvier 2012 Statut Membre Dernière intervention 12 septembre 2013
29 févr. 2012 à 09:58
Ok c'est bon j'ai finalement trouvé mon erreur. Merci pour votre aide.
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 févr. 2012 à 10:26
Tu n'avais nullement besoin de faire une boucle, pour cela !

Exemple :

dim toto
toto = Range("A1:D23")


Fait que toto est un tableau dynamique à deux dimensions (23 lignes et 4 colonnes) dont les éléments sont le contenus des cellules de la plage A1:D23

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
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 févr. 2012 à 10:30
Autre exemple poyur un range sur une colonne (ici la D) de la ligne 1 à la ligne 3
Dim toto
toto = Range("D1:D3")
For i = 1 To UBound(toto, 1)
  MsgBox toto(i, 1)
Next



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Rejoignez-nous