Ne rien faire si condition macro pas respectee

sim

XLDnaute Occasionnel
Bonjour a tous!!

J'ai creer une Macro qui prepare la mise a jour de mes donnees par un simple bouton de commande.

En voici le Code:

Private Sub acceuil2_Click()
Application.DisplayAlerts = False
Sheets("FX").Delete
Sheets("Brute").Select
ActiveWorkbook.Worksheets("Brute").Cells.ClearContents
End Sub

Malheureusement, si l'utilisateur se trompe, et click sur le bouton alors que FX n'existe pas cela ouvre le Debugueur. J'aimerai tout simplement que si FX n'existe pas, alors ne rien faire et afficher un Message: "FX n'existe pas, veuillez respecter les etapes de mise a jour."

Et j'ai essayer plein de trucs mais rien n'y fais. Il y aurait il une ame charitable qui voudrais bien m'aider??

Merci d'avance.

Sim
 

Pierrot93

XLDnaute Barbatruc
Re : Ne rien faire si condition macro pas respectee

Bonjour,

essaye ceci :
Code:
Private Sub acceuil2_Click()
Dim ws As Worksheet
On Error Resume Next
Set ws = Sheets("FX")
If Err.Number <> 0 Then MsgBox "la feuille n'existe pas... ": Exit Sub
On Error GoTo 0
Application.DisplayAlerts = False
Sheets("FX").Delete
Sheets("Brute").Select
ActiveWorkbook.Worksheets("Brute").Cells.ClearContents
End Sub

bonne journée
@+
 

JNP

XLDnaute Barbatruc
Re : Ne rien faire si condition macro pas respectee

Bonjour le fil :),
Autre proposition :p...
Code:
Private Sub acceuil2_Click()
Application.DisplayAlerts = False
On Error GoTo GestionErreur
Sheets("FX").Delete
On Error GoTo 0
Sheets("Brute").Select
ActiveWorkbook.Worksheets("Brute").Cells.ClearContents
Application.DisplayAlerts = True
Exit Sub
GestionErreur:
MsgBox "FX n'existe pas, veuillez respecter les etapes de mise a jour.", vbCritical + vbOKOnly, "ATTENTION !"
End Sub
Pour info, j'ai remis en route les alertes en fin de macro, ça me parait plus prudent :rolleyes:...
Bonne journée :cool:
Ajout : Salut Géo, même raisonnement ;)...
 
Dernière édition:

GeoTrouvePas

XLDnaute Impliqué
Re : Ne rien faire si condition macro pas respectee

Bonjour,

Je ne connais pas toutes les étapes de ta mise à jour mais 2 solutions me semblent possibles :

1) Avec une gestion d'erreur :

Code:
Private Sub acceuil2_Click()
    Application.DisplayAlerts = False
    On Error Goto FeuilleFXAbsente:
    Sheets("FX").Delete
    On Error Resume 0
    Sheets("Brute").Select
    ActiveWorkbook.Worksheets("Brute").Cells.ClearContents
    Exit Sub

FeuilleFXAbsente:
    Msgbox "FX n'existe pas, veuillez respecter les etapes de mise a jour"

End Sub

2) Avec une boucle pour vérifier que la feuille existe :

Code:
Private Sub acceuil2_Click()
    Application.DisplayAlerts = False
    For i = 1 to sheets.Count
        If Sheets(i).Name = "FX" Then Goto FeuilleFXPresente
    Next
    Msgbox "FX n'existe pas, veuillez respecter les etapes de mise a jour"
    Exit Sub

    FeuilleFXPresente:
    Sheets("FX").Delete
    Sheets("Brute").Select
    ActiveWorkbook.Worksheets("Brute").Cells.ClearCont ents
End Sub

Je ne sais pas si c'est volontaire ou pas mais pense à remettre le DisplayAlerts à True en fin de procédure.

Edit : Bonjour Pierrot, Bonjour JNP !
 

sim

XLDnaute Occasionnel
Re : Ne rien faire si condition macro pas respectee

Bonjour a vous 3, le forum!

Lol, alors j'ai l'embarras du choix! Merci beaucoup.

J'ai enleve le DisplayAlerts à True en fin de procédure car je ne voulais pas que excel me demande la permission de supprimer FX....

Alors du coup, je ne sais que choisir.....

Merci en tout cas, vous etes geniaux!!

Sim
 

JNP

XLDnaute Barbatruc
Re : Ne rien faire si condition macro pas respectee

Re :),
J'ai enleve le DisplayAlerts à True en fin de procédure car je ne voulais pas que excel me demande la permission de supprimer FX....
En fin de procédure, FX est déjà supprimée :rolleyes:...
Par contre, tu prends le risque de ne pas avoir d'alerte ensuite :eek:...
Il semblerait que le champs d'application de DisplayAlerts ne dépasse pas la sub, mais fais attention, ce n'est pas le cas de tous, EnableEvents par exemple reste déconnecté tant qu'il n'est pas rétabli :p...
Bon courage :cool:
 

GeoTrouvePas

