Msgbox pour confirmer exécution

dn35

XLDnaute Occasionnel
Bonjour le forum !!!

C'est sous le soleil breton (et oui et oui c'est possible) que je viens vous faire une petite visite après quelques semaines d'absence (ah boulot boulot ...)
En plus j'arrive avec un problème tout bête : je sais que la solution est là devant moi mais y'a rien à faire je ne la trouve pas.

Je suis en train d'automatiser la création d'un nouveau fichier vierge à partir d'un fichier en cours d'utilisation par exemple lors du démarrage d'une nouvelle année. (en effet, ce fichier étant en constante évolution, avoir un fichier vierge qui servirait de base ne servirait à rien car il ne serait jamais à jour)
J'ai donc créé un bouton qui lance une procédure (très fastidieuse et compliquée vu mon faible niveau niveau en vba). Le problème se situe au tout début du code (ça commence bien, j'ai pas fini de vous enquiquiner avec ça j'ai l'impression) lorsque je veux ajouter une étape de confirmation. Je vous copie ci-dessous une partie du code en espérant que cela suffira. Je ne vous met pas tout car je vous connais, vous etes capable de transformer mon piteux travail en super bombe xldienne !!! :p:p:p
non sans rire, j'essaie de me débrouiller un max toute seule alors soyez indulgents :eek::eek::eek:

Ci besoin de plus d'info n'hésitez pas !!! surtout que je risque de revenir avec d'autres questions ... :rolleyes:

Code:
Private Sub CommandButton1_Click()
Dim nom As String

[COLOR="Green"]'Demande confirmation avant exécution de la procédure[/COLOR]
res = MsgBox("L'exécution de cette commande génèrera un nouveau fichier vierge pour le suivi des consommations en produits de nettoyage." & Chr(13) & " Merci de ne réaliser cette manipulation que lorsqu'il est necéssaire de créer un nouveau fichier : au début d'une nouvelle année par exemple." & Chr(10) & " ATTENTION il est impératif de créer ce nouveau fichier après le 1er janvier de la nouvelle année." & Chr(10) & "Voulez-vous lancer la procédure ?", vbCritical, "merci de valider avant exécution de la procédure", 4)
If res = vbYes Then

[COLOR="green"]'ajout d'une feuille temporaire pour copier les valeurs à reporter sur l'année suivante[/COLOR]
Sheets.Add after:=Sheets(Sheets.Count)
Sheets("feuil1").Select
Sheets("feuil1").Name = "temporaire"
[COLOR="green"]...[/COLOR]

seulement voilà au lancement de la procédure, le message suivant apparait :
erreur d'exécution '5'
Argument ou appel de procédure incorrect
J'imagine que c'est tout bête ... si pouviez éclairer ma lenterne ...

Merci d'avance et bonne journée à tous

Dn
 

Staple1600

XLDnaute Barbatruc
Re : Msgbox pour confirmer exécution

Bonjour dn35, le fil, le forum

Chez moi (en Bretagne sans soleil)


Cela fonctionne ainsi modifié

Code:
Sub a_test()
Dim res
'Demande confirmation avant exécution de la procédure
res = MsgBox("L'exécution de cette commande génèrera un nouveau fichier vierge pour le suivi des consommations en produits de nettoyage." & Chr(13) & " Merci de ne réaliser cette manipulation que lorsqu'il est necéssaire de créer un nouveau fichier : au début d'une nouvelle année par exemple." & Chr(10) & " ATTENTION il est impératif de créer ce nouveau fichier après le 1er janvier de la nouvelle année." & Chr(10) & "Voulez-vous lancer la procédure ?", vbCritical, "merci de valider avant exécution de la procédure")

