VBA / Excel : Bug étrange ...

VBA / Excel : Bug étrange ... - VB/VBA/VBS - Programmation

Marsh Posté le 27-04-2010 à 17:56:32    

Bonjour,
 
Je viens de terminer une Macro sous VBA que j'exécute à partir d'un bouton dans Excel. Ce bouton appelle une fonction qui renvoie un résultat, que j'enregistre dans une cellule Excel.
 
Ma procédure a donc cette structure la :
 
Sub bouton1_Clic()
 
Worksheets("Onglet 1" ).Activate
Range("TX_SECU1_REF" ).Value = SWAP(Range("DTE_ACTU" ), Range("MAT_SECU1" ), Worksheets("SWAP" ).Range("C22" ), Worksheets("SWAP" ).Range("G24:DV24" ), Worksheets("Hyp" ).Range("D173:AH173" ), Worksheets("Hyp" ).Range("D175:AH175" ), Worksheets("SWAP" ).Range("C5" ), Worksheets("SWAP" ).Range("C6" ), Worksheets("SWAP" ).Range("C9" ), Worksheets("SWAP" ).Range("C4" ), Worksheets("SWAP" ).Range("C3" ), 1)
 
End Sub
 
 
Tout s'exécute parfaitement bien si je mets un break point au début de mon programme, et que je l'exécute avec F8 étape par étape.
 
Par contre si je ferme ma fenêtre excel, que je la réouvre, et que je clique sur le bouton, Excel plante avec la proposition d'envoi du rapport d'erreur habituel, et rien à faire...
 
Ce qui est étrange, c'est que si j'ouvre le fichier excel, que j'éxecute tout d'abord le programme grâce au break point (ce qui marche), et que j'enlève le break point, le programme fonctionne alors directement...
 
JE ne sais pas si je suis très clair ....  
 
Avez vous déjà eu ce problème ?
 
MErci !


Message édité par pepito_mi_corazon le 27-04-2010 à 17:58:05
Reply

Marsh Posté le 27-04-2010 à 17:56:32   

Reply

Marsh Posté le 28-04-2010 à 10:04:09    

UP ... Personne ne sait ?

Reply

Marsh Posté le 29-04-2010 à 14:02:58    

Hello
 
SWAP() sort d'ou ?
 
Parceque là, tu as une fonction, et une feuille qui ont le meme nom si je lis bien... Ca peut gener Excel quand meme quelque part... :o


Message édité par SuppotDeSaTante le 29-04-2010 à 14:03:45

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 29-04-2010 à 14:58:47    

Les swaps de taux ou de devise ? Bon trade ;)  
 
Peut-être qu'à la fin de l'ouverture, un élément est renommé pour empêcher un second lancement.
 
Mais, généralement, quand il y a un plantage, au lieu d'une erreur moins grave, cela vient d'un module complémentaire à Excel (car Excel a tellement d'utilisateurs qu'il est forcément mieux testé que les modules complémentaires dont la diffusion est plus restreinte). Donc, je me demande donc si SWAP ne ferait pas partie d'un COM ou d'un activeX externe qui n'aime pas être lancé deux fois, ou qui ne veut le faire que s'il a bien été fermé la première fois, ce qui ne serait pas le cas ici.

Reply

Marsh Posté le 29-04-2010 à 22:04:53    

Grilled pour le swap de taux :P
 
SWAP sort d'une fonction située dans un module complémentaire que j'appelle en choisissant le fichier (VBA=> Références)... Je ré -essaierai en changeant le nom de l'onglet bonne idée merci.
 
Je n'ai pas parfaitement compris ce que tu as voulu dire olivthill ... Mais en fait j'ai "contourné" le problème en copiant collant la fonction, et je ne passe donc plus par de modules complémentaires.... Mais bon c'est pas la panacée.... En tout cas ça prouve que y'a des bug de communication lorsqu'on fait référence à des fonctions de modules externes.... Pas très solide cet outil Excel/Vba !

Message cité 1 fois
Message édité par pepito_mi_corazon le 29-04-2010 à 22:06:31
Reply

Marsh Posté le 12-05-2010 à 11:27:15    

pepito_mi_corazon a écrit :

Mais bon c'est pas la panacée.... En tout cas ça prouve que y'a des bug de communication lorsqu'on fait référence à des fonctions de modules externes.... Pas très solide cet outil Excel/Vba !


 
 
ta ta ta.....
En faisant appel à Worksheets("Onglet 1" ) tu cherche dans le classeur actif, je te laisse déduire le bins quand il y en a plusieurs et que tu ne sais pas trop quel peux être le classeur actif :D
 
De la programation propre en VBA c'est systématiquement repartir du workbook...
Workbooks("mon classeur.cls" ).Worksheets("Onglet 1" )
 
Excel ne peux plus "confondre"
En fait en programation VBA propre, on élimine tout ce qui est (ActiveWorkbook, ActiveWorksheet, Range sans préfixe...)
 
vu que ça commence a faire de grosse ligne de code, c'est plus sympa de travailler avec les "with"
exemple écrire dans le range("A1" ) proprement c'est :
 
Workbooks("mon classeur.cls" ).Worksheets("Onglet 1" ).Range("A1" ).Value = "toto"
 
ou encore
 
With Workbooks("mon classeur.cls" )
    With .Worksheets("Onglet 1" )
        .Range("A1" ).Value = "toto"
    end with
end with


Message édité par Xxxaaavvv le 13-05-2010 à 12:05:23
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed