Transfomer une plage (range) en tableau (variant) [Résolu]

Signaler
Messages postés
25
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
10 mai 2008
-
Estelle_BNP
Messages postés
25
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
10 mai 2008
-
Bonjour,

j'essaie de créer une macro qui importe une plage de caractères Excel dans un tableau.

Lorsque je lance ma macro j'ai le message
Erreur d'exécution '1004':
Erreur définie par l'application ou par l'objet

Pouvez-vous m'aider à trouver d'où vient le problème et sa correction ?

Voici ma macro :

'------------------------------------------------------------------------------
' Fonction qui sélectionne tous les colonnes (à droite) et les lignes (en bas)
' a partir d'une cellule indiquée en paramètre
' et les renvoie dans un tableau
'------------------------------------------------------------------------------

Function SelectPlage(Plage As Range) As Variant


    Plage.Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    'SelectPlage = Range(Selection, Selection.End(xlDown)).Select
    SelectPlage = ThisWorkbook.Sheets("BD_Produits").Range(Selection, Selection)

End Function

16 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
46
Salut,
pas d'erreur chez moi...
il serait bon que nous sachions le contexte dans lequel est utilisé cette fonction ....

NOTE: IL serait mieux (a mon avis) de ne pas limiter une fonction à un objet precis.
En effet dans la fonction on vois que tu fais appel A la Feuille BD_Produits.
Je pense que le nom de la feuille devrait etre passé en paramètre. de cette manière tu peux plus aisémpent réutiliser ton code.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
46
Salut,

Si je ne me trompe pas, Cells(17,j) EST de type Range donc Essaie en mettant simplement
SelectPlage("BD_Cours_SsJacents", Cells(17, j))
D'autre part, j'espere que j est une variable globale car sinon elle comportera 0 lors de l'apple ce qui peut aussi generer une erreur.
@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
46
Re,

L'erreur 91 vient souvent lorsque tu fais appel à un Objet qui n'est pas charge(initialiser) en mémoire.

Je ne suis pas sur que cela règle ton problème mais tu peux essayer
SET SelectPlage = Range(Selection, Selection)

Ne connaissant pas tout ton projet je peux te propose de me l'envoyer à epsylon9@gmail.com en me disant quoi faire pour avoir l'erreur et j'essaierait de te dépanner.
Mais si ton Xls n'est pas confidentiel bien entendu.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
44
Tu avais déposé ton message dans le bar de codes-sources, je l'ai déplacé sur le forum visual basic, section VBA, voilà ce que cela veut dire !

<hr size="2" />-Blog-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
16
Le problème est probablement dû au fait que tu initialises ta variable Plage as Range et tu lui retournes une valeur Variant (retour de ta Function), d'où l'erreur 91

Essaie en déclarant Plage as Variant, ou rien du tout, ce qui est pareil.
Dim Plage As Variant
ou
Dim Plage
ou encore
Dim Plage()

MPi
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
20
Tu sais quoi ?

Bien que je sois totalement ignorant en "VBA moderne", par instinct :

Je mettrais l'enregistreur de macros en route, ferais mes manips, l'arrêterais... puis irais voir compment onsieur VBA a écrit tou celà,... puis adapterais un peu si nécessaire ici ou là pour gagner du temps ....  
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
44
Déplacé sur vbfrance !
















<hr size="2" />



-Blog-
Messages postés
25
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
10 mai 2008

Bonjour Bidou,

ça veut dire quoi déplacé sur vbfrance ? Comment retrouver le sujet ?
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
46
Re,
SI tu as répondu à Bidou c'est que tu sait ou est le sujet.

Sinon : Va voir ici il est dans la liste
Ou bien tu regardes le haut de la page: [infomsg.aspx Thèmes] / [infomsgf_VISUAL-BASIC_1.aspx Visual Basic 6] / [infomsgt_LANGAGES-DERIVES_287.aspx Langages dérivés] / [infomsgt_VBA_244.aspx VBA] /
Voila j'espere que ca t'aide.
A part cela tu en est ou de ton problème
@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
25
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
10 mai 2008

Merci pour ces informations et votre réactivité à tous.

J'appelle ma fonction SelectPlage avec :

Plage = SelectPlage(Range(Worksheets("BD_Cours_SsJacents").Cells(17, j).Address))

Est-ce d'ici que vient l'erreur ?
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
20
Celle-là est la meilleure ...
Il y a des expressions, pour celà : genre "cours derrière que je t'attrape" ... ou encore "va voir dehors si tu n'y es pas.."  ou encore "passe un coup de fil à Paul pour qu'il te donne son numéro de téléphone"... ou encore "je ne sais pas dire ouf" ou encore... (bon ! je sors ...)

Ah non, je ne sors pas encore ! Il en manque une autre (préparez-vous) :

"Je n'aime pas les épinards....
et heureusement que je n'aime pas les épinards...
car si j'aimais les épinard, j'en mangerait...
... et comme je n'aime pas les épinards..."

Voilà ! je sors maintenant (Pataper)
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
46
Salut,

MMMmmm deux feuilles sont mises en cause? une dans l'appel et une dans la fonction... NOrmal?

D'autre part, lorsque VB te donne l'erreur sur quelle ligne s'arrête il?

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
25
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
10 mai 2008

J'ai modifié légèrement ma fonction pour tenir compte de vos conseils mais j'ai toujours un message d'erreur : Erreur d'exécution '1004' :
Erreur définie par d'application ou par l'objet

Function SelectPlage(Onglet As String, Plage As Range) As Variant
    Worksheets(Onglet).Select
    Plage.Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    SelectPlage = Range(Selection, Selection)
End Function

Sub test1()
Plage = SelectPlage("BD_Cours_SsJacents", Cells(17, j).Address)
End Sub

Cells(17,j).address est de type variant/integer. Quel code dois-je mettre pour avoir un type Range ?

Merci d'avance pour votre aide
Messages postés
25
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
10 mai 2008

Oui j est initialisé

Je plante maintenant sur la dernière ligne de la fonction SelectPlage avec le message d'erreur :
Erreur d'exécution '91':
Variable objet ou variable de bloc With non définie.

J'ai l'impression que c'est parce que j'essaie d'initialiser une variable de type variant avec une variable de type range. Mais je n'ai aucune idée pour résoudre le problème.
Messages postés
25
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
10 mai 2008

Ca avance...
SelectPlage est maintenant correctement initialisé et est de type Variant/Object/Range. Par contre le message d'erreur survient maintenant à la fin de la fonction sur la ligne End Function. Le message reste le même ('91')
Messages postés
25
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
10 mai 2008

merci pour ces conseils. Ca marche maintenant.