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 :

Ouverture d'onglets dans un fichier excel => Erreur, si onglet inexistant


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Par défaut Ouverture d'onglets dans un fichier excel => Erreur, si onglet inexistant
    Bonjour,

    Présentation rapide :

    J'ai dévellopé une macro qui permet d'imprimer un fichier excel qui contient trois onglets. (Prépa, Montage, Essais)
    La macro ouvre chaque onglet, renseigne certaines cellules, imprime les onglets, et pour finir ferme le fichier excel.

    A savoir : J'ai inclu 4 checkbox :
    -Une me permet d'imprimer les 3 onglets en une fois
    -Les 3 autres permettent d'imprimer les onglets que l'on souhaite.

    Le problème :

    Jusqu'à aujourd'hui la personne qui lance la macro coche la case pour tout imprimer, sachant que mes fichiers excel comportent toujours les trois onglets (Prépa, Montage, Essais)

    Sauf qu'aujourd'hui j'ai réalisé un fichier excel qui ne comporte plus les 3 onglets (je n'ai besoin que de celui "Montage") => Mais lorsque la personne coche "imprimer tout" la macro affiche une erreur (Biensur elle ne trouve pas l'onglet)

    La question :

    Comment faire pour que la macro aille chercher l'onglet suivant si elle ne trouve pas le premier ?

    Merci d'avance pour vos réponses

  2. #2
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    on error resume next
    ' ton code
    on error goto 0
    c'est le plus simple après tu peux aussi tester l'existence de la feuille
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Par défaut
    ==> En effet, j'avais essayé avec cette ligne de code.. Par contre pourrais tu m'expliquer comment faire pour lui demander de tester l'existence de cet onglet ?

    Merci

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Une autre approche, tester le nom de la feuille à imprimer en parcourant toutes les feuilles.
    Exemple, pour imprimer les feuilles Prépa, Montage, Essais (sans se soucier si elles existent ou non)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    Dim Sh As Worksheet
     
    For Each Sh In ThisWorkbook.Worksheets
        If InStr("Prépa|Montage|Essais", Sh.Name) > 0 Then Sh.PrintOut
    Next Sh
    End Sub

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Par défaut
    Bonjour,

    J'ai fait quelques essais, peu concluants... Je vous envoie le code avec les quelques lignes que j'ai ajoutées suivant vos conseils..

    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    '-------------Recherche suivant numéro de pvc ------------------------------------------------------'
     
    If tip = "Numéro de PVC" Then
    Worksheets("Liste des GAC & PVC Mont").Select
    i = 2
        Do Until i = 0
            If Cells(i, 1) = num Then
            Workbooks.Open Filename:=Cells(i, 8)
     
                If pvp = "Vrai" Or imptout = "Vrai" Then
     
                For Each Sh In ThisWorkbook.Worksheets
                If InStr("Fiche Préparation", Sh.Name) > 0 Then Worksheets("Fiche Préparation").Select
                Next Sh
     
            ActiveSheet.Unprotect ("METHFAB")
                                If of = "" Then
                                Range("N4") = ("XXXXXXXXXXXXXXX")
                                MsgBox ("L'OF n'est pas valide")
                                ActiveWorkbook.Saved = True
                                ActiveWorkbook.Close
                                Else
                                Range("K5") = lot
                                Range("N4") = of
                                Range("N5") = ID
                                ActiveSheet.Protect ("METHFAB") 'DrawingObjects:=True, Contents:=True, Scenarios:=True _
                                , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
                                AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
                                :=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
                                AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
                                AllowUsingPivotTables:=True
     
                                '----- Bloc pied page----'
     
                                ActiveSheet.PageSetup.PrintArea = ""
                                 With ActiveSheet.PageSetup
                                .RightFooter = "N°PVC : " & Range("I3") & Chr(10) & Range("N4") 'passe à la ligne avec Chr(10)'
                                 End With
     
                                '----- Fin Bloc pied page----'
     
                                ActiveWindow.SelectedSheets.PrintOut Copies:=1
     
                                If imptout = "Faux" Then
                                ActiveWorkbook.Saved = True
                                ActiveWorkbook.Close
                                End If
                                End If
                End If
                If pvm = "Vrai" Or imptout = "Vrai" Then
                Worksheets("Fiche Montage").Select
            ActiveSheet.Unprotect ("METHFAB")
                                If of = "" Then
                                Range("O4") = ("XXXXXXXXXXXXXXX")
                                MsgBox ("L'OF n'est pas valide")
                                ActiveWorkbook.Saved = True
                                ActiveWorkbook.Close
                                Else
                                Range("C5") = lot
                                Range("O4") = of
                                Range("O5") = ID
                                ActiveSheet.Protect ("METHFAB") 'DrawingObjects:=True, Contents:=True, Scenarios:=True _
                                , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
                                AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
                                :=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
                                AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
                                AllowUsingPivotTables:=True
     
                                '----- Bloc pied page----'
     
                                ActiveSheet.PageSetup.PrintArea = ""
                                 With ActiveSheet.PageSetup
                                .RightFooter = "N°PVC : " & Range("H3") & Chr(10) & Range("O4") 'passe à la ligne avec Chr(10)'
                                 End With
     
                                '----- Fin Bloc pied page----'
     
     
                                ActiveWindow.SelectedSheets.PrintOut Copies:=1
     
                                If imptout = "Faux" Then
                                ActiveWorkbook.Saved = True
                                ActiveWorkbook.Close
                                End If
                                End If
     
                End If
                If pve = "Vrai" Or imptout = "Vrai" Then
                Worksheets("Fiche Essais").Select
            ActiveSheet.Unprotect ("METHFAB")
                                If of = "" Then
                                Range("O4") = ("XXXXXXXXXXXXXXX")
                                MsgBox ("L'OF n'est pas valide")
                                ActiveWorkbook.Saved = True
                                ActiveWorkbook.Close
                                Else
                                Range("C5") = lot
                                Range("O4") = of
                                Range("O5") = ID
                                ActiveSheet.Protect ("METHFAB") 'DrawingObjects:=True, Contents:=True, Scenarios:=True _
                                , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
                                AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
                                :=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
                                AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
                                AllowUsingPivotTables:=True
     
                                '----- Bloc pied page----'
     
                                ActiveSheet.PageSetup.PrintArea = ""
                                 With ActiveSheet.PageSetup
                                .RightFooter = "N°PVC : " & Range("H3") & Chr(10) & Range("O4") 'passe à la ligne avec Chr(10)'
                                 End With
     
                                '----- Fin Bloc pied page----'
     
                                ActiveWindow.SelectedSheets.PrintOut Copies:=1
     
                                If imptout = "Faux" Then
                                ActiveWorkbook.Saved = True
                                ActiveWorkbook.Close
                                End If
                                End If
     
                End If
     
            i = -1
            Else
                If Cells(i - 1, 1) = "" Or num = "" Then
                MsgBox ("il n'y a pas de PVC pour ce numéro de PVC")
                i = -1
                End If
            End If
        i = i + 1
        Loop
     
    End If
        If imptout = "Vrai" Then
        ActiveWorkbook.Saved = True
        ActiveWorkbook.Close
        End If
    Le mieux pour moi, serait :

    je coche ma CheckBox X
    La macro teste/cherche la présence de la feuille.
    Si la feuille est trouvee, la macro suit son cours.
    Si la feuille n'est pas trouvée, je reviens au début de ma macro ( En informant l'utilisateur que la feuille n'est pas existante, mais par contre qu'il existe une feuille nommée "feuil..." dans le fichier)

    J'espère etre assez clair

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Tu peux mettre un extrait non confidentiel exemple de ton fichier, parce qu'il y a pas mal de choses à simplifier et sans répitition.

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

Discussions similaires

  1. [XL-2010] Copie d'onglets Excel 2010 dans un fichier Excel 95
    Par pedro91 dans le forum Excel
    Réponses: 2
    Dernier message: 29/07/2014, 19h57
  2. [POI] Erreur dans mon fichier Excel à l'ouverture
    Par mouss4rs dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 08/03/2012, 14h42
  3. Réponses: 2
    Dernier message: 08/07/2010, 09h44
  4. [Excel] Créer un onglet
    Par namstou3 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 29/02/2008, 13h18
  5. Mettre des donnees dans un fichier Excel
    Par Mouawad dans le forum C++Builder
    Réponses: 6
    Dernier message: 07/10/2004, 14h55

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