Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Problème de syntaxe d'une macro

Orson83

XLDnaute Impliqué
Bonjour à tous,
J'ai réalisé une macro qui ne fonctionne pas correctement. Désolé pour mon niveau en VBA
Si quelqu'un pouvait jeter un coup d'oeil, ce serait sympa
Pour faire simple, je cherche à faire une action dans la feuille 2 qui est Very Hidden à l'ouverture du classeur, je fais mon action à l'intérieur, puis je la remets Very Hidden.
Les actions consistent à renseigner la cellule C10 (ce sera automatique) avec 2 messages, message 1 si la cellule est complétée, message 2 si elle est vide. J'ai inséré aussi une gestion de beug avaec On Error GoTo Fin.

VB:
Option Explicit

Dim Sh As Worksheet

Private Sub Workbook_Open()
On Error GoTo Fin ' Gère une erreur d'exécution macro
Sheets("Feuil2").Visible = xlSheetVisible
  With Sheets("Feuil2")
    If Range("C10") = "" Then
      .Range("C10") = "123"
    If Range("C10") = "" Then
        MsgBox "Cette opération a échoué. Veuillez contacter l'éditeur."
    Else
      MsgBox "Opération réalisée avec succès. Merci de transmettre ce fichier à l'éditeur."
    If Sheets("Feuil2").Visible = True
    Alors
        Sheets("Feuil2").Visible = xlSheetVeryHidden
    End If
    End If
  End With
  ' Si une erreur s'est produite...
Fin:
  MsgBox "Erreur d'éxécution. Veuillez paramétrer les macros sur : Désactiver toutes les macros avec notification."
End Sub

Merci pour votre aide.
Tchotchodu31
 
Solution
@Tchotchodu31, Phil,

coucou François, ton fichier en retour.

code VBA de ThisWorkbook :

VB:
Option Explicit

Private Sub Workbook_Open()
  On Error GoTo Fin ' Gère une erreur d'exécution macro
  ActiveWindow.DisplayWorkbookTabs = False ' N'affiche pas le nom des onglets
  With Worksheets("Feuil2")
    .[C10] = GetSerialNumber(Environ("homedrive")) ' cette cellule est remplie par un procédé automatique
    If .[C10] = "" Then
      MsgBox "Cette opération a échoué. Veuillez contacter l'éditeur."
    Else
      MsgBox "Opération réalisée avec succès. Merci de transmettre ce fichier à l'éditeur."
    End If
  End With
  ActiveWindow.DisplayWorkbookTabs = True ' Affiche le nom des onglets
Exit Sub
  ' Si une erreur s'est produite...

Orson83

XLDnaute Impliqué
Re

Si la cellule C1 est vide le message est :
"Cette opération a échoué. Veuillez contacter l'éditeur."
Si il y a n'importe qu'elle valeur, la condition de départ n'est jamais rempli

et donc elle ne sert à rien

@Phil69970
Cette cellule C10 sera remplie (ou pas) à l'ouverture du fichier par un procédé automatique.
Si le procédé fait bien son travail, la cellule sera remplie et msgbox "Opération réalisée avec succès". A contrario, si le procédé ne parviens à récupérer le numéro à l'ouverture d'Excel, alors la cellule sera vide et msgbox "Cette opération a échoué".
La fonction de cette macro est de récupérer une info dans l'ordi du client.
 

Phil69970

XLDnaute Barbatruc
Re:
C'est ce que tu veux ?

A l'ouverture du fichier :
1er cas :
C10 est vide alors message "Pas d'autorisation".
2eme cas :
C10 est remplie alors :
a) c'est bien rempli alors message "Cette opération a réussi tout est ok".
b) c'est mal rempli alors message "Cette opération a échoué".
c) Bug lors du contrôle "Pb veuillez contacter Tchotchodu31".

@Phil69970
 

Orson83

XLDnaute Impliqué
Oui, c'est bien ça
 

Phil69970

XLDnaute Barbatruc
Re
Et comment tu passes du 1er cas au 2eme cas

Car si à l'ouverture tu dis à excel si c'est vide pas d’autorisation (1er cas)
quand tu l'ouvres la 2eme fois c'est toujours vide donc toujours pas d'autorisation....

Il manque des précision ici....
*Et si tu lui dit si c'est vide tu remplis C10 comme il faut alors il suffit de l'ouvrir 2 fois pour que tout marche...

@Phil69970
 

Orson83

XLDnaute Impliqué
Après avoir ouvert Excel donc le 1er cas (récupération du numéro), l'utilisateur enregistrera le fichier, du coup, dans le 2ème cas la cellule sera remplie.
Si dans le 1er cas la cellule n'était pas remplie (problème pour récupérer le numéro), effectivement, malgré l'enregistrement, le message sera toujours "Cette opération a échoué".
 

Phil69970

XLDnaute Barbatruc
Re

Je te propose une autre façon de faire en tenant compte de nos echanges
Tu peux modifier les messages si tu le veux .....
VB:
Private Sub Workbook_Open()
On Error GoTo Fin ' Gère une erreur d'exécution macro
With Sheets("Feuil2")
    Select Case .Range("C10").Value
    Case ""
        .Range("C10") = "123" ' cette cellule sera remplie par un procédé automatique
        MsgBox "Opération réalisée avec succès. Merci de transmettre ce fichier à l'éditeur."
    Case 123
        MsgBox "Opération réalisée avec succès. Merci de transmettre ce fichier à l'éditeur."
    Case Else
        MsgBox "Beurk"
    End Select
End With

  ' Si une erreur s'est produite...
Fin:
    MsgBox "Erreur d'éxécution. Veuillez paramétrer les macros sur : Désactiver toutes les macros avec notification."
End Sub

*A noter que pour ce code pas besoin de voir la feuil2

@Phil69970
 

Orson83

XLDnaute Impliqué
Phil69970, le forum,
J'ai testé ce code dans tous les sens mais que la cellule C10 soit remplie ou vide il envoi toujours le message "opération réalisé avec succès". (J'ai vu l'erreur après Case 123, même message).
Je pense qu'il faudrait procéder en 2 phases.
Ex : phase 1, je remplie la cellule. Phase 2, je vais voir si la cellule est remplie (boucle ?), alors message 1 ou message 2.
J'envoie mon fichier final destiné aux utilisateurs.
PS : neutraliser la fonction "GetSerialNumber = Serial" dans le Module 1 pour mettre en panne
La fonction est en panne pour le test
 

Pièces jointes

  • Macro test3.xlsm
    23.7 KB · Affichages: 7

soan

XLDnaute Barbatruc
Inactif
Bonjour @Tchotchodu31, Phil,

tu as écrit : « que la cellule C10 soit remplie ou vide il envoie toujours le message "opération réalisée avec succès" » ; ben c'est génial ! de quoi tu t'plains ? tu gagnes toujours !!! si j'avais autant d'chance que toi au loto ou au tiercé, j'serais riche !

soan
 

Orson83

XLDnaute Impliqué
Salut soan,
Je commence à comprendre ton esprit taquin exit la variable Environ()
Ceci dit, c'est pas faux ! Mais le problème c'est que je n'ai rien à gagner.
Je veux juste que mon client me renvoie le fichier complété en étant sûr que tout c'est bien passé
 

Phil69970

XLDnaute Barbatruc
Tchotchodu31, Soan

As tu bien lu mon message #21
Tu peux modifier les messages si tu le veux .....

Normal c'est le même message inscrit !
J'ai testé ce code dans tous les sens mais que la cellule C10 soit remplie ou vide il envoi toujours le message "opération réalisé avec succès". (J'ai vu l'erreur après Case 123, même message).
As tu essayé avec un message différent ?
Non .... donc fais l'essaie ....

VB:
Private Sub Workbook_Open()
On Error GoTo Fin ' Gère une erreur d'exécution macro
With Sheets("Feuil2")
    Select Case .Range("C10").Value
    Case ""
        .Range("C10") = "123" ' cette cellule sera remplie par un procédé automatique
        MsgBox "Je suis ici." '<== Tu mets ce que tu veux
    Case 123
        MsgBox "Maintenant je suis là" '<== Et la aussi tu mets ce que tu veux
    Case Else
        MsgBox "Beurk"  '<== Et encore la aussi tu mets ce que tu veux
    End Select
End With

  ' Si une erreur s'est produite...
Fin:
    MsgBox "Erreur d'éxécution. Veuillez paramétrer les macros sur : Désactiver toutes les macros avec notification."
End Sub

*J'ai juste changé les messages
@Phil69970
 

Orson83

XLDnaute Impliqué
Pourquoi "Case 123" ? Si c'est écrit en dur ça ne pourra pas marcher ?
 

soan

XLDnaute Barbatruc
Inactif
@Tchotchodu31, Phil,

coucou François, ton fichier en retour.

code VBA de ThisWorkbook :

VB:
Option Explicit

Private Sub Workbook_Open()
  On Error GoTo Fin ' Gère une erreur d'exécution macro
  ActiveWindow.DisplayWorkbookTabs = False ' N'affiche pas le nom des onglets
  With Worksheets("Feuil2")
    .[C10] = GetSerialNumber(Environ("homedrive")) ' cette cellule est remplie par un procédé automatique
    If .[C10] = "" Then
      MsgBox "Cette opération a échoué. Veuillez contacter l'éditeur."
    Else
      MsgBox "Opération réalisée avec succès. Merci de transmettre ce fichier à l'éditeur."
    End If
  End With
  ActiveWindow.DisplayWorkbookTabs = True ' Affiche le nom des onglets
Exit Sub
  ' Si une erreur s'est produite...
Fin:
  MsgBox "Erreur d'éxécution. Veuillez paramétrer les macros sur : Désactiver toutes les macros avec notification."
End Sub

pas besoin de Select Case ; un simple test If .. Then .. Else .. End If suffit !

attention : tu n'as pas besoin de rendre "Feuil2" visible pour lire le contenu de la cellule C10 ! donc c'est inutile de l'afficher puis de la masquer ensuite !

soan
 

Pièces jointes

  • Macro test3.xlsm
    20.4 KB · Affichages: 3

soan

XLDnaute Barbatruc
Inactif
@Tchotchodu31, Phil,

petite amélioration du fichier précédent.

VB:
Option Explicit

Private Sub Workbook_Open()
  On Error GoTo Fin ' Gère une erreur d'exécution macro
  ActiveWindow.DisplayWorkbookTabs = False ' N'affiche pas le nom des onglets
  With Feuil2.[C10] ' attention : ce Feuil2 est le CodeName de la feuille !
    .Value = GetSerialNumber(Environ("homedrive")) ' cette cellule est remplie par un procédé automatique
    If .Value = "" Then
      MsgBox "Cette opération a échoué. Veuillez contacter l'éditeur."
    Else
      MsgBox "Opération réalisée avec succès. Merci de transmettre ce fichier à l'éditeur."
    End If
  End With
  ActiveWindow.DisplayWorkbookTabs = True ' Affiche le nom des onglets
  Exit Sub
' Si une erreur s'est produite...
Fin:
  MsgBox "Erreur d'éxécution. Veuillez paramétrer les macros sur : " _
    & "Désactiver toutes les macros avec notification."
End Sub

soan
 

Pièces jointes

  • Macro test3.xlsm
    20.6 KB · Affichages: 5

Discussions similaires

Réponses
6
Affichages
394
Réponses
3
Affichages
328
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…