If res = 1 Then
'ajout d'une feuille temporaire pour copier les valeurs à reporter sur l'année suivante
Sheets.Add.Name = "Temporaire"
Sheets("Temporaire").Move After:=Sheets(Sheets.Count)
Else
End
End If
End Sub
EDITION: je te propose cette façon de faire pour rendre ta msgbox plus lisible
j'ai choisi un OUI/NON plutôt qu'un OK car si la feuille existe déjà , il y aura erreur
Code:
Sub a_test_v2()
Dim res, lmes$, titre$
'Demande confirmation avant exécution de la procédure
lmes = "L 'exécution de cette commande génèrera un nouveau fichier vierge pour le suivi des consommations en produits de nettoyage." & Chr(13)
lmes = lmes & " Merci de ne réaliser cette manipulation que lorsqu'il est necéssaire de créer un nouveau fichier : au début d'une nouvelle année par exemple." & Chr(10)
lmes = lmes & " ATTENTION il est impératif de créer ce nouveau fichier après le 1er janvier de la nouvelle année." & Chr(10)
lmes = lmes & "Voulez-vous lancer la procédure ?"
titre = "merci de valider avant exécution de la procédure"
res = MsgBox(lmes, vbCritical + vbYesNo, titre)
If res = vbYes Then
'ajout d'une feuille temporaire pour copier les valeurs à reporter sur l'année suivante
Sheets.Add.Name = "Temporaire"
Sheets("Temporaire").Move After:=Sheets(Sheets.Count)
Else
End
End If
End Sub
 
Dernière édition:

dn35

XLDnaute Occasionnel
Re : Msgbox pour confirmer exécution

Salut Stapple1600

Et merci ! C'était effectivement assez simple mais je ne savais pas comment introduire la variable "res"

Quant au soleil ... rennes n'est pas si loin (mon boulot est au bord du couesnon) et les nuages filent si vite qu'il va bientôt nous quitter ici aussi !!!
(Mais avec un coin de ciel bleu, on est heureux !)

merci encore et bonne journée

Edit : Je vois ton edition au moment où je poste ma réponse : merci pour l'astuce, effectivement cela rendra la procédure plus sûre ! (que ferais-je sans vous tous !)
 
Dernière édition:

dn35

XLDnaute Occasionnel
Re : Msgbox pour confirmer exécution

re tous

Je reste sur le fil car cela concerne la même procédure. Si cela n'est pas pertinent je m'en excuse d'avance ... :(

mon problème concerne cette fois-ci des éléments (titres de graphiques) à renommer ou des contenus de cellules à modifier dans le nouveau fichier. Comme c'est le fichier en cours d'utilisation qui servira de base pour le nouveau fichier j'ai définit des noms de cellules comme suit :
ANNEE = nouvelle année par exemple 2011
ANNEEN = année N-1

Et j'ai tenté sans succès de lancer la procédure comme suit :

Code:
Feuil3.Range("O5").Value = "moyenne" & ANNEE
ou encore
Code:
ActiveChart.ChartTitle.Text = "consommations mensuelles" & ANNEE

Si vous pouviez m'indiquer le chemin ...
Merci d'avance

Dn

ci dessous le bout de code complet :
Code:
 Feuil3.Select
    ActiveSheet.Unprotect
    Feuil3.Range("A1").Value = InputBox("Veuillez renommer l'onglet")
    Application.ScreenUpdating = False
    ActiveSheet.Name = Feuil3.Range("A1")
    Feuil3.Range("O5").Value = "moyenne" & [COLOR="Red"]ANNEE[/COLOR]
    Feuil3.Range("A11").Value = "moyenne" & [COLOR="red"]ANNEEN1[/COLOR]
    Feuil3.Range("B11").Value = [COLOR="red"]consoN1_moyenne[/COLOR]
    ActiveSheet.ChartObjects("Graphique 3").Activate
    ActiveChart.ChartTitle.Text = "consommations mensuelles" & [COLOR="red"]ANNEE[/COLOR]
    ActiveSheet.Protect

Les noms en rouge sont les noms définis dans le classeur pour les valeurs devant être reportées lors de la création du nouveau classeur. Ces valeurs ont étés importées et nommées dans l'onglet temporaire créé à cet effet. L'opération d'importation, puis la définition du nom se sont déroulées avec succès dans la procédure
 

