GoTo or not GoTo

yannick64

XLDnaute Junior
Bonjour à tous

Dans une macro j’aimerai, après vérification que certains champs ne sont pas complétés, faire un GoTo vers une étiquette pour éviter tout une partie de la macro et aller directement à la fin. (il parait qu'il faut éviter... mais c'est ce qui à l'air le plus simple dans mon cas)

J'ai mis en place le GoTo mais j'ai du faire une erreur car il ne marche pas, pas de message d'erreur:confused:

Apparemment il faut utiliser des "If - End If" mais comment les imbriquer, est ce possible?

Voici le code :

Code:
Sub MasquerLignesColonnes()
' Macro enregistrée le 09/01/2012 par Yannick

'Boite de dialogue
 
    Rep = MsgBox("Avez vous complété l'ensemble des informations requises? Voulez-vous éditer les certificats ?", vbYesNo + vbQuestion, "LP CHAMPO - Information !")
    If Rep = vbYes Then
    
  If Range("g13").Value = "" Then
  MsgBox "Saisie obligatoire de la filière"

Else
 'non vide...
End If

If Range("g14").Value = "" Then
  MsgBox "Saisie obligatoire de l'option"

Else
GoTo etiquette
End If
    
    'Ouverture de la base de données
    
      Workbooks.Open Filename:= _
        "D:\Mes documents\Lycée\Europe\Evaluations informatisées\C_A.xls"
    Windows("Evaluation Espagne.xls").Activate
    Sheets("FC").Select
    Rows("2:21").Select
    Selection.Copy
    Windows("C_A.xls").Activate
    Range("A2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Windows("C_A.xls").Activate
    
    Dim i%

For i = Range("A65536").End(xlUp).Row To 1 Step -1
    If Not InStr(1, LCase(Cells(i, 1).Value), "0") = 0 Then
        Rows(i).Delete
    End If
   
Next i
    
    Windows("Evaluation Espagne.xls").Activate
    
'Edition des fiches
'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
Dim docWord As Word.Document
Dim appWord As Word.Application
Dim NomBase As String

NomBase = "D:\Mes documents\Lycée\Europe\Evaluations informatisées\C_A.xls"

Application.ScreenUpdating = False
Set appWord = New Word.Application
appWord.Visible = True
'Ouverture du document principal Word
Set docWord = appWord.Documents.Open("D:\Mes documents\Lycée\Europe\Evaluations informatisées\c_a.doc")

'fonctionnalité de publipostage pour le document spécifié
With docWord.MailMerge
'Ouvre la base de données
.OpenDataSource Name:=NomBase, _
Connection:="Driver={Fichier Excel via ODBC (*.xls)};" & _
"DBQ=" & NomBase & "; ReadOnly=True;", _
SQLStatement:="SELECT * FROM [FC$]"
'Spécifie la fusion vers l'imprimante
.Destination = wdSendToPrinter
.SuppressBlankLines = True
'Prend en compte l'ensemble des enregistrements
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
'Exécute l'opération de publipostage
.Execute Pause:=False
End With

Application.ScreenUpdating = True

'Fermeture du document Word
docWord.Close False
appWord.Quit

'Fermeture de la base de données

Windows("C_A.xls").Activate
Application.DisplayAlerts = False
ActiveWorkbook.Close savechanges:=False
Application.DisplayAlerts = True



'Enregistrer le document
    Sheets("Apreciaciones").Select
    
    ActiveWorkbook.SaveAs Filename:="Evaluation" & " " & [f7].Value & ".xls"

'Masquer les lignes et colonnes
    Columns("N:N").Select
    Range("N115").Activate
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.EntireColumn.Hidden = True
    Rows("125:125").Select
    Range("C125").Activate
    Range(Selection, Selection.End(xlDown)).Select
    Selection.EntireRow.Hidden = True
    ActiveWindow.SmallScroll Down:=-129
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1
    
    Sheets("FC").Select
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("Apreciaciones").Select
    Range("F8").Select
     

etiquette:
'Boite d'info
Else

        MsgBox "Complétez les informations et relancez l'édition des certificats", vbOKOnly + vbInformation, "LP CHAMPO - Information !"
        End If
        
End Sub

Merci pour votre aide;)
 

nyko283

XLDnaute Occasionnel
Re : GoTo or not GoTo

Bonjour Yannick64,

apparement le msg d'erreur se trouvant apres le dernier "Else" ne s'affichera que si tu repond "non" a la premiere question.

Pour eviter le goto tu peut apres chaque verirfication de champs ,insere ton message pour informer de relancer l'impression, exemple :

VB:
If Range("g13").Value = "" Then
        MsgBox "Complétez la filière et relancez l'édition des certificats", vbOKOnly + vbInformation, "LP CHAMPO - Information !"
        Exit sub ' la macro s'arrete la 
end if
'ici le reste de ton code si tu a ete rempli.

Bon week end a tous.
 

MJ13

XLDnaute Barbatruc
Re : GoTo or not GoTo

Bonjour Yannick, Nyko

Pas trop suivi ton code, mais souvent, il faut débugger, voire, mettre un End avant étiquette.

Le goto en général, cela fonctionne si on place les bons éléments au bon endroit (genre End, Exit Sub..).
 

yannick64

XLDnaute Junior
Re : GoTo or not GoTo

En fait c'est encore plus simple comme ça ! Ca marche très bien et ça m'évite le GoTo.

VB:
If Range("g13").Value = "" Then
        MsgBox "Complétez la filière et relancez l'édition des certificats", vbOKOnly + vbInformation, "LP CHAMPO - Information !"
        Exit sub ' la macro s'arrete la 
end if
'ici le reste de ton code si tu a ete rempli.

Merci nyko283 et MJ13 pour réponses ultra rapides
Bon weekend a tous.;)
 

