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

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    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 éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    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

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    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 sénior 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
    Points : 31 877
    Points
    31 877
    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
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    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 sénior 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
    Points : 31 877
    Points
    31 877
    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.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Ci joint les documents pour faire fonctionner la macro (Un fichier .txt explicite bien mon problème !!

    Merci d'avance
    Fichiers attachés Fichiers attachés

  8. #8
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    Essaie de remplacer ton code par ceci
    Fais le test et fais un feedback
    Si ça fonctionne comme tu le souhaite, je commenterai le code avec des explications
    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
    Private Function AllChecked() As Boolean
    Dim i As Byte
    Dim Tb
     
    AllChecked = True
    Tb = Array(2, 3, 5)
    For i = LBound(Tb) To UBound(Tb)
        If Not Me.Controls("CheckBox" & Tb(i)) Then
            AllChecked = False
            Exit For
        End If
    Next i
    End Function
     
    Private Sub CheckBox2_Click()
    Me.CheckBox4.Value = AllChecked
    End Sub
     
    Private Sub CheckBox3_Click()
    Me.CheckBox4.Value = AllChecked
    End Sub
     
    Private Sub CheckBox5_Click()
    Me.CheckBox4.Value = AllChecked
    End Sub
     
    Private Sub CheckBox4_Click()
    Dim ImpAll As Boolean
    Dim i As Byte
    Dim Tb
     
    ImpAll = Me.CheckBox4.Value
    Tb = Array(2, 3, 5)
    For i = LBound(Tb) To UBound(Tb)
        With Me.Controls("CheckBox" & Tb(i))
            .Value = ImpAll
            .Enabled = Not ImpAll
        End With
    Next i
    End Sub
     
    Private Sub CommandButton1_Click()
    Dim Wbk As Workbook
    Dim Sh As Worksheet
    Dim Tip As String, Num As String, oF As String, Lot As String, MdP As String, ID As String
    Dim NomFichier As String, ArrSht As String
    Dim CelOF As String, CelLot As String, CelID As String, CelPVC As String
    Dim PVP As Boolean, PVM As Boolean, PVE As Boolean, ImpTout As Boolean, Trouve As Boolean
    Dim i As Long, LigneVide As Double, LastLig As Long
     
    Application.ScreenUpdating = False
    MdP = "xxxx"    'Mot de passe de protection
    Tip = Me.ComboBox1.Value
    Num = Me.TextBox1.Value
    oF = Me.TextBox3.Value
    Lot = Me.TextBox4.Value
    PVP = Me.CheckBox3.Value
    PVM = Me.CheckBox2.Value
    PVE = Me.CheckBox5.Value
    ImpTout = Me.CheckBox4.Value
    ID = Me.TextBox5.Value
     
    '-------Bloc tracabilité lancement d'of-------'
    With ThisWorkbook.Worksheets("Traçabilité OF lancés")
        .Unprotect MdP
        LigneVide = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
        .Range("A" & LigneVide & ":F" & LigneVide).Value = Array(oF, ID, Num, Now, Lot, Application.UserName)
        .Protect MdP
    End With
    ThisWorkbook.Save
    '-------Fin Bloc tracabilité lancement d'of-------'
    If ImpTout Then
        ArrSht = "Fiche Préparation|Fiche Montage|Fiche Essais"
    Else
        If PVP Then ArrSht = "Fiche Préparation|"
        If PVM Then ArrSht = ArrSht & "Fiche Montage|"
        If PVE Then ArrSht = ArrSht & "Fiche Essais"
    End If
     
    If ArrSht <> "" Then
        With ThisWorkbook.Worksheets("Liste PV")
            LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
            For i = 2 To LastLig
                If .Range("C" & i).Value = Num And .Range("G" & i).Value = "PVC" Then
                    NomFichier = .Range("H" & i).Value
                    Set Wbk = Workbooks.Open(NomFichier)
                    For Each Sh In Wbk.Worksheets
                        If InStr(ArrSht, Sh.Name) > 0 Then
                            '----Choix des cases à remplir en fonction de la feuille (Prépa, Montage ou Essai)
                            If Sh.Name = "Fiche Préparation" Then
                                CelOF = "N4"
                                CelLot = "K5"
                                CelID = "N5"
                                CelPVC = "I3"
                            Else
                                CelOF = "O4"
                                CelLot = "C5"
                                CelID = "O5"
                                CelPVC = "H3"
                            End If
                            '---- Fin Choix des cases à remplir en fonction de la feuille (Prépa, Montage ou Essai)
                            With Sh
                                .Unprotect MdP
                                If oF = "" Then
                                    .Range(CelOF).Value = "XXXXXXXXXXXXXXX"
                                    MsgBox "L'oF n'est pas valide"
                                    Exit For
                                Else
                                    .Range(CelLot) = Lot
                                    .Range(CelOF).Value = oF
                                    .Range(CelID).Value = ID
                                    .PageSetup.PrintArea = ""
                                    .PageSetup.RightFooter = "N°PVC : " & .Range(CelPVC) & Chr(10) & .Range(CelOF)
                                    .PrintOut Copies:=1
                                End If
                                .Protect MdP
                            End With
                        End If
                    Next Sh
                    Wbk.Close False
                    Set Wbk = Nothing
                    Trouve = True
                    Exit For
                End If
            Next i
        End With
    Else
        MsgBox "Rien à imprimer. Sélectionner les feuilles à imprimer"
    End If
    If Not Trouve Then MsgBox "il n'y a pas de PVC pour ce numéro de plan"
    '----Nettoyage des cases à remplir-----'
    Me.TextBox1 = ""
    Me.TextBox3 = ""
    Me.TextBox4 = ""
    Me.TextBox5 = ""
    '----Fin Nettoyage des cases à remplir-----'
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Alors ton code fonctionne très bien ! Merci !
    Par contre je me suis rendu compte qu'il faut cliquer 2 x sur la case imrpimer tout (checkbox 4) => Peut on remédier au problème ?

    En ce qui concerne les explications, je suis curieux de tout comprendre !!

    Cordialement

  10. #10
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Remplace les procédures des CheckBox comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub CheckBox2_Click()
    If Not Me.CheckBox4.Value Then Me.CheckBox4.Value = AllChecked
    End Sub
     
    Private Sub CheckBox3_Click()
    If Not Me.CheckBox4.Value Then Me.CheckBox4.Value = AllChecked
    End Sub
     
    Private Sub CheckBox5_Click()
    If Not Me.CheckBox4.Value Then Me.CheckBox4.Value = AllChecked
    End Sub

    EDIT:

    Ci joint le code complet brièvement commenté
    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
    141
    142
    143
    144
    145
    146
    147
    'Fonction boolean qui est vraie si CheckBox 2, 3 et 5 sont toutes les 3 cochées
    Private Function AllChecked() As Boolean
    Dim i As Byte
    Dim Tb
     
    AllChecked = True
    Tb = Array(2, 3, 5)
    For i = LBound(Tb) To UBound(Tb)
        If Not Me.Controls("CheckBox" & Tb(i)) Then
            AllChecked = False
            Exit For
        End If
    Next i
    End Function
    'Ici on cherche si les 3 CheckBox 2, 3 et 5 sont toutes cochées
    'alors ça revient à cocher Checkbox4
    Private Sub CheckBox2_Click()
    If Not Me.CheckBox4.Value Then Me.CheckBox4.Value = AllChecked
    End Sub
    'idem
    Private Sub CheckBox3_Click()
    If Not Me.CheckBox4.Value Then Me.CheckBox4.Value = AllChecked
    End Sub
    'idem
    Private Sub CheckBox5_Click()
    If Not Me.CheckBox4.Value Then Me.CheckBox4.Value = AllChecked
    End Sub
    'Si on coche checkBox4 alors les autres sont cochées et désactivées
    Private Sub CheckBox4_Click()
    Dim ImpAll As Boolean
    Dim i As Byte
    Dim Tb
     
    ImpAll = Me.CheckBox4.Value
    Tb = Array(2, 3, 5)
    For i = LBound(Tb) To UBound(Tb)
        With Me.Controls("CheckBox" & Tb(i))
            .Value = ImpAll
            .Enabled = Not ImpAll
        End With
    Next i
    End Sub
     
    Private Sub CommandButton1_Click()
    Dim Wbk As Workbook
    Dim Sh As Worksheet
    Dim Tip As String, Num As String, oF As String, Lot As String, MdP As String, ID As String
    Dim NomFichier As String, ArrSht As String
    Dim CelOF As String, CelLot As String, CelID As String, CelPVC As String
    Dim PVP As Boolean, PVM As Boolean, PVE As Boolean, ImpTout As Boolean, Trouve As Boolean
    Dim i As Long, LigneVide As Double, LastLig As Long
     
    Application.ScreenUpdating = False
    MdP = "xxxx"    'Mot de passe de protection
    Tip = Me.ComboBox1.Value
    Num = Me.TextBox1.Value
    oF = Me.TextBox3.Value
    Lot = Me.TextBox4.Value
    PVP = Me.CheckBox3.Value
    PVM = Me.CheckBox2.Value
    PVE = Me.CheckBox5.Value
    ImpTout = Me.CheckBox4.Value
    ID = Me.TextBox5.Value
     
    '-------Bloc tracabilité lancement d'of-------' 'Ceci est en principe clair
    With ThisWorkbook.Worksheets("Traçabilité OF lancés")
        .Unprotect MdP
        LigneVide = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
        .Range("A" & LigneVide & ":F" & LigneVide).Value = Array(oF, ID, Num, Now, Lot, Application.UserName)
        .Protect MdP
    End With
    ThisWorkbook.Save
    '-------Fin Bloc tracabilité lancement d'of-------'
    '--------Début Bloc récuperation des feuilles à imprimer
    'ArrSht permet de récupérer le nom des feuilles à imprimer séparés de |
    If ImpTout Then
        ArrSht = "Fiche Préparation|Fiche Montage|Fiche Essais"
    Else
        If PVP Then ArrSht = "Fiche Préparation|"
        If PVM Then ArrSht = ArrSht & "Fiche Montage|"
        If PVE Then ArrSht = ArrSht & "Fiche Essais"
    End If
    '--------Fin Bloc récuperation des feuilles à imprimer
    If ArrSht <> "" Then
        With ThisWorkbook.Worksheets("Liste PV")
            LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
            For i = 2 To LastLig    'On cherche la ligne qui correspond au choix de l'utilisateur dans Liste PV
                If .Range("C" & i).Value = Num And .Range("G" & i).Value = "PVC" Then
                    NomFichier = .Range("H" & i).Value
                    Set Wbk = Workbooks.Open(NomFichier)    'On ouvre le fichier correspondant à la valeur de la cellule H et de la ligne trouvée
                    For Each Sh In Wbk.Worksheets           'On boucle sur les feuilles du fichier ouvert (1 ou 2)
                        If InStr(ArrSht, Sh.Name) > 0 Then  'Si le nom de la feuille est compris dans ArrSht (je rappelle que dans ArrSht il y a concaténation des noms des feuilles à imprimer séparées par |
                            '----Choix des cases à remplir en fonction de la feuille (Prépa, Montage ou Essai)
                            'Du fait que la feuille Prépa a une configuration différente des autres
                            'Suivant le nom de la feuille Sh (de la boucle) on récuppère dans CelOF, CelLot, CelID et CelPVC
                            'les adresses des cases à remplir
                            If Sh.Name = "Fiche Préparation" Then
                                CelOF = "N4"
                                CelLot = "K5"
                                CelID = "N5"
                                CelPVC = "I3"
                            Else
                                CelOF = "O4"
                                CelLot = "C5"
                                CelID = "O5"
                                CelPVC = "H3"
                            End If
                            '---- Fin Choix des cases à remplir en fonction de la feuille (Prépa, Montage ou Essai)
                            'Ici ton traitement tel quel
                            With Sh
                                .Unprotect MdP
                                If oF = "" Then
                                    .Range(CelOF).Value = "XXXXXXXXXXXXXXX"
                                    MsgBox "L'OF n'est pas valide"
                                    Exit For
                                Else
                                    .Range(CelLot) = Lot
                                    .Range(CelOF).Value = oF
                                    .Range(CelID).Value = ID
                                    .PageSetup.PrintArea = ""
                                    .PageSetup.RightFooter = "N°PVC : " & .Range(CelPVC) & Chr(10) & .Range(CelOF)
                                    .PrintOut Copies:=1
                                End If
                                .Protect MdP
                            End With
                        End If
                    Next Sh
                    Wbk.Close False
                    Set Wbk = Nothing
                    'Ici on a trouvé la ligne PVC correspondante
                    Trouve = True
                    'pas la peine de continuer à chercher d'autres lignes dans la feuille Liste PV
                    Exit For
                End If
            Next i
        End With
    Else
        MsgBox "Rien à imprimer. Sélectionner les feuilles à imprimer"
    End If
    If Not Trouve Then MsgBox "il n'y a pas de PVC pour ce numéro de plan"
    '----Nettoyage des cases à remplir-----'
    Me.TextBox1 = ""
    Me.TextBox3 = ""
    Me.TextBox4 = ""
    Me.TextBox5 = ""
    '----Fin Nettoyage des cases à remplir-----'
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,

    Un grand merci ! Je vais essayer d'améliorer et de peaufiner tout ceci ! Mais l'essentiel est là !

    Où as tu appris à programmer ? Parce que moi je me débrouille en bricolant et c'est vraiment pas top...
    (Existe-t'il un bouquin type dictionnaire avec toutes les lignes de commandes existantes ?)

    Cldt

  12. #12
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Il y a 36 manières d'apprendre, la plus sûre est de faire beaucoup d'applications, de regarder, tester et comprendre n'importe quel sujet sur le forum (même si c'est loin de ton centre d'intérêt. Il y a aussi la FAQ, les tutos et les contributions des membres de ce précieux forum.
    Dans n'importe quel domaine, une meilleure organisation permettra d'alléger considérablement le travail à faire.
    Par exemple, dans ton cas précis
    Tu as crée un joli userform MAIS avec le choix aléatoire des noms de tes textbox et chekbox.
    Combien de lignes de codes tu pouvais épargner en nommant convenablement tes contrôles ou en utilisant des petits astuces tel que nommer les cellules destination sur ton fichier 1 et 2.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

+ 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