erreur défini par l'application. [Résolu]

Signaler
Messages postés
130
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
8 décembre 2015
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour à tous,

dites un bug me turlupine, voici la ligne de l'erreur

myRow = Worksheets(MaFeuille).Range(Cells(i + 2, 1), Cells(i + 2, 13)).Value

erreur défini par l'application...

avec myRow as variant




nitho l'amateur

6 réponses

Messages postés
130
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
8 décembre 2015

Je me suis rendu compte qu'il n'aime pas trop les l'écriture range(cells(), cells())... Je sais pas pourquoi... pourtant en principe ça marche et dans certains cas ça marche même chez moi...

j'ai donc remplacé par une écriture plus conventionnelle range("A" & (i + 2) & ":M" & (i + 2)) ...


bref...



nitho l'amateur
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
224
Bonjour,

Il nous faut savoir :
- Ce que tu attends que retourne la variable Myrow
- de quel type est la variable Mafeuille et ce qu'elle contient.


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
130
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
8 décembre 2015

Mafeuille est de type string et retourne le nom d'une feuille
je veux que myRow contienne en mémoire le range de cells(i + 2, 1) à cells(i + 2, 13).

Au moment du bug, les variable Mafeuille, et i retournent bien ce que j'attends... mais j'ai une erreur...



nitho l'amateur
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
224
je veux que myRow contienne en mémoire le range de cells(i + 2, 1) à cells(i + 2, 13)

Déjà : un range est une plage. (si c'est bien la plage - comme tu l'exprimes - que tu veux mettre en mémoire... et non un "tableau" de ses valeurs )
regarde
Dim mafeuille As String, i As Integer, myrow As Range
mafeuille = "Feuil1"
i = 1
With Worksheets(mafeuille)
  Set myrow = .Range(.Cells(i + 2, 1), .Cells(i + 2, 13))
End With
MsgBox myrow.Address




____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
130
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
8 décembre 2015

En fait c'est vrai je voulais écrire en mémoire les valeurs du range et non le range en entier....

ça me donne des idées ton bout de code ...
Mais, je me pose des questions...

lorsque je fait par ex:

set ws = thisworkbook.sheets(1)

tu va dire que j'ai chargé la feuille en mémoire.
Mais si par la suite j'éffectue des modifs sur ws elle seront repercutée sur la feuille de mon classeur.

du coup je me dit que ça doit être moins performant, d'autant plus que l'objet range est plus lourd que le tableau de valeur que moi je manipule.

en fait charger l'objet range en mémoire avec un set comme tu l'as fait ne revient t-il pas à avoir une plage nommée dans son code ???

Je parle du point de vue perf



nitho l'amateur
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
224
Mais rien ne t'empêche de traiter un tableau ! (c'est le nom MyRow, qui me faisait me poser des questions, c'est tout !
Un tablerau, alors ? ===>>

[code=vb]Dim mafeuille As String, i As Integer, montabl
mafeuille = "Feuil1"
i = 1
With Worksheets(mafeuille)
  montabl = .Range(.Cells(i + 2, 1), .Cells(i + 2, 13))
  'montabl = .Range("A1:A3")
End With
For x = 1 To UBound(montabl, 2)
  MsgBox montabl(1, x) ' (1,x) et pas (x,1) car il s'agit d'un tableau de
                        ' une seule ligne et plusieurs colonnes, hein.
Next
/code

Regarde bien la ligne commentée.
____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP