Macro qui ne s'éxécute pas si appelée par une autre...

Vincenzozo

XLDnaute Nouveau
Bonjour à tous,

Voilà, je viens vers vous, car j'ai une macro qui se comporte bizarrement.
En effet, lorsque je l'exécute individuellement, elle fonctionne nickel, mais lorsque je l'appelle via une autre macro, elle boude et ne fait rien...

Je vous mets les 2 codes ci dessous!
La première macro est une macro de validation, si l'utilisateur clique sur oui, alors les 3 autres s'exécutent...

Merci de votre aide.

Code:
Sub message()
'
' message Macro
'

'
Dim Msg, Style, Title, MyString
Msg = "Souhaitez-vous continuer?"    ' Définit le message.
Style = vbYesNo + vbCritical    ' Définit les boutons.
Title = "Validation requise"    ' Définit le titre.
Response = msgbox(Msg, Style, Title)
If Response = vbYes Then    ' L'utilisateur a choisi Oui.
    MyString = "Oui"    ' Effectue une action.
    Application.Run "'feuille journaliere.xls'!Backup"
    Application.Run "'feuille journaliere.xls'!Cleaning"
    Application.Run "'feuille journaliere.xls'!supprlignesvides"
    Sheets("feuille journaliere").Select
    Range("B2:J2").Select

Else    ' L'utilisateur a choisi Non.
    MyString = "Non"    ' Effectue une action.
    Sheets("feuille journaliere").Select
    Range("B2:J2").Select

End If
    Sheets("feuille journaliere").Select
    Range("B2:J2").Select
End Sub[B][/B]

Code:
Sub supprlignesvides()
'
' supprlignesvides Macro
'

'
Dim maplage As Range
Set maplage = Range("a1")
Sheets("Synthèse").Select
While Range(maplage.End(xlDown).Address(rowabsolute:=False, columnabsolute:=False)).Value <> ""
Set maplage = Range(maplage.End(xlDown).Address(rowabsolute:=False, columnabsolute:=False))
Wend
Dim derligne As Long
derligne = maplage.Row
Dim compteur As Long
For compteur = derligne To 1 Step -1
If Range("a" & compteur).Value = "" Then
Rows(compteur).Delete
End If
Next compteur
End Sub
 

Luki

XLDnaute Accro
Re : Macro qui ne s'éxécute pas si appelée par une autre...

salut,

Essaie simplement (si toutes les macros sont dans le même classeur):

call Backup
call Cleaning

etc...

plus simple encore :

backup
cleanning

etc...



Regardes et dis nous
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro qui ne s'éxécute pas si appelée par une autre...

Bonsoir Vincenzozo, Luki, bonsoir le forum,

Je pense qu'il y a confusion entre les différents onglets si tu lances les deux macros à la suite. Je me suis permis de modifier ton code mais certains points restent flous. D'abord la variable MyString ? J'imagine que tu l'utilises ailleurs mais comme elle est déclarée au niveau module...??

Au fait en parlant de déclaration de variables,
Code:
Dim MaVariableUn, MaVariableDeux, MaVariableTrois As String
Spécifie seulement la troisième comme Texte. Tu peux déclarer plusieurs variables dans la même ligne mais tu dois spécifier le type pour chacune d'entre elles sinon elles prennent le type Variant (par défaut), qui est gourmand en mémoire... Ìl n'est pas nécessaire non plus d'utiliser tant de variables qui sont stockées et donc prennent de la mémoire pour rien.

Ensuite, pourquoi sélectionner l'onglet feuille journaliere et sa plage B2:J2 si après tu passes à l'onglet Synthèse ?
Si tu n'utilises jamais la première macro seule, tu pourrais supprimer ces lignes :
Code:
Sheets("feuille journaliere").Select
ActiveSheet.Range("B2:J2").Select

ton code modifié :
Code:
Sub message()
'
' message Macro
'
'
Dim MyString As String
 
If MsgBox("Souhaitez-vous continuer?", vbYesNo + vbCritical, _
    "Validation requise") = vbOK Then ' L'utilisateur a choisi Oui.
    MyString = "Oui"    ' Effectue une action.
    Application.Run "'feuille journaliere.xls'!Backup"
    Application.Run "'feuille journaliere.xls'!Cleaning"
    Application.Run "'feuille journaliere.xls'!supprlignesvides"
Else    ' L'utilisateur a choisi Non.
    MyString = "Non"    ' Effectue une action. ??
End If
    Sheets("feuille journaliere").Select
    ActiveSheet.Range("B2:J2").Select
End Sub
Code:
Sub supprlignesvides()
'
' supprlignesvides Macro
'
'
Dim derligne As Long
Dim compteur As Long
With Sheets("Synthèse")
    .Select
    derligne = .Range("A65536").End(xlUp).Row
    For compteur = derligne To 1 Step -1
        If .Range("a" & compteur).Value = "" Then .Rows(compteur).Delete
    Next compteur
End With
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 204
Messages
2 086 198
Membres
103 153
dernier inscrit
SamirN