Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA Macro "Call" ne prend pas en compte la condition "If"

17 réponses
Avatar
raphael-diaz
Bonjour, J'ai posé ce code dans un onglet(classeur) actif d'un document :

Private Sub Worksheet_Deactivate()
If Not ActiveSheet.Range("marqueur") Is Nothing Then
If ActiveSheet.Range("marqueur") = "O" Then
MsgBox "Fonction appelée"
Call FonctionActive
End If
End If
End Sub

Mon but est d'activer la macro FonctionActive() seulement quand la cellule avec le nom défini "marqueur" est égale à "O". Cependant quand j'execute le code, le programme m'affiche bien le MsgBox quand les conditions sont remplies mais execute dans tous les cas et qu'elle que soit la valeur de marqueur la macro FonctionActive comme si Call ne prenait pas en considération la condition If... Pour info la macro FonctionActive est dans un autre fichier lié au mien grace au référence (Outils->références).

7 réponses

1 2
Avatar
raphael-diaz
Gloops a écrit le 09/02/2011 à 10h50 :
Bonjour,

J'abonderais bien dans le sens de DanielCo, en proposant un point
d'arrêt sur l'instruction Call, et un sur la première instruction
de la
fonction appelée.

De plus une fois arrivé sur celle-ci, je propose de cliquer sur le
bouton qui affiche la pile d'appel, pour voir d'où on vient.

Si on a un doute sur la disponibilité du classeur où se trouve la
mac ro,
ne serait-ce pas préférable, plutôt que de l'inscrire dans
les
références, de l'ouvrir en tant que classeur, et d'appeler la
macro e n
stipulant explicitement son emplacement dans le classeur ?

___________________________________________
raphael-diaz a écrit, le 07/02/2011 10:43 :
Bonjour, J'ai posé ce code dans un onglet(classeur) actif d'un docume
nt :

Private Sub Worksheet_Deactivate()
If Not ActiveSheet.Range("marqueur") Is Nothing Then
If ActiveSheet.Range("marqueur") = "O" Then
MsgBox "Fonction appelée"
Call FonctionActive
End If
End If
End Sub

Mon but est d'activer la macro FonctionActive() seulement quand la cell ule
avec
le nom défini "marqueur" est égale à
"O". Cependant quand j'execu te le code, le
programme m'affiche bien le MsgBox quand les conditions sont remplies m ais
execute dans tous les cas et qu'elle que soit la valeur de marqueur la macro
FonctionActive comme si Call ne prenait pas en considération la condi
tion If...
Pour info la macro FonctionActive est dans un autre fichier lié au mi
en grace au
référence (Outils->références).




Merci pour votre aide. Alors j'ai testé avec le débugger avec des points d'arrêt divers et on passe directement sur call sans passer par if. Donc call et appelé en 1er sans prendre en compte if... Je vais essayer de bien présenté le problème :

SITUATION : Sur un worksheet de mon classeur (ThisWorkbook ou un autre), j’utilise cette macro qui me permet de vérifier la présence de la référence : reference.xla et d’appeler le Call seulement si elle est présente. Voilà le programme :

CODE :
Private Sub Worksheet_Deactivate()
'Verifie si le fichier referentiel est bien présent
Dim Fichier As String
Fichier = Dir("C:Program FilesMicrosoft OfficeOFFICE11XLSTARTreference.xla")
‘fichier de référence
If Fichier <> "" Then 'le fichier existe
Call DeleteVersionItemsInPopup
Else 'le fichier n'existe pas
'MsgBox "Le fichier " & Fichier & " est inexistant"
Exit Sub
End If
End Sub

PROBLEME:
Cependant, à l’utilisation, quant la référence n’est pas présente, le programme appel directement le « call » et m’envoi ce message d’erreur :
« Erreur de complilation : Sub ou Function non définie. ». Il ne prend pas en compte ma condition…
Avatar
LSteph
Bonjour,

As-tu testé l'exemple que je t'ai proposé, il semble mettre bien en
évidence que le call n'est executé que si la condition est bien
remplie. Il serait donc pour ton bug plutôt a chercher autour des
autres procèdures évennementielles ou si c'était juste un problème de
compilation refaire dans un classeur neuf.

Cordialement.

--
LSteph


raphael-diaz a écrit :
Gloops a �crit le 09/02/2011 � 10h50 :
> Bonjour,
>
> J'abonderais bien dans le sens de DanielCo, en proposant un point
> d'arr�t sur l'instruction Call, et un sur la premi�re i nstruction
> de la
> fonction appel�e.
>
> De plus une fois arriv� sur celle-ci, je propose de cliquer sur le
> bouton qui affiche la pile d'appel, pour voir d'o� on vient.
>
> Si on a un doute sur la disponibilit� du classeur o� se trouve la
> mac ro,
> ne serait-ce pas pr�f�rable, plut�t que de l'in scrire dans
> les
> r�f�rences, de l'ouvrir en tant que classeur, et d'appe ler la
> macro e n
> stipulant explicitement son emplacement dans le classeur ?
>
> ___________________________________________
> raphael-diaz a �crit, le 07/02/2011 10:43 :
>> Bonjour, J'ai pos� ce code dans un onglet(classeur) actif d'un docume
>> nt :
>>
>> Private Sub Worksheet_Deactivate()
>> If Not ActiveSheet.Range("marqueur") Is Nothing Then
>> If ActiveSheet.Range("marqueur") = "O" Then
>> MsgBox "Fonction appel�e"
>> Call FonctionActive
>> End If
>> End If
>> End Sub
>>
>> Mon but est d'activer la macro FonctionActive() seulement quand la cel l ule
>> avec
>> le nom d�fini "marqueur" est �gale �
>> "O". Cependant quand j'execu te le code, le
>> programme m'affiche bien le MsgBox quand les conditions sont remplies m ais
>> execute dans tous les cas et qu'elle que soit la valeur de marqueur la
macro
>> FonctionActive comme si Call ne prenait pas en consid�ration l a condi
>> tion If...
>> Pour info la macro FonctionActive est dans un autre fichier liï¿ ½ au mi
>> en grace au
>> r�f�rence (Outils->r�f�rences).
Merci pour votre aide. Alors j'ai test� avec le d�bugger avec des points
d'arr�t divers et on passe directement sur call sans passer par i f. Donc call et
appel� en 1er sans prendre en compte if... Je vais essayer de bie n pr�sent� le
probl�me :

SITUATION : Sur un worksheet de mon classeur (ThisWorkbook ou un autre),
j�utilise cette macro qui me permet de v�rifier la prï ¿½sence de la r�f�rence :
reference.xla et d�appeler le Call seulement si elle est prï¿ ½sente. Voil� le
programme :

CODE :
Private Sub Worksheet_Deactivate()
'Verifie si le fichier referentiel est bien pr�sent
Dim Fichier As String
Fichier = Dir("C:Program FilesMicrosoft
OfficeOFFICE11XLSTARTreference.xla")
�fichier de r�f�rence
If Fichier <> "" Then 'le fichier existe
Call DeleteVersionItemsInPopup
Else 'le fichier n'existe pas
'MsgBox "Le fichier " & Fichier & " est inexistant"
Exit Sub
End If
End Sub

PROBLEME:
Cependant, � l�utilisation, quant la r�f� rence n�est pas pr�sente, le programme
appel directement le � call � et m�envoi ce messa ge d�erreur :
� Erreur de complilation : Sub ou Function non d�finie. �. Il ne prend pas en
compte ma condition�
Avatar
LSteph
..la preuve si tu veux vérifier mets ton code ainsi adapté dans un
nouveau projet et teste:

'dans Module1 obligatoirement un module satandard du même classeur
Sub macroOui()
MsgBox "Existe"
End Sub
Sub macroNon()
MsgBox "N'existe pas"
End Sub



'dans le privatemodule de Feuil1
Private Sub Worksheet_Deactivate()
'Verifie si le fichier referentiel est bien présent
Dim Fichier As String
Fichier = Dir("C:Program FilesMicrosoftOfficeOFFICE11XLSTART
reference.xla")

If Fichier <> "" Then 'le fichier existe
Call macroOui
Else 'le fichier n'existe pas
Call macroNon
Exit Sub
End If
End Sub

'LSteph
Avatar
raphael-diaz
LSteph a écrit le 09/02/2011 à 12h22 :
..la preuve si tu veux vérifier mets ton code ainsi adapté dans
un
nouveau projet et teste:

'dans Module1 obligatoirement un module satandard du même classeur
Sub macroOui()
MsgBox "Existe"
End Sub
Sub macroNon()
MsgBox "N'existe pas"
End Sub



'dans le privatemodule de Feuil1
Private Sub Worksheet_Deactivate()
'Verifie si le fichier referentiel est bien présent
Dim Fichier As String
Fichier = Dir("C:Program FilesMicrosoftOfficeOFFICE11XLSTART
reference.xla")

If Fichier <> "" Then 'le fichier existe
Call macroOui
Else 'le fichier n'existe pas
Call macroNon
Exit Sub
End If
End Sub

'LSteph


En effet, ca marche le code d'appel "call" doit etre situé dans un module et non dans microsoft excel objects. Merci beaucoup.
Avatar
raphael-diaz
LSteph a écrit le 09/02/2011 à 12h22 :
..la preuve si tu veux vérifier mets ton code ainsi adapté dans
un
nouveau projet et teste:

'dans Module1 obligatoirement un module satandard du même classeur
Sub macroOui()
MsgBox "Existe"
End Sub
Sub macroNon()
MsgBox "N'existe pas"
End Sub



'dans le privatemodule de Feuil1
Private Sub Worksheet_Deactivate()
'Verifie si le fichier referentiel est bien présent
Dim Fichier As String
Fichier = Dir("C:Program FilesMicrosoftOfficeOFFICE11XLSTART
reference.xla")

If Fichier <> "" Then 'le fichier existe
Call macroOui
Else 'le fichier n'existe pas
Call macroNon
Exit Sub
End If
End Sub

'LSteph


Merci une derniere question en vérité. Si je reprend votre code mais que les macros situées dans module1 de "exemple.xls" se situent en réalité dans le module1 du fichier "reference.xla" et ne peuvent donc etre appelées sauf quand le classeur reference.xla est ouvert...
J'ai essayé d'utiliser l'appel dans chaque macros du module1 de "exemple.xls" vers l'autre module1 de "reference.xla" où est situé le code mais cela reste incompatible.. Il cherche les macros dans le module1 présent soit en l'occurence celui de "exemple.xls" et si il ne les trouvent pas il envoie toujours
« Erreur de complilation : Sub ou Function non définie. ». Il faudrait donc lui dire d'appeler une macro dans un module d'un autre fichier..
Je cherche juste ca.
Avatar
LSteph
....et avec

application.run

Cordialement.

--
LSteph

raphael-diaz a écrit :
LSteph a �crit le 09/02/2011 � 12h22 :
> ..la preuve si tu veux v�rifier mets ton code ainsi adaptï¿ ½ dans
> un
> nouveau projet et teste:
>
> 'dans Module1 obligatoirement un module satandard du m�me class eur
> Sub macroOui()
> MsgBox "Existe"
> End Sub
> Sub macroNon()
> MsgBox "N'existe pas"
> End Sub
>
>
>
> 'dans le privatemodule de Feuil1
> Private Sub Worksheet_Deactivate()
> 'Verifie si le fichier referentiel est bien pr�sent
> Dim Fichier As String
> Fichier = Dir("C:Program FilesMicrosoftOfficeOFFICE11XLSTART
> reference.xla")
>
> If Fichier <> "" Then 'le fichier existe
> Call macroOui
> Else 'le fichier n'existe pas
> Call macroNon
> Exit Sub
> End If
> End Sub
>
> 'LSteph
Merci une derniere question en v�rit�. Si je reprend votr e code mais que les
macros situ�es dans module1 de "exemple.xls" se situent en rï ¿½alit� dans le
module1 du fichier "reference.xla" et ne peuvent donc etre appel� es sauf quand
le classeur reference.xla est ouvert...
J'ai essay� d'utiliser l'appel dans chaque macros du module1 de " exemple.xls"
vers l'autre module1 de "reference.xla" o� est situ� le c ode mais cela reste
incompatible.. Il cherche les macros dans le module1 pr�sent soit en l'occurence
celui de "exemple.xls" et si il ne les trouvent pas il envoie toujours
� Erreur de complilation : Sub ou Function non d�finie. �. Il faudrait donc lui
dire d'appeler une macro dans un module d'un autre fichier..
Je cherche juste ca.
Avatar
raphael-diaz
raphael-diaz a écrit le 09/02/2011 à 13h49 :
LSteph a écrit le 09/02/2011 à 12h22 :
..la preuve si tu veux vérifier mets ton code ainsi adapté dans
un
nouveau projet et teste:

'dans Module1 obligatoirement un module satandard du même classeur
Sub macroOui()
MsgBox "Existe"
End Sub
Sub macroNon()
MsgBox "N'existe pas"
End Sub



'dans le privatemodule de Feuil1
Private Sub Worksheet_Deactivate()
'Verifie si le fichier referentiel est bien présent
Dim Fichier As String
Fichier = Dir("C:Program FilesMicrosoftOfficeOFFICE11XLSTART
reference.xla")

If Fichier <> "" Then 'le fichier existe
Call macroOui
Else 'le fichier n'existe pas
Call macroNon
Exit Sub
End If
End Sub

'LSteph



Merci une derniere question en vérité. Si je reprend votre code
mais que les macros situées dans module1 de "exemple.xls" se
situent en réalité dans le module1 du fichier
"reference.xla" et ne peuvent donc etre appelées sauf quand le
classeur reference.xla est ouvert...
J'ai essayé d'utiliser l'appel dans chaque macros du module1 de
"exemple.xls" vers l'autre module1 de "reference.xla"
où est situé le code mais cela reste incompatible.. Il cherche
les macros dans le module1 présent soit en l'occurence celui de
"exemple.xls" et si il ne les trouvent pas il envoie toujours
« Erreur de complilation : Sub ou Function non définie. ».
Il faudrait donc lui dire d'appeler une macro dans un module d'un autre
fichier..
Je cherche juste ca.


Solution trouvée Application.Run "referecence.xla!DeleteVersionItemsInPopup", parametre1, etc...
1 2