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
235
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
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
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
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
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
12
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
235
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
235
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
235
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
235
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
235
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