OVH Cloud OVH Cloud

Exécution intempestive de fonctione lors d'un workbooks.open

20 réponses
Avatar
joel.doucet
Bonjour et merci d'avance pour votre aide.

j'ai un pb lors d'un workbooks.open

lors de l'open, il y a =E9x=E9cution d'un fonction d'un autre module sans
que cela ne soit demand=E9

MODULE 5:

Sub majmat()
statusBarInitial =3D Application.DisplayStatusBar
Application.DisplayStatusBar =3D True
y =3D 6
ws =3D ActiveSheet.Name
Workbooks.Open "Base1.xls"
Sheets("GI").Select
While y < 5000
y =3D y + 1
trouv=E9 =3D False
Workbooks("TB joel.xls").Activate
Sheets(ws).Select

etc...........
---------------------------------------------------------------------------=
--------------------------
MODULE 1 :

Function ValeurMois(Mois As Integer) As String
Select Case Mois
Case 1: ValeurMois =3D "janvier"
Case 2: ValeurMois =3D "f=E9vrier"
Case 3: ValeurMois =3D "mars"
Case 4: ValeurMois =3D "avril"
Case 5: ValeurMois =3D "mai"
Case 6: ValeurMois =3D "juin"
Case 7: ValeurMois =3D "juillet"
Case 8: ValeurMois =3D "ao=FBt"
Case 9: ValeurMois =3D "septembre"
Case 10: ValeurMois =3D "octobre"
Case 11: ValeurMois =3D "novembre"
Case 12: ValeurMois =3D "d=E9cembre"
End Select
End Function
Function RechercheAG(Matricule, Donn=E9e As String)
On Error GoTo ErrRecherche

I =3D 7
While Worksheets("SITUATION").Range("A" & I).Value <> "" And Not
trouv=E9
If Worksheets("SITUATION").Range("A" & I).Value =3D Matricule Then
trouv=E9 =3D True
Else
I =3D I + 1
End If
Wend
If trouv=E9 Then
Select Case Donn=E9e
Case "S"
RechercheAG =3D Worksheets("SITUATION").Range("F" & I).Value
Case "M"
If Worksheets("SITUATION").Range("B" & I) =3D "Introuvable" Then
RechercheAG =3D "introuvable dans le fichier GPMI mais
pr=E9sent dans la base !"
Else
RechercheAG =3D ""
End If
Case "N"
RechercheAG =3D Worksheets("SITUATION").Range("B" & I).Value
Case "P"
RechercheAG =3D Worksheets("SITUATION").Range("C" & I).Value
Case "R"
RechercheAG =3D Worksheets("SITUATION").Range("D" & I).Value
Case "A"
RechercheAG =3D Worksheets("SITUATION").Range("E" & I).Value
Case "I"
RechercheAG =3D I
End Select
Else
Select Case Donn=E9e
Case "S"
RechercheAG =3D "?"
Case "M"
RechercheAG =3D "AG introuvable dans la base !"
Case "N"
RechercheAG =3D "?"
Case "P"
RechercheAG =3D "?"
Case "R"
RechercheAG =3D "?"
Case "A"
RechercheAG =3D "?"
Case "I"
RechercheAG =3D I
End Select
End If

Exit Function

ErrRecherche:
MsgBox Err.Description, vbCritical, "Erreur"
Exit Function
End Function
---------------------------------------------
en pas =E0 pas d=E9taill=E9 tout se passe normalement jusqu'=E0 l'open,
puis la fonction RECHERCHEAV s'=E9x=E9cute 5 fois
puis la fonction VALEURMOIS s'=E9x=E9cute 2 fois
puis l'=E9x=E9cution en s=E9quence de la sub MAJMAT =E0 l'intruction
SHEET("gpmi").select se poursuit normalement.

Je ne comprends d'autant pas que cela ne se produit pas tout le temps

Faut il appeler l'exorciste tout de suite ???

Merci

10 réponses

1 2
Avatar
jo-dou
POUR INFO: (on ne sait jamais ça peut servir à qqun d'autre)

Je n'ai plus de problème en utilisant

With CreateObject("Excel.Application").Workbooks.Open("c:base1.xls")

puis en utilisant
.Worksheets("GI").Select

etc... dans la suite de la sub.

GIGA Merci à MICHDENIS pour les infos que tu m'as apportées ce qui
m'a mis sur la piste
Avatar
MichDenis
Bravo, tu as trouvé une façon d'arriver à tes fins.

Si tu permets un petit commentaire :

| With CreateObject("Excel.Application").Workbooks.Open("c:base1.xls")

C'est la première fois que je vois une ligne de code écrite comme cela
ça fonctionne très bien.

N.B. Je suppose que tu sais que ton fichier s'ouvre une seconde instance
de l'application excel... que cette instance demeurera invisible à moins que
tu en décide autrement... mais le plus important, il ne faut pas oublier
de fermer cette instance à la fin des opérations... et si elle est demeurée
invisible, la fermer n'est pas nécessairement de tout repos !



a écrit dans le message de news:

POUR INFO: (on ne sait jamais ça peut servir à qqun d'autre)

Je n'ai plus de problème en utilisant

With CreateObject("Excel.Application").Workbooks.Open("c:base1.xls")

puis en utilisant
.Worksheets("GI").Select

etc... dans la suite de la sub.

GIGA Merci à MICHDENIS pour les infos que tu m'as apportées ce qui
m'a mis sur la piste
Avatar
jo-dou
rerererereùerci pour l'info,

j'ai trouvé l'info sur excelabo.net

Si je peux encore abuser,

comment fais tu pour refermer l'instance, je pensais que le
workbooks.close la réalisait automatiquement


joel
Avatar
jps
bonjour joel
NON TESTE.....comme certains disent ici

Application.Quit

jps

a écrit dans le message de news:

rerererereùerci pour l'info,

j'ai trouvé l'info sur excelabo.net

Si je peux encore abuser,

comment fais tu pour refermer l'instance, je pensais que le
workbooks.close la réalisait automatiquement


joel
Avatar
jo-dou
AU SECOURS !!!!

j'ai à nouveau le même problème d'éxécution sauvage de fonctions
mais cette fois ci sur une simple initialisation de cellule.

Avec vous une idée sur l'origine de ce délire.

JE CRAQUE !!!!!!!

Merci !!!!!

joël
Avatar
MichDenis
Essaie plutôt un truc comme ceci :

'--------------------------------
Sub test()

Dim Xl As Application
Dim Wk As Workbook

Set Xl = CreateObject("Excel.Application")
Xl.Visible = True ' Met à false lorsque tu
'aura fini de tester ta procédure et que tout est ok.

Set Wk = Xl.Workbooks.Open("c:base1.xls")
'et tout au long de ta procédure, utilise Wk
'qui "est" le classeur que tu as ouvert.

'Le reste de ton code ...


'Pour fermer ton classeur :
Wk.Close True ' Or False selon que tu veux sauvegarder
'les changements

'Pour fermer l'instance Excel ouvert
Xl.Quit
Set Wk = Nothing : Set Xl = Nothing
End Sub
'--------------------------------





a écrit dans le message de news:

AU SECOURS !!!!

j'ai à nouveau le même problème d'éxécution sauvage de fonctions
mais cette fois ci sur une simple initialisation de cellule.

Avec vous une idée sur l'origine de ce délire.

JE CRAQUE !!!!!!!

Merci !!!!!

joël
Avatar
jo-dou
Toutes mes excuses, je suis désolé, j'ai oublié de préciser que je
bosse sur une autre sub, dans le même projet
celle la ne fait pas appel à un classeur extérieur elle travaille sur
les feuilles du même classeur

après plusieurs essais, j'ai fini par recopier les feuilles et macros
une par une dans un nouveau classeur.

sur la copie d'une feuille j'ai eu le message indiquant qu'une cellule
avait plus de 255 caractères.

J'ai donc supprimé cette feuille dans mon classeur, depuis ma macro
fonctionne correctement

La feuille supprimée contient des formules faisant référence à des
noms contenus dans une autre feuille. c'est peut être ça qui pose
problème, certains de ces noms correspondant à des cellules "zones de
listes" non encore renseignées. ( tout ceci réalisé par mon
prédécesseur )

grand merci pour votre aide.

joël
Avatar
MichDenis
Écoute, je ne sais pas où t'es rendu ...et je te laisse aller.

Ici ce n'est pas un jeu de devinettes...

1 fil = une question... si tu changes totalement la donne
de ta problématique...comment faire pour te suivre ?


a écrit dans le message de news:

Toutes mes excuses, je suis désolé, j'ai oublié de préciser que je
bosse sur une autre sub, dans le même projet
celle la ne fait pas appel à un classeur extérieur elle travaille sur
les feuilles du même classeur

après plusieurs essais, j'ai fini par recopier les feuilles et macros
une par une dans un nouveau classeur.

sur la copie d'une feuille j'ai eu le message indiquant qu'une cellule
avait plus de 255 caractères.

J'ai donc supprimé cette feuille dans mon classeur, depuis ma macro
fonctionne correctement

La feuille supprimée contient des formules faisant référence à des
noms contenus dans une autre feuille. c'est peut être ça qui pose
problème, certains de ces noms correspondant à des cellules "zones de
listes" non encore renseignées. ( tout ceci réalisé par mon
prédécesseur )

grand merci pour votre aide.

joël
Avatar
jo-dou
MichDenis

reprend le problème initial (éxécution de fonction de façon
aléatoire)

c'est le même vrai problème non résolu (et non pas un jeu de
devinettes, je ne suis pas la pour jouer moi non plus) qui s'est
reproduit avec une autre sub.

tes différentes réponses, sans m'apporter la solution, m'ont aidé à
avancer et à trouver la cause.

je croyais faire bien en expliquant mon cheminement ( pensant que cela
pourrait éventuellement servir à quelqu'un d'autre)

c'est vrai que j'aurai pû m'arréter au simple merci.

ce que je ferai surement une autre fois.

cordialement

joel
Avatar
MichDenis
| ce que je ferai surement une autre fois.


Faut pas... mais ta présentation laissait sous-entendre que ta problématique
n'était pas terminé...

| sur la copie d'une feuille j'ai eu le message indiquant qu'une cellule
| avait plus de 255 caractères.

Il y a des façons de traiter cette situation sans supprimer la feuille !
1 2