Roland_M

XLDnaute Barbatruc
Re : GoTo or not GoTo

bonjour à tous,

à essayer !
j'ai fais les tests mais pour le reste je ne peut pas tester !

Code:
Sub MasquerLignesColonnes()
Dim ReponseMsgbox As Variant, I%

ReponseMsgbox = MsgBox("Avez vous complété l'ensemble des informations requises? Voulez-vous éditer les certificats ?", vbYesNo + vbQuestion, "LP CHAMPO - Information !")
If ReponseMsgbox <> vbYes Then Exit Sub
If Range("g13").Value = "" Then MsgBox "Saisie obligatoire de la filière en G3 !", vbInformation: Exit Sub
If Range("g14").Value = "" Then MsgBox "Saisie obligatoire de l'option en G14 !",  vbInformation: Exit Sub
    
'Ouverture de la base de données
Workbooks.Open Filename:="D:\Mes documents\Lycée\Europe\Evaluations informatisées\C_A.xls"

Windows("Evaluation Espagne.xls").Activate
Sheets("FC").Select: Rows("2:21").Copy
Windows("C_A.xls").Activate
Range("A2").Select
 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("A2").Select

For I = Range("A65536").End(xlUp).Row To 1 Step -1
  If Not InStr(1, LCase(Cells(I, 1).Value), "0") = 0 Then Rows(I).Delete
Next
    
Windows("Evaluation Espagne.xls").Activate

'Edition des fiches
'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
Dim docWord As Word.Document
Dim appWord As Word.Application
Dim NomBase As String

NomBase = "D:\Mes documents\Lycée\Europe\Evaluations informatisées\C_A.xls"

Application.ScreenUpdating = False
Set appWord = New Word.Application
appWord.Visible = True
'Ouverture du document principal Word
Set docWord = appWord.Documents.Open("D:\Mes documents\Lycée\Europe\Evaluations informatisées\c_a.doc")

'fonctionnalité de publipostage pour le document spécifié
With docWord.MailMerge
  'Ouvre la base de données
  .OpenDataSource Name:=NomBase, Connection:="Driver={Fichier Excel via ODBC (*.xls)};" & _
   "DBQ=" & NomBase & "; ReadOnly=True;", _
   SQLStatement:="SELECT * FROM [FC$]"
   'Spécifie la fusion vers l'imprimante
   .Destination = wdSendToPrinter
   .SuppressBlankLines = True
   'Prend en compte l'ensemble des enregistrements
   With .DataSource
     .FirstRecord = wdDefaultFirstRecord
     .LastRecord = wdDefaultLastRecord
   End With
   'Exécute l'opération de publipostage
   .Execute Pause:=False
End With

Application.ScreenUpdating = True
'Fermeture du document Word
docWord.Close False: appWord.Quit

'Fermeture de la base de données
Windows("C_A.xls").Activate
Application.DisplayAlerts = False
ActiveWorkbook.Close savechanges:=False
Application.DisplayAlerts = True

'Enregistrer le document
Sheets("Apreciaciones").Select
ActiveWorkbook.SaveAs Filename:="Evaluation" & " " & [f7].Value & ".xls"

'Masquer les lignes et colonnes
Columns("N:N").Select
Range("N115").Activate
Range(Selection, Selection.End(xlToRight)).Select
Selection.EntireColumn.Hidden = True
Rows("125:125").Select
Range("C125").Activate
Range(Selection, Selection.End(xlDown)).Select
Selection.EntireRow.Hidden = True
ActiveWindow.SmallScroll Down:=-129
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1

Sheets("FC").Select
ActiveWindow.SelectedSheets.Visible = False
Sheets("Apreciaciones").Select
Range("F8").Select
End Sub
 
Dernière édition:

yannick64

XLDnaute Junior
Re : GoTo or not GoTo

Effectivement ça marche également, et ça va me permettre de simplifier mon code pour retrouver facilement les différentes fonctions de la macro... je ne connaissais pas cette fonction ReponseMsgBox

Merci beaucoup !
 

herve62

XLDnaute Barbatruc
Supporter XLD
Re : GoTo or not GoTo

bONJOUR
Ce n'est pas une fonction c'est comme ton REP= , une variable
Au début tu aurais pu facilement trouver ton erreur : tu vas en DEBOGAGE et PAS A PAS détaillé ( avec F8 ensuite) et on voit bien ligne par ligne ce que fait le code , et si tu poses ton curseur sur une variable dejà executée tu vois sa valeur
c'est très utile !! et efficace
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof