IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Code de Macro qui s'arrête après une instruction sans message d'erreur [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur polyvalent
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur polyvalent

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Code de Macro qui s'arrête après une instruction sans message d'erreur
    Bonjour à tous,

    Je suis actuellement en train de d'écrire une macro qui permet d'ajouter une nouvelle feuille. Cette macro est réalisée dans un fichier XLAM afin d'améliorer la maintenabilité du code. Mon code s'arrête sans message d'erreur au moment ou li exécute la ligne ".Worksheets("Blank_Template (2)").Name = "PART " & lastNumber & "A""

    Le code est divisé en plusieurs sous routine

    nb : le mots ACTIVE_WORKBOOK est une variable global qui contient l'objet "classeur" sur lequel on travaille elle est transmise comme suis :


    Code dans le fichier excel normal (.xlsm)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Sub Button_Add_table
     
    Dim book as workbook
     
    set book = Workbooks(ActiveWorkbook.name)
     Call MacroTemplateTS.Add_Table(book)
     
    end Sub
    Et le code dans le XLA :

    Code qui affecte la variable global

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Sub Add_Table(book As Workbook, sht As Worksheet) 'OK
     
        Set ACTIVE_WORKBOOK = book
     
        Call add_new_table
     
    End Sub

    D'abord la sous routine "principale"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    Sub add_new_table() 'OK
     
    Dim lastNumber As Integer
     
        Call Sort_WorkBook
     
        With ACTIVE_WORKBOOK
            lastNumber = ExtractingNumber(.Worksheets(.Worksheets.Count - 3).Name)
            lastNumber = lastNumber + 1
            .Worksheets("Blank_Template").Visible = True
            .Worksheets("Blank_Template").Copy after:=.Worksheets(.Worksheets.Count - 3)
            .Worksheets("Blank_Template (2)").Name = "PART " & lastNumber & "A"    <---------------- Ligne où le code plante
            .Worksheets("Blank_Template").Visible = False
        End With
     
    End Sub
    elle appelle la sous routine Sort_Workbook

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    Sub Sort_WorkBook() 'OK
     
        Call Sort_Alphabetically
        Call Order_Table_Number
     
    End Sub
    Qui appelle elle même deux sous routine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
    Sub Sort_Alphabetically() 'OK
    Dim i, j As Integer
     
        Call Store_Hide_Table
        Call Check_ChangeLog
     
        i = 2 'pass the Change_Log sheet
     
        With ACTIVE_WORKBOOK
            While .Worksheets(i).Name Like "PART *"
                j = i + 1
                While .Worksheets(j).Name Like "PART *"
                    If .Worksheets(i).Name > .Worksheets(j).Name Then
                        .Worksheets(j).Move before:=.Worksheets(i)
                    End If
                    j = j + 1
                Wend
                i = i + 1
            Wend
        End With
     
    End Sub
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
     
    Sub Order_Table_Number() 'OK
     
    Dim referenceNumber As Integer
    Dim referenceLetter As String
    Dim newSheetName As String
    Dim sheetLetter As String
    Dim sheetNumber As Integer
    Dim i As Integer
     
        referenceNumber = 1
        referenceLetter = "A"
        i = 2
     
        With ACTIVE_WORKBOOK
            While .Worksheets(i).Name Like "PART *"
                sheetNumber = ExtractingNumber(.Worksheets(i).Name)
     
                If .Worksheets(i + 1).Name Like "PART *" Then
     
                    newSheetName = "PART " & referenceNumber & referenceLetter
                    'Check the next table to determine the right reference letter and reference number
                    If referenceNumber <> ExtractingNumber(.Worksheets(i + 1).Name) And ExtractingNumber(.Worksheets(i + 1).Name) <> ExtractingNumber(.Worksheets(i).Name) Then
                        referenceNumber = referenceNumber + 1
                        referenceLetter = "A"
                    Else ' Same variant
                        Select Case (referenceLetter)
                            Case Is = "A"
                                referenceLetter = "B"
                            Case Is = "B"
                                referenceLetter = "C"
                            Case Else
                                referenceLetter = "D"
                        End Select
                    End If
                Else 'Last table
                    newSheetName = "PART " & referenceNumber & referenceLetter
                End If
                    .Worksheets(i).Name = newSheetName
                    i = i + 1
            Wend
        End With
     
    End Sub

    et enfin il y a quelque autre méthodes qui sont appelée de temps en temps

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
     
    Sub Store_Hide_Table() 'OK
     
        With ACTIVE_WORKBOOK
            If ExistingTable("Blank_Change_Log") = True Then
                .Worksheets("Blank_Change_Log").Visible = True
                .Worksheets("Blank_Change_Log").Move after:=.Worksheets(.Worksheets.Count)
                .Worksheets("Blank_Change_Log").Visible = False
            Else
                MsgBox "The reference ""Blank_Change_Log"" table doesn't exist anymore."
            End If
     
            If ExistingTable("Reference_Sheet") = True Then
                .Worksheets("Reference_Sheet").Visible = True
                .Worksheets("Reference_Sheet").Move after:=.Worksheets(.Worksheets.Count)
                .Worksheets("Reference_Sheet").Visible = False
            Else
                MsgBox "The reference ""Reference_Sheet"" table doesn't exist anymore."
            End If
     
            If ExistingTable("Blank_Template") = True Then
                .Worksheets("Blank_Template").Visible = True
                .Worksheets("Blank_Template").Move after:=.Worksheets(.Worksheets.Count)
                .Worksheets("Blank_Template").Visible = False
            Else
                MsgBox "The reference ""Blank_Template"" table doesn't exist anymore."
            End If
     
        End With
     
    End Sub
     
     
    Sub Check_ChangeLog() 'OK
     
        With ACTIVE_WORKBOOK
     
            If ExistingTable("Change_Log") = True Then
                .Worksheets("Change_Log").Move before:=.Worksheets(1)
     
            Else
                .Worksheets("Blank_Change_Log").Visible = True
                .Worksheets("Blank_Change_Log").Copy before:=.Worksheets(1)
                .Worksheets("Blank_Change_Log (2)").Name = "Change_Log"
                .Worksheets("Blank_Change_Log").Visible = False
            End If
     
        End With
     
    End Sub
     
    Function ExistingTable(checktable As String) As Boolean 'OK
     
    On Error GoTo mistake
    Dim table As Worksheet
     
        ExistingTable = False
        For Each table In ACTIVE_WORKBOOK.Worksheets
            If table.Name = checktable Then
                ExistingTable = True
                Exit Function
            End If
     
        Next table
    Exit Function
     
    mistake:
        MsgBox "Error..."
        ExistingTable = CVErr(xlErrNA)
     
    End Function
     
    Function ExtractingNumber(sheetName As String) As Integer 'OK
     
            sheetName = Replace(sheetName, "PART ", "")
     
            If Len(sheetName) = 2 Then
                sheetName = Left(sheetName, Len(sheetName) - 1)
            Else
                sheetName = Left(sheetName, Len(sheetName) - 2)
            End If
     
            ExtractingNumber = CInt(sheetName)
     
    End Function
     
    Function ExtractingLetter(sheetName As String) As String 'OK
     
            ExtractingLetter = Right(sheetName, 1)
     
    End Function
    Voila mon code est un peu long mais je ne vois pas d'ou peut venir l'erreur donc je préfère en mettre trop plutôt que trop peu

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Commence par retirer les on error!

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur polyvalent
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur polyvalent

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonsoir,
    Commence par retirer les on error!
    Merci pour ta réponse, je viens de le faire mais ça ne résous pas le problème et n'affiche pas de message d'erreur

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur polyvalent
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur polyvalent

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Résolution inattendue
    Bonjour,

    Voila j'ai réussi a résoudre mon problème d'une façon un peu étrange : J'ai copier/coller le contenu de mon module du fichier excel qui permettait de faire les appels des fonctions contenu dans le XLA. Je l'ai sauvegarder le contenu sur un fichier text (bloc note). J'ai supprimer le module du fichier excel, puis j'en ai recréer un nouveau. Je l'ai renommer de la même façon et j'ai recoller l'intégralité du contenu du fichier text dans le nouveau module. Et la (un peu comme par magie) le problème était résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle macro qui s'arrête après plusieurs tours sans arriver à la fin
    Par plamouik dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 14/09/2016, 10h04
  2. Je souhaite une macro qui s'arrête et qui repart.
    Par maniveaudelaye dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/05/2014, 12h05
  3. Macro qui permet de mettre une macro sur une poste
    Par Tinien dans le forum VBA Word
    Réponses: 4
    Dernier message: 26/11/2008, 01h17
  4. Fichier .bat qui s'arrête après une commande
    Par VinnieMc dans le forum Administration
    Réponses: 6
    Dernier message: 28/08/2008, 18h17
  5. Reprendre le code après une instruction stop
    Par sash6 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 15/11/2007, 16h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo