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...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
1- If Range("C10") = "" Then manque le point pour référer à Feuil2 : If .Range("C10") = "" Then
2-
VB:
    If .Range("C10") = "" Then
      .Range("C10") = "123"
    If .Range("C10") = "" Then
        MsgBox "Cette opération a échoué. Veuillez contacter l'éditeur."
Si C10 est vide on met 123 ou un msgbox ? Dans l'état jamais de msgbox car si C10 vide on met 123 donc ensuite C10 n'est pas vide
3- "Alors" n'est pas une syntaxe VBA. Préférez Then
4-
Code:
        If Sheets("Feuil2").Visible = True Then
            Sheets("Feuil2").Visible = xlSheetVeryHidden
        End If
inutile car il suffit de faire :
Sheets("Feuil2").Visible = xlSheetVeryHidden
5- Tel que conçu on passera toujours par :
Code:
Fin:
  MsgBox "Erreur d'éxécution. Veuillez paramétrer les macros sur : Désactiver toutes les macros avec notification."
End Sub
Il manque un Exit sub pour sortir avant le msgbox s'il n'y a pas de problème :
Code:
...
Exit Sub
Fin:
  MsgBox "Erreur d'éxécution. Veuillez paramétrer les macros sur : Désactiver toutes les macros avec notification."
End Sub
Difficile de corriger si on n'a pas exactement le besoin exprimé.
 

TooFatBoy

XLDnaute Barbatruc
Je crois que c'est fait exprès, pour tester si la mise à jour de la cellule a bien fonctionné.
 

juvaxe

XLDnaute Occasionnel
Bonjour

Je viens de faire un petit test avec ta macro; j'ai :

1 - Remplacer :

If Sheets("Feuil2").Visible = True
Alors
par
If Sheets("Feuil2").Visible = True Then


2 Il y a trois IF ; donc il manque un END IF dans la suite de la macro

A toi de refaire le test complet

Bonne réception
 

Phil69970

XLDnaute Barbatruc
Bonjour Tchotchodu31, le forum

Pêle-mele il manquait :

un "end if"
un "then"
un "alors" en trop
Et il reste surement des erreurs au niveau des ".range..."
Car un coup tu fait :
If Range("C10") et la ligne suivante .Range("C10")
Je pense qu'il faut mettre de partout .Range("C10")
Et si tu intentais ton code il serait plus lisible pour toi et tu verrais plus facilement les erreurs
VB:
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 Then
                Sheets("Feuil2").Visible = xlSheetVeryHidden
            End If
        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

@Phil69970
 
Dernière édition:

Orson83

XLDnaute Impliqué
Bonjour marcel32, sylvanu , juvaxe, Phil69970, le forum,
Merci d'avoir regardé. j'ai fait un mix de toutes vos suggestions et je les ai appliqué dans le fichier joint.
Je ne parviens pas à rendre la feuille 2 cachée en permanence et à faire afficher les msgbox sur la feuille 1.
J'ai fait un petit résumé dans le fichier.
Merci pour votre aide.
 

Pièces jointes

  • Macro test1.xlsm
    23.8 KB · Affichages: 7

Phil69970

XLDnaute Barbatruc
Bonjour à tous

Peut être ceci (non testé)
VB:
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" ' cette cellule sera remplie par un procédé automatique
        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 Then
                Sheets("Feuil2").Visible = xlSheetVeryHidden
            End If
        End If
    End If
  End With
Sheets("Feuil2").Visible = xlSheetVeryHidden
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."
   Sheets("Feuil2").Visible = xlSheetVeryHidden
End Sub
Edit : j'ai modifié le code :
Sheets("Feuil2").Visible = xlSheetHidden
en
Sheets("Feuil2").Visible = xlSheetVeryHidden

@Phil69970
 
Dernière édition:

Orson83

XLDnaute Impliqué
Phil69970, le forum,
J'ai testé ton code.
La feuille 2 est visible à la première ouverture jusqu'à la fermeture de la msgbox. Peut-être qu'il serait possible de la rendre invisible dès l'ouverture ?
A la deuxième ouverture, la feuille 2 est bien masquée mais il n'y a plus la msgbox qui indique que l'opération à été réalisée avec succès. Peut-on la faire afficher ?
Tchotchodu31
 

Phil69970

XLDnaute Barbatruc
Le fil

Je suis parti du principe que la cellule C10 est vide
J'ai ensuite ouvert le fichier .....

VB:
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
Sheets("Feuil2").Visible = xlSheetVisible
With Sheets("Feuil2")
    If .Range("C10").Value = "" Then
        .Range("C10") = "123" ' cette cellule sera remplie par un procédé automatique
        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
Sheets("Feuil2").Visible = xlSheetVeryHidden
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."
    Sheets("Feuil2").Visible = xlSheetVeryHidden
ActiveWindow.DisplayWorkbookTabs = True 'Affiche le nom des onglets
End Sub
Edit :
Pour masquer les onglets
@Phil69970
 

Pièces jointes

  • Macro test1-V1.xlsm
    21.3 KB · Affichages: 1
Dernière édition:

Orson83

XLDnaute Impliqué
Si la cellule C10 est vide avant la première ouverture, la msgbox affiche une erreur.
C'est à la deuxième ouverture que le msgbox est correcte car la cellule C10 est déjà renseignée.
PS : la fonction : ActiveWindow.DisplayWorkbookTabs = True/False fonctionne de mon coté
 

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…