Dull

XLDnaute Barbatruc
Re : Msgbox pour confirmer exécution

Salut DN35, Jean Marie:), le Forum

pas sur mais si tu dis que les cellules sont nommées

Les noms en rouge sont les noms définis dans le classeur pour les valeurs devant être reportées lors de la création du nouveau classeur. Ces valeurs ont étés importées et nommées dans l'onglet temporaire créé à cet effet. L'opération d'importation, puis la définition du nom se sont déroulées avec succès dans la procédure
essaye plutôt ça

Code:
 Feuil3.Select
    ActiveSheet.Unprotect
    Feuil3.Range("A1").Value = InputBox("Veuillez renommer l'onglet")
    Application.ScreenUpdating = False
    ActiveSheet.Name = Feuil3.Range("A1")
    Feuil3.Range("O5").Value = "moyenne" & [ANNEE][COLOR=SeaGreen] 'ou Range("ANNEE")[/COLOR]
    Feuil3.Range("A11").Value = "moyenne" & [ANNEEN1][COLOR=SeaGreen] 'ou Range("ANNEEN1")[/COLOR]
    Feuil3.Range("B11").Value = [consoN1_moyenne][COLOR=SeaGreen] 'ou Range("consoN1_moyenne")[/COLOR]
    ActiveSheet.ChartObjects("Graphique 3").Activate
    ActiveChart.ChartTitle.Text = "consommations mensuelles" & [ANNEE] [COLOR=SeaGreen]'ou Range("ANNEE")[/COLOR]
    ActiveSheet.Protect
A tester

Chez moi (en Bretagne sans soleil)
(Mouarfff... :Dheu...désolé...Jecompatis):eek: ;)

Bonne Journée
 
Dernière édition:

dn35

XLDnaute Occasionnel
Re : Msgbox pour confirmer exécution

Salut Dull

C'était si simple ... mais je ne connaissais pas !!! :D
Ca fonctionne nickel merci beaucoup !

Bonne soirée

DN

PS : près de la frontière normande le soleil pointe son nez : ira t-il jusqu'à Rennes ? :confused:
 

Lii

XLDnaute Impliqué
Re : Msgbox pour confirmer exécution

Bon soir,

souci de lisibilité ? voir première partie,
souci de concision ? voir seconde partie :
Code:
Sub a_test_v2()
  Dim res, lmes$, titre$
  'Demande confirmation avant exécution de la procédure
  lmes = "L 'exécution de cette commande génèrera un nouveau fichier vierge pour le suivi des consommations en produits de nettoyage." & Chr(10) & Chr(10)
  lmes = lmes & " Merci de ne réaliser cette manipulation que lorsqu'il est necéssaire de créer un nouveau fichier : au début d'une nouvelle année par exemple." & Chr(10) & Chr(10)
  lmes = lmes & " ATTENTION il est impératif de créer ce nouveau fichier après le 1er janvier de la nouvelle année." & Chr(10) & Chr(10)
  lmes = lmes & "Voulez-vous lancer la procédure ?"
  titre = "merci de valider avant exécution de la procédure"

  If MsgBox(lmes, vbQuestion + vbYesNo, titre) = vbNo Then Exit Sub
  Sheets.Add.Name = "Temporaire"
  Sheets("Temporaire").Move After:=Sheets(Sheets.Count)

'----------> seconde partie
  With Feuil3
    .Unprotect
    .Name = InputBox("Veuillez renommer l'onglet")
    .[O5].Value = "moyenne" & [ANNEE]
    .[A11].Value = "moyenne" & [ANNEEN1]
    .[B11] = [consoN1_moyenne]
    .ChartObjects("Graphique 3").Activate
    ActiveChart.ChartTitle.Text = "consommations mensuelles" & [ANNEE]
    .Protect
  End With
End Sub
 

Discussions similaires

Réponses
2
Affichages
99