Probleme de Union(range, range)

Signaler
Messages postés
11
Date d'inscription
samedi 12 mai 2012
Statut
Membre
Dernière intervention
12 mai 2012
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonsoir :

Dim test As Range
Dim tete As Range
Dim toto As Range

Set test = xlsfeuille.Range("K1")
Set tete = xlsfeuille.Range("K3")
Set toto = Union(test, toto)
'Set toto = application.Union (test, toto)

"Argument ou appel de procedure incorrect"


Je demande donc votre aide pour faire fonctionner mes qqes lignes.
J'evolue en VB6 ou VBA Access 2007

18 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Bonjour,
et c'est quoi, xlsfeuille ?
Déclaré où et comment ?
J'evolue en VB6 ou VBA Access 2007

Mais le bout de code montré est pour l'instant et sans autre précision du VBA/Excel

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
11
Date d'inscription
samedi 12 mai 2012
Statut
Membre
Dernière intervention
12 mai 2012

xlsFeuille, c'est ma feuille excel (représente un sheet1("") )

En fait c'est du VB c'est juste que j'ecris et lit dans un fichier excel ouvert qqes lignes au dessus
Messages postés
11
Date d'inscription
samedi 12 mai 2012
Statut
Membre
Dernière intervention
12 mai 2012

je précise que l'erreur porte sur la ligne set toto = application...
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
xlsFeuille, c'est ma feuille excel (représente un sheet1("") )

défini où et comment (bis repetita) ?
En fait c'est du VB c'est juste que j'ecris et lit dans un fichier excel ouvert qqes lignes au dessus

ce n'est pour l'instant que du VBA (VB tout seul ne voulant pas dire grand-chose)
Veux-tu dire (et pourquoi ne l'as-tu donc pas dit ????) que tu "pilotes" Excel depuis VB ? et lequel, de VB, alors ?
Reste que la question essentielle, qui n'a toujours pas de réponse, est celle que je t'ai posée !
Tu as maintenant deux réponses à faire :
- en pilotage ou non ? et si oui, depuis quoi ?
- où et comment a été déclaré xlsfeuille ?

Et si en pilotage :
- où et comment a été déclarée l'application Excel ?

Il est vraiment regrettable que je sois obligé d'azller "à la pêche" de précisions que tu aurais dû donner d'emblée ! (nous en sommes au message n° 5) ===>> et alors ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
11
Date d'inscription
samedi 12 mai 2012
Statut
Membre
Dernière intervention
12 mai 2012

AUTANT pour moi !!

alors voila :
Dim xls As Excel.Application,
xlsclasseur As Excel.Workbook,
xlsfeuille As Excel.Worksheet

j'ai donc déclaré ma feuille


chemin = "C:\Users\gilles\Desktop" & nomFile
If Dir(chemin, vbNormal) <> "" Then
Set xlsclasseur = xls.Workbooks.Open(chemin
Set xlsfeuille = xlsclasseur.Worksheets(1)
end if

Dim test As Range
Dim tete As Range
Dim toto As Range

Set test = xlsfeuille.Range("K1")
Set tete = xlsfeuille.Range("K3")
Set toto = Application.Union(test, toto)
toto.Select


puis je tente de generer un graphe, qui fonctionne, sauf que dans ma plage, il y a des vides
et je voudrais que ces vides n'apparaissent pas dans mon axe des abssices et je suis bloqué.
voila pk je tente une selection de cellules non contigues


// CONTRUCTION DU GRAPHIQUE EXCEL
' debut du graphe
Dim c As ChartObject
Set c = xlsfeuille.ChartObjects.Add(10, (a * xlsfeuille.Cells(1, 1).Height) + (4 * xlsfeuille.Cells(1, 1).Height), 600, 200)

With c.Chart
.ChartType = xlLineMarkers
.SetSourceData Source:=multi2
.DisplayBlanksAs = xlInterpolated
End With
With c.Chart.SeriesCollection(1)
.XValues = multi
.Interior.Color = "blue"
End With


MErci tout de meme pour ton aide !
Messages postés
11
Date d'inscription
samedi 12 mai 2012
Statut
Membre
Dernière intervention
12 mai 2012

en pilotage depuis VB6
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Si tu le permets : on ne va pas "bifurquer" vers tes autres problèmes (de graphe), hein ...
Ici : une difficulté spécifique et isolée par discussion !
là, donc, était ton problème :
'Set toto = application.Union (test, toto)

"Argument ou appel de procedure incorrect"


Où application n'est pas connu. L'est par contre l'application Excel ===>>
Set toto = xls.Union (test, toto)


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
11
Date d'inscription
samedi 12 mai 2012
Statut
Membre
Dernière intervention
12 mai 2012

si je remplace application par xls, l'erreur reste la meme.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
cela veut alors dire que tu n'as pas créé l'objet xls
Pour quelle raison ? je l'ignore :
- peut-être une référence non cochée ?
ou encore que
xlsclasseur est toujours Nothing . et ne m'étonnerait pas du fait de :
As Excel.Workbook (quésako Excel ? tu as déclaré xls) !
xlsfeuille est toujours Nothing et ne pointe vers rien (et une union de rien avec rien, ma foi ...)
Je crois que tu devrais d'abord apprendre comment déclarer les objets en pilotage (les sources et exemples ne manquent pas sur ce forum à ce propos ! mot clef Piloter) avant d'utiliser des objets.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
11
Date d'inscription
samedi 12 mai 2012
Statut
Membre
Dernière intervention
12 mai 2012

Si, l'objet xls est crée, pusique j'arrive parfaitement a ouvrir le fichier, lire des valeurs dans des cellules et les afficher en msgbox par exemple !

la seule erreur vient du fait que la selection de 2 cellules non contigues ne fonctionne pas.

c'est surement un petit détail, mais je ne vois pas

en tout cas merci pour ton aide.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
la seule erreur vient du fait que la selection de 2 cellules non contigues ne fonctionne pas.
*
Tu affirmes bien vite certaines choses non exactes !
Il te suffit de tester directement dans Excel :
Dim toto As Range, titi As Range, letout As Range
Set toto = Range("A1")
Set titi = Range("C9")
Set letout = Union(toto, titi)
MsgBox letout.Address
letout.Select

pour constater que ton affirmation ne tient pas !
Ce n'est pas là qu'est ton erreur, mais dans les objets créés !
Relis ce que je t'en ai dit et sers-toi du moteur de recherche de ce forum (hé oui ! il y en a un et est fait pour cela, hein ...) pour voir comment on "pilote" Excel depuis VB6, à commencer (et surtout) par la création des objets à piloter.
Moi, je vais au dodo, là ...


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Bon (des remords) ===>>
1) contrairement à ce que tu penses, ton objet xls n'existe pas !
Tu l'as déclaré, mais pas défini
Tu en veux la preuve ? ===>>
Dim xls As Excel.Application
If xls Is Nothing Then MsgBox "quoi ?" Else MsgBox "ah oui"

alors que :
Dim xls As Excel.Application
Set xls = New Excel.Application
If xls Is Nothing Then MsgBox "quoi ?" Else MsgBox "ah oui"

2) et ce n'est pas tout ===>> relis donc mes messages plus haut
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
11
Date d'inscription
samedi 12 mai 2012
Statut
Membre
Dernière intervention
12 mai 2012

ok d'accord

j'ai testé test ptits tests, ca m'affiche "ah oui"

j'ai bien un set xls = ....
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
j'ai bien un set xls = ....

C'est marrant ===>> où est-il caché dans le code que tu as montré ? je ne le vois pas, moi :
Pour mémoire :
Dim xls As Excel.Application,
xlsclasseur As Excel.Workbook,
xlsfeuille As Excel.Worksheet
j'ai donc déclaré ma feuille
chemin = "C:\Users\gilles\Desktop" & nomFile
If Dir(chemin, vbNormal) <> "" Then
Set xlsclasseur = xls.Workbooks.Open(chemin
Set xlsfeuille = xlsclasseur.Worksheets(1)
end if
Dim test As Range
Dim tete As Range
Dim toto As Range
Set test = xlsfeuille.Range("K1")
Set tete = xlsfeuille.Range("K3")
Set toto = Application.Union(test, toto)
toto.Select

Je rêve ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
11
Date d'inscription
samedi 12 mai 2012
Statut
Membre
Dernière intervention
12 mai 2012

Dim xls As Excel.Application,
xlsclasseur As Excel.Workbook,
xlsfeuille As Excel.Worksheet

-----------------------------------------
Set xls = CreateObject("Excel.Application")
------------------------------------------

j'ai donc déclaré ma feuille
chemin = "C:\Users\gilles\Desktop" & nomFile
If Dir(chemin, vbNormal) <> "" Then
Set xlsclasseur = xls.Workbooks.Open(chemin
Set xlsfeuille = xlsclasseur.Worksheets(1)
end if
Dim test As Range
Dim tete As Range
Dim toto As Range
Set test = xlsfeuille.Range("K1")
Set tete = xlsfeuille.Range("K3")
Set toto = Application.Union(test, toto)
toto.Select



J'en suis vraiment désolé ! je l'ai oublié,
c'est ma faute!!

Mais il me parait qd meme logique
que si j'arrive a lire des valeurs et les utiliser, et ecrire dans le fichier, il faut bien que le xls soit set.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
si j'arrive a lire des valeurs et les utiliser, et ecrire dans le fichier, il faut bien que le xls soit set.

Tu tires encore des conclusions rapides !
Ce que tu dis là n'est pas exact !
Puisque tu n'utilises pas cet objet mais directement des objets Range !
Mais tu te plantes plus loin avec un objet "Application", qui, lui, ne correspond à rien (me relire attentivement ...) !




________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
11
Date d'inscription
samedi 12 mai 2012
Statut
Membre
Dernière intervention
12 mai 2012

je viens de me corriger, la seul erreur vient en réalité du fait que

Set toto = Application.Union(test, toto)

remplace toto par tete ca marchera !! parce que je Range test et tete !
pas test et toto !!!



et arretes de me dire que j'ai rien compris !!!
tout ce que tu m'a dit TOI !! est faux !
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
C'est comme tu veux, ami ..
Mais tu devrais ouvrir ton aide VB6 sur CreateObject et éviter d'utiliser, comme tu le fais, à la fois une référence cochée, qui a permis ===>>
Dim xls As Excel.Application
et un pilotage en "Late Binding" (au demeurant bien plus astucieux):
Set xls = CreateObject("Excel.Application") 

Tu devrais, dans la foulée, regarder également GetObject et n'utiliser CreateObject qu'à meilleur escient.
Bonne nuit.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