Copier une plage de valeur dans une variable [Résolu]

Signaler
Messages postés
35
Date d'inscription
mercredi 4 janvier 2012
Statut
Membre
Dernière intervention
12 septembre 2013
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
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

Messages postés
35
Date d'inscription
mercredi 4 janvier 2012
Statut
Membre
Dernière intervention
12 septembre 2013

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
pas exponentiel, mais puissance de 10, pardon.
Messages postés
115
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
29 juin 2012

bonjour
peut etre...
e.Value = Range(Cells(1, 4), Cells(n, 4)).Value
@+JP
Messages postés
115
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
29 juin 2012

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
Messages postés
115
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
29 juin 2012

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
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
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+
Messages postés
35
Date d'inscription
mercredi 4 janvier 2012
Statut
Membre
Dernière intervention
12 septembre 2013

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
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
Messages postés
35
Date d'inscription
mercredi 4 janvier 2012
Statut
Membre
Dernière intervention
12 septembre 2013

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
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
Messages postés
115
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
29 juin 2012

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
Messages postés
35
Date d'inscription
mercredi 4 janvier 2012
Statut
Membre
Dernière intervention
12 septembre 2013

Ok c'est bon j'ai finalement trouvé mon erreur. Merci pour votre aide.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
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