Automatisation de calcule

bonjour,je suis débutant en vba et j'ai un petit problème avec mon code :

Sub regress()

Dim obj As Excel.Application

Set obj = CreateObject("Excel.Application")

Dim y As Range

Dim x As Range

Worksheets("Feuil2").Select

Set y = Range("O59:O86")

Set x = Range("C59:N86")

obj.Workbooks.Open (obj.Application.LibraryPath & _

"\Analysis\atpvbaen.xlam")

obj.Workbooks("atpvbaen.xlam").RunAutoMacros (xlAutoOpen)

obj.Application.Run "ATPVBAEN.XLAM!regress", y, x, False, True, , "", False _

, False, False, False, , False

obj.Quit

Set obj = Nothing

End Sub

j'ai écrit cette macro pour pouvoir utiliser la régression linéaire qu'on trouve dans l'utilitaire excel afin de l'automatiser par un simple bouton. tout ce passe bien dans l’exécution jusqu’à l'instruction en rouge ou la il me dit qu'il faut que y soit une sélection continue et même si je remplace la variable y par range("O59:O86").select. Je ne vois pas comment faire d'autre. si quelqu'un a une idée je suis preneur

Bonsoir,

D'abord, dans un bon code qui se respecte on ne sélectionne. Ecrire "Select" signifie qu'on ne sait pas comment écrire autrement et qu'on ne comprend pas bien les objets qu'on manipule.

Il ne suffit pas de copier du code pour réaliser une opération fonctionnelle en VBA...

Créer une instance d'Excel à partir d'Excel nécessite qu'on ait des raisons pour le faire, parce qu'on se retrouve avec deux instances de l'application. Et envoyer à Excel2 des objets Range d'Excel1 pose un tout petit problème car Excel2 ne les voit tout simplement pas, ces plages ne sont pas dans le même Excel.

Cordialement.

je dois avoué que j'ai un peu de mal à te suivre. qu'entends-tu par excel 2 et excel 1?

Tu démontres ce que je disais...

Je t'invite à faire un test : tu ouvres un fichier quelconque que tu connais. Une fois qu'il est ouvert, tu ouvres Excel, à partir de la commande d'ouverture de l'application, qui s'ouvrira avec un classeur vierge.

Dans ce nouveau classeur, tu te rends dans l'éditeur VBA et tu vas me dire si tu vois ton premier classeur ouvert.

j'ai fais ce que tu ma dis et la page VBA est vierge dans le nouveau excel. cependant je vois pas le rapport avec mon code vue que je travail que sur une feuille . Qu'elle partie de mon code te fais penser ça?

Bon, j'ai compris d'où viens le problème. cependant je ne vois pas comment y remédier. si je mets

Application.Run "ATPVBAEN.XLAM!regress", y, x, False, True, , "", False _

, False, False, False, , False

ça ne marche pas car il vat chercher l'application dans mes documents. il y aurait un moyen de lui demander d'aller la chercher dans sa racine?

Si tu as fait le test et que tu ne vois pas le rapport avec ta situation...

Si en ouvrant l'éditeur VBA sur chacun, tu ne vois pas l'autre, c'est parce que chacun est dans un Excel différent...

up

j'ai compris d'où viens le problème. cependant je ne vois pas comment y remédier. si je mets juste

Application.Run "ATPVBAEN.XLAM!regress", y, x, False, True, , "", False _

, False, False, False, , False

ça ne marche pas car il vat chercher l'application dans mes documents. il y aurait un moyen de lui demander d'aller la chercher dans sa racine?

bon bah j'ai finalement réussie et ça marche très bien. merci de votre aide si on peut appeler ça comme ça.

Tant mieux Je te renvoie à mon premier post : je disais que tu ne pouvais envoyer des objets Range (qui ne pouvaient être lus d'une instance à l'autre), mais donc des matrices de valeurs...

en réalité le problème était encore plus simple que ça mais j'ai pas réalisé tout de suite. ^^"

il me manquais juste cette instruction:

AddIns("Analysis ToolPak - VBA").Installed = True

Rechercher des sujets similaires à "automatisation calcule"