Problème sur un programme VBA lorsqu'on ouvre 2 fichiers excel - VB/VBA/VBS - Programmation
Marsh Posté le 29-04-2009 à 14:25:29
Je pense que le problème viens du faite que tu utilises tes noms de feuilles mais sans tes noms de fichiers que tu peux récupérer en faisant :
Sub Name()
Dim NomFichier As String
NomFichier = ThisWorkbook.Name
End Sub
Essai de selectionner le fichier sur lequel tu veux travailler avant chaque début de fonction. Car comme tu navigues entre divers fichiers il est indispensable de retourner sur le bon fichier avant de commencer tes calculs.
Marsh Posté le 29-04-2009 à 15:00:54
merci bien, j'essaie ça de suite et je te dis si ça marche!
Marsh Posté le 30-04-2009 à 16:33:55
bon, finalement le problème est résolu: il suffit de faire appeler le calcul par un bouton vba, et comme ça la procédure appelée sait quel est le classeur actif puisqu'on clique dessus pour le calcul... Tout ça pour ça! merci fouinette, j'ai quand même adopter ta proposition pour être certaine que ça marche
Marsh Posté le 29-04-2009 à 09:45:51
Bonjour à tous,
J'espère être au bon endroit pour poser ma question, j'ai quelques petits problèmes avec Excel et VBA. Je travaille sur un gros classeur excel que je vais appeler, disons, "BIG" (+ de 20 onglets différents) qui utilise quelques petits programmes de calcul en VBA. Je vous donne un exemple:
Function Echangeur(Temp_entrée, Débit_fumées, Chaleur)
'La fonction Echangeur renvoie la valeur de la température des fumées en sortie d'échangeur
' Elle récupère de la feuille Excel "Echangeurs" les trois données suivantes:
' La température d'entrée des fumées : Temp_entrée
' Le débit des fumées : Débit_fumées
' La chaleur nécessaire pour avoir 650°C comme température d'air de fluidisation : Chaleur
Dim a, b, C, d, T, dQ, Z As Single
' On récupère les valeurs des coefficients de la capacité calorifique des gaz en sortie du four
a = Application.Sheets("thermo" ).Cells(30, 8).Value
b = Application.Sheets("thermo" ).Cells(30, 9).Value
C = Application.Sheets("thermo" ).Cells(30, 10).Value
d = Application.Sheets("thermo" ).Cells(30, 11).Value
' On initialise les variables
Z = 0
T = Temp_entrée
'On effectue une itération (en retirant 1°C à chaque passage dans la boucle) sur la température T
'jusqu'à ce que la chaleur fournie z soit supérieure à la chaleure nécessaire pour atteindre 650°C
Do Until Z > Chaleur
dQ = Débit_fumées * (a + b * (T + 1) + C * (T + 1) ^ 2 + d / ((T + 1) + 273) ^ 2) / 4.1868
Z = Z + dQ
T = T - 1
Loop
' La fonction renvoie la température ainsi calculée
Echangeur = T
End Function
Le programme fonctionne y'a pas de soucis de ce côté (encore que pour les "vrais", il doit y avoir des choses qui fachent...) mais lorsque j'ouvre un autre fichier excel en même temps que BIG j'ai 3 cas possibles:
- des fois où le programme tourne (mais aucune idée du pourquoi, je pense que c'est un coup de chance car les cellules correspondantes doivent être vides)
- Des fois où il renvoie "#VALEUR" dans la cellule. J'ai l'impression qu'il va chercher les cellules appelées non pas dans BIG comme je le voudrais mais dans l'autre fichier excel ouvert ... Le plus étonnant c'est que ça bug si j'ouvre BIG après en avoir ouvert un autre, alors que si j'ouvre BIG en 1er, je peux ensuite ouvrir tous les fichiers excels que je veux sans que ça bug...(à moins que ce soit un autre coup de chance ou que les calculs soient faux...)
- Si j'ouvre un fichier similaire, c'est-à-dire un BIG avant qu'il ait été modifié (qui avait quelques onglets en moins et quelques formules de changées), là ça bug complètement quand je fais F9 pour faire le calcul et je suis obligée d'arrêter Excel avec ctrl+alt+suppr...
Donc, revenons en à nos moutons, est-ce que c'est possible que cela vienne du fait que le programme VBA de BIG va chercher les valeurs dans le 2e fichier excel ouvert même s'il n'a pas d'onglet "thermo"? Sinon, avez-vous une idée du problème que je peux rencontrer?
Je précise juste (ça a peut-être son importance?) que j'ai écrit mes programmes VBA dans:
VBAProject (BIG.xls)
dans la sous partie "Modules"
Je vous remercie par avance pour votre aide
---------------
Il vaut mieux vivre avec des remords qu'avec des regrets {O.Wilde}