XLDnaute Impliqué
Re : Ne rien faire si condition macro pas respectee

Effectivement JNP, exactement le même raisonnement à la différence prêt que je me suis planté sur le "On Error Goto O" (j'ai mis Resume à la place du Goto, ça ne risque pas de marcher).
 

sim

XLDnaute Occasionnel
Re : Ne rien faire si condition macro pas respectee

Re,

Histoire que vous comprenniez mieux, et surtout si jamais vous voyer une grosse erreur(d'un point de vue gestion des erreur!! lol)

PS: la feuille autrefois appelee Brute est renomme GMRB_Raw_Data

Etape de mise a jour 1

Private Sub acceuil_Click()
Sheets("GMRB_Raw_Data").Copy Before:=Sheets("Markets_PI")
On Error Resume Next 'pour le cas où la feuille "FX" existerait
ActiveSheet.Name = "FX"
If Err.Number <> 0 Then
Application.DisplayAlerts = 0
ActiveSheet.Delete
Application.DisplayAlerts = 1
Sheets("FX").Activate
Exit Sub
End If
On Error GoTo 0
supp
Workbook.RefreshAll
Sheets("Current_market").Activate
End Sub

A ce moment la la personne responsable de la mise a jour colle en GMRB_Raw_Data le nouveau tableau

Ensuite elle click sur le bouton dont le code est

Private Sub acceuil2_Click()
Application.DisplayAlerts = False
For i = 1 To Sheets.Count
If Sheets(i).Name = "FX" Then GoTo FeuilleFXPresente
Next
MsgBox "FX does not exist, please follow every step for the updating"
Exit Sub

FeuilleFXPresente:
Sheets("FX").Delete
Sheets("GMRB_Raw_Data").Select
ActiveWorkbook.Worksheets("GMRB_Raw_Data").Cells.ClearContents
End Sub

C'est celui que je comprend le mieux! Merci quand meme aux autres!! :)
Donc voila en quoi consiste la mise a jour....

Trouvez vous cela risquee, si oui que dois je faire pour betonner le processus??

Merci bcp bcp bcp!! :)
 
Dernière édition:

sim

XLDnaute Occasionnel
Re : Ne rien faire si condition macro pas respectee

Re,

Merci, mais en fait lors de mes test j'avais des erreur parceque tout mes Classeurs s'appelaient ThisWorkbook, alors pour ne plus avoir d'incomprehension de la part d'excel j'ai renomme le classeur Workbook....donc c'etait volontaire.

A part ca cela vous semle correct et pas trop sujet a des erreur?!

PS: Supp est une macro travaillant FX
 

Pierrot93

XLDnaute Barbatruc
Re : Ne rien faire si condition macro pas respectee

Re,

l'objet "ThisWorkbook" représente le classeur dans lequel s'execute le code dans lequel s'exécute le code.... "workbook" est également un objet et représente un classeur... en l'état ta ligne de code ne peut que provoquer une erreur.... si tuveux agir sur un classeur particulier il faut coder ainsi :

Code:
Workbooks("nomduclasseur.xls").RefreshAll
 

sim

XLDnaute Occasionnel
Re : Ne rien faire si condition macro pas respectee

Re,

alors si j'ai bien compris, le fait d'avoir renomme mon classeur dans l'explorateur de Projet dans l'editeur VBA ne change rien?!

De toute facon j'ai coder comme ca parce que c'est tout ce que j'ai trouver mais cette ligne de code ne me sert qu'a mettre a jour les tcd dans la feuille Current_market au moment ou je click sur le bouton acceuil2.

Du coup dois-je utiliser ton code ( Workbooks("nomduclasseur.xls").RefreshAll) ??

qui dans mon cas serait : Workbooks("Workbook.xls").RefreshAll ??

Merci bcp pour le tps consacre

sim
 

Pierrot93

XLDnaute Barbatruc
Re : Ne rien faire si condition macro pas respectee

Non, ce n'est pas comme une feuille, en l'état fera référence au composant visualbasic, d'autre part utiliser un mot reservé vba (workbook), qui de plus est un type d'objet, risque de te poser des problèmes...
 

sim

XLDnaute Occasionnel
Re : Ne rien faire si condition macro pas respectee

Pierrot,

Je suis desole mais la j'ai perdu le fil.

Alors je vais essayer de t'expliquer avec des mots a moi...

Mon fichier, (tel qui l'est enregistrer s'appel 17.03_version_propre.xls)

Ensuite, apres je ne sais plus quelle operation j'ai du renomme dans l'editeur VBA grace a Proprietes le nom du Classeur ( petite icone tout en bas des differentes feuilles du classeur dans l'explorateru de Projet VBA).

Je sais pas si je suis tres clair...dsl

Du coup, peut etre la question sera plus simple posee ainsi:

Quelle ligne de code dois je mettre dans le code du bouton acceuil pour que mes TCD se trouvant en Current_market soit mis a jour??

Meerci :)
 

Statistiques des forums

Discussions
312 683
Messages
2 090 910
Membres
104 693
dernier inscrit
azizou900