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 :

Variable objet ou variable de bloc With non définie [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Juin 2015
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Juin 2015
    Messages : 288
    Par défaut Variable objet ou variable de bloc With non définie
    bonjour le forum,

    je bute sur un pb depuis plusieurs jours sans trouver de solution sur les forums...
    (je ne suis pas un développeur de formation, j'apprends sur le tas - et sur le tard...)

    je cherche à manipuler les pièces jointes, reçues par mail, en .pdf ou .doc, en récupérant le nom du prestataire dans le nom du fichier
    ensuite je fais des vérifs pour déterminer la nature de l'intervention (TP ou Astreinte) + vérif que le prestataire est bien dans un fichier des effectifs qui liste tous nos prestataires.
    et si le nom n'est pas dans ce fichier, je le demande via inputbox
    je re-vérifie la saisie dans le xls des effectifs
    et là, ca plante avec "Variable objet ou variable de bloc With non définie"

    j'ai beau vérifier, je n'ai pas de "With..." sans "end with"
    je vous mets tout le code, ca plante sur la ligne en gras, juste avant l'affichage d'une boite de dialogue

    un grand merci d'avance pour votre aide !!!!!

    cordt

    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
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    646
    647
    648
    649
    650
    651
    652
    653
    654
    655
    656
    657
    658
    659
    660
    661
    662
    663
    664
    665
    666
    667
    668
    669
    670
    671
    672
    673
    674
    675
    676
    677
    678
    679
    680
    681
    682
    683
    684
    685
    686
    687
    688
    689
    690
    691
    692
    693
    694
    695
    696
    697
    698
    699
    700
    701
    702
    703
    704
    705
    706
    707
    708
    709
    710
    711
    712
    713
    714
    715
    716
    717
    718
    719
    720
    721
    722
    723
    724
    725
    Public Sub Extraction_CR_signed()
    
    
    Dim olApp As Outlook.Application
    Dim olSpace As Outlook.Namespace
    Dim olFolder As Outlook.MAPIFolder
    Dim olInbox As Outlook.MAPIFolder
    Dim olmail As Outlook.MailItem
    Dim pceJointe As Outlook.Attachment
    Dim fich As Object
    
    Dim y As Integer, x As Integer
    
    Dim NomDossier As String
    Dim myDestFolder As Outlook.MAPIFolder
    
    Dim Type_Fichier As String
    Dim estouvert As Boolean
    Dim continuer As String
    Dim Nom_Presta As String
    'Dim Periode As String
    Dim DotPosition As Byte
    Dim SemPosition As Byte
    Dim Longueur_NumSemaine As Byte
    Dim Longueur_Nom_Presta As Integer
    Dim Num_Semaine As Integer
    Dim Num_Mois As Integer
    Dim Site As String
    Dim Fact_HNO_FullFileName As String
    Dim Effectifs_FullFileName As String
    Dim annee As Integer
    Dim Num_TP As Long
    Dim Row_Ast As Integer
    Dim Col_Ast As Integer
    Dim Alpha_ColMois As String
    Dim Cell As Range
    Dim Row As Integer
    Dim SSII As String
    Dim TypeHNO As Integer
        
    '----   variables pour le choix ds 1 liste déroulante -----------------
     Dim i As Integer
     Dim TopPos As Integer
     Dim PrintDlg As DialogSheet
     Dim cb As OptionButton
     'Dim Choix1, Choix2
     Dim Choix1 As Variant
     'Dim fichier As Object
     Dim ArrChoix As Variant
     
    debut:
        Application.Calculation = xlManual ' bloque le calcul automatique.
        
        Set olApp = New Outlook.Application
        Set olSpace = olApp.GetNamespace("MAPI")
        Set olInbox = olSpace.GetDefaultFolder(olFolderInbox)
     
        'dans cet exemple, le dossier "CRs signed" est supposé etre un sous repertoire de la boite de réception
        NomDossier = "CRs signed"
        Set olFolder = olInbox.Folders(NomDossier)
        
        'récupération des infos
        Fact_HNO_FullFileName = ThisWorkbook.Name
        Effectifs_FullFileName = "TdB_effectifs.xlsx"
            
        'test si le(s) classeur(s) sont ouverts
        estouvert = False
        For Each fich In Workbooks
            If fich.Name = Effectifs_FullFileName Then estouvert = True
        Next
        If estouvert = False Then
            If FileDateTime("C:\fichiersxls\" & Effectifs_FullFileName) < Date Then
                MsgBox ("les fichiers shpt n'ont pas été copiés en local ! :-(")
                'ChDir "C:\fichiersxls"
                Exit Sub
            Else
                Workbooks.Open Filename:="C:\fichiersxls\" & Effectifs_FullFileName, UpdateLinks:=0
            End If
        End If
        
        'On regarde dans tous les mails du dossier
        For Each olmail In olFolder.Items
            'Debug.Print olmail.SenderEmailAddress
            On Error GoTo 0
            'S'il y a un fichier joint au mail
            'If olmail.SenderEmailAddress = Expediteur And _
                Not olmail.Attachments.Count = 0 Then
            If olmail.Attachments.Count > 0 Then
                x = 0 'nb de pièces jointes traitées pour le mail considéré
                'Debug.Print CDate(Format(olmail.ReceivedTime, "dd/mm/yyyy hh:nn"))
                'Pour toutes les pièces jointes du mail sélectionné (de 1 jusqu'à la dernière)
                For y = 1 To olmail.Attachments.Count
                    
                    'si l'extension de la piece jointe = "pdf"
                    If Right(olmail.Attachments(y), 3) = "pdf" Or Right(olmail.Attachments(y), 3) = "doc" Then
                    
                        'On récupère la pièce jointe n°y
                        Set pceJointe = olmail.Attachments(y)
                        Debug.Print pceJointe
                        x = x + 1 'on incémente le nb de pieces jointes traitées
                                 
                        'vérif si nom fichier au format Astr
                         
                        Longueur_Nom_Presta = InStr(1, pceJointe, "_w") - 2 'position de _w ds le nom du fichier
                        If Longueur_Nom_Presta < 0 Then
                            Longueur_Nom_Presta = InStr(1, pceJointe, "-w") - 2 'position de -w ds le nom du fichier
                        End If
                        If Longueur_Nom_Presta > 0 Then '--> CR Astr
                            Nom_Presta = Trim(Mid(pceJointe, 2, Longueur_Nom_Presta))
                            Nom_Presta = Trim(Mid(UCase(Nom_Presta), 1, 1)) & Trim(Mid(LCase(Nom_Presta), 2, Longueur_Nom_Presta - 1))
                            
                            'si c'est JCLegatte_... alors on enlève encore 1 caractère
                            If Nom_Presta = "Clegatte" Then Nom_Presta = "Legatte"
                            Debug.Print Nom_Presta
                            
                            'test sur effectifs
                            Windows(Effectifs_FullFileName).Activate
                            
                            'supp filtres éventuels
                            Range("A1").Select
                            Application.CutCopyMode = False
                            Selection.AutoFilter
                            Range("A1").Select
                            Selection.AutoFilter
                        
                            'Si une erreur survient, on va à la ligne "errorPrestaNameHandler" et on arrête la macro
                            'On Error GoTo errorPrestaNameHandler
                            On Error Resume Next
            
                            If Nom_Presta <> "beer" Then
                            'on teste la présence du nom exactement identique dans l'onglet "effectifs" :
                                'With Workbooks(Effectifs_FullFileName).Sheets(1)
                                '    .Range("a1:a500").Find(What:=Nom_Presta, After:=ActiveCell, LookIn:=xlFormulas, _
                                        LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                        MatchCase:=False, SearchFormat:=False).Activate
                                'End With
                                Columns("A:A").Select
                                Selection.Find(What:=Nom_Presta, After:=ActiveCell, LookIn:=xlValues, _
                                    LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                    MatchCase:=False, SearchFormat:=False).Activate
                            End If
                            On Error GoTo 0
                            Windows(Fact_HNO_FullFileName).Activate
                                 
                            SemPosition = InStr(1, pceJointe, "W") + 1 'position du début du n° de semaine
                            'Periode = "W"
                            
                            'on cherche le 1er K numérique
                            While Not IsNumeric(Mid(pceJointe, SemPosition, 1))
                                'Periode = "WE"
                                SemPosition = SemPosition + 1 'position du début du n° de semaine
                            Wend
                            
                            DotPosition = InStr(1, pceJointe, ".") 'position du .
                            
                            'on regarde le nb de caract du n° de semaine
                            If DotPosition - SemPosition >= 2 Then
                                Num_Semaine = Mid(pceJointe, SemPosition, 2) 'n° de semaine
                            Else
                                Num_Semaine = Mid(pceJointe, SemPosition, 1) 'n° de semaine
                            End If
                            Debug.Print Num_Semaine
                                 
                            'MAJ xls HNO onglet export_RDU avec date du jour
                            Windows(Fact_HNO_FullFileName).Activate
                            Sheets("export_RDU").Select
                            
                            'supp filtres
                            Range("A2").Select
                            Application.CutCopyMode = False
                            Selection.AutoFilter
                            Selection.AutoFilter
                        
                            'filtre sur presta/semaine
                            'On Error GoTo fin_boucle
                            ActiveSheet.ListObjects("Tableau9").Range.AutoFilter Field:=14, Criteria1:=Nom_Presta
                            ActiveSheet.ListObjects("Tableau9").Range.AutoFilter Field:=60, Criteria1:=Num_Semaine
                            
                            'rech derniere ligne
                            Row_Ast = Sheets("export_RDU").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
                            'si tableau vide, mssg d'erreur
                            If Row_Ast = 2 Then
                                MsgBox ("Aucune intervention pour " & Nom_Presta & " W" & Num_Semaine & ", corriger et relancer.")
                                Exit Sub
                            End If
                            
                            'MAJ colonne "reçu SSII" avec date du jour
                            Rows("2").Select
                            Selection.Find(What:="reçu SSII", After:=ActiveCell, LookIn:=xlValues, _
                                LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                MatchCase:=False, SearchFormat:=False).Activate
                            
                            Col_Ast = ActiveCell.Column
                            Alpha_ColMois = Split(Columns(ActiveCell.Column).Address(columnabsolute:=False), ":")(1)
        
                            For Each Cell In Range(Alpha_ColMois & "3:" & Alpha_ColMois & Row_Ast).SpecialCells(xlCellTypeVisible).Rows
                                Row = Cell.Row
                                Range(Alpha_ColMois & Row).Select
                                Range(Alpha_ColMois & Row).Value = CDate(Format(olmail.ReceivedTime, "dd/mm/yyyy"))
                            Next
                            
                            'récup site
                            Rows("2").Select
                            Selection.Find(What:="site", After:=ActiveCell, LookIn:=xlValues, _
                                LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                MatchCase:=False, SearchFormat:=False).Activate
                            
                            Col_Ast = ActiveCell.Column
                            Alpha_ColMois = Split(Columns(ActiveCell.Column).Address(columnabsolute:=False), ":")(1)
        
                            For Each Cell In Range(Alpha_ColMois & "3:" & Alpha_ColMois & Row_Ast).SpecialCells(xlCellTypeVisible).Rows
                                Row = Cell.Row
                            Next
                            Range(Alpha_ColMois & Row).Select
                            Site = Range(Alpha_ColMois & Row).Value
                            If LCase(Site) = "mougins" Then Site = "Sophia-Antipolis"
                            
                            'récup ssii porteuse
                            Rows("2").Select
                            Selection.Find(What:="SSII_porteuse_Int", After:=ActiveCell, LookIn:=xlValues, _
                                LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                MatchCase:=False, SearchFormat:=False).Activate
                            
                            Col_Ast = ActiveCell.Column
                            Alpha_ColMois = Split(Columns(ActiveCell.Column).Address(columnabsolute:=False), ":")(1)
        
                            For Each Cell In Range(Alpha_ColMois & "3:" & Alpha_ColMois & Row_Ast).SpecialCells(xlCellTypeVisible).Rows
                                Row = Cell.Row
                            Next
                            Range(Alpha_ColMois & Row).Select
                            SSII = Range(Alpha_ColMois & Row).Value
                            
                            'récup n° mois
                            Rows("2").Select
                            Selection.Find(What:="mois_Int", After:=ActiveCell, LookIn:=xlValues, _
                                LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                MatchCase:=False, SearchFormat:=False).Activate
                            
                            Col_Ast = ActiveCell.Column
                            Alpha_ColMois = Split(Columns(ActiveCell.Column).Address(columnabsolute:=False), ":")(1)
        
                            For Each Cell In Range(Alpha_ColMois & "3:" & Alpha_ColMois & Row_Ast).SpecialCells(xlCellTypeVisible).Rows
                                Row = Cell.Row
                            Next
                            Range(Alpha_ColMois & Row).Select
                            Num_Mois = Format(Range(Alpha_ColMois & Row).Value, "00")
                            If Num_Semaine > 50 And Num_Mois = 1 Then Num_Mois = 12
                            
                            'récup année
                            'Rows("2").Select
                            'Selection.Find(What:="date et heure", After:=ActiveCell, LookIn:=xlValues, _
                                LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                MatchCase:=False, SearchFormat:=False).Activate
                            
                            'Col_Ast = ActiveCell.Column
                            'Alpha_ColMois = Split(Columns(ActiveCell.Column).Address(columnabsolute:=False), ":")(1)
        
                            'For Each Cell In Range(Alpha_ColMois & "3:" & Alpha_ColMois & Row_Ast).SpecialCells(xlCellTypeVisible).Rows
                            '    Row = Cell.Row
                            'Next
                            'Range(Alpha_ColMois & Row).Select
                            'annee = Year(Range(Alpha_ColMois & Row).Value)
                            annee = 2016
                            
                            On Error GoTo 0
                            
                            'supp filtres
                            'ActiveSheet.ListObjects("Tableau9").Range.AutoFilter Field:=60
                            'ActiveSheet.ListObjects("Tableau9").Range.AutoFilter Field:=14
                            
                            'ENR pièce jointe ss shpt
                            pceJointe.SaveAsFile "Y:\test\CRA astreintes et TPs\Astreintes\2-revenu signé SSII\" & annee & "\" & Site & "\" & Num_Mois & "\" & SSII & "-" & Nom_Presta & "-w" & Num_Semaine & "-signed.pdf"
                    
                            'del fichier équivalent ss "1-envoyé SSII"
                            On Error Resume Next
                            Kill "Y:\test\CRA astreintes et TPs\Astreintes\1-envoyé SSII\" & Site & "\" & Num_Mois & "\" & pceJointe
                        Else
                            'verif si nom fichier au format TP
                            'If Not IsNumeric(Trim(Mid(pceJointe, 1, 1))) Then 'si 1er K <> numerique
                            Longueur_Nom_Presta = InStr(1, pceJointe, "_") - 1 'position de "_" ds le nom du fichier
                            If Longueur_Nom_Presta < 0 Then
                                Longueur_Nom_Presta = InStr(1, pceJointe, "-") - 1 'position de - ds le nom du fichier
                            End If
                            If Longueur_Nom_Presta > 0 Then 'check si conforme CR TP
                                Nom_Presta = Trim(Mid(pceJointe, 1, Longueur_Nom_Presta))
                                
                                'traitt des erreurs
                                'si clic sur Annuler (vide)
                                If Nom_Presta = "" Then Exit Sub
                                Debug.Print Nom_Presta
                                
                                'si nom_presta n'est pas ds les effectifs
                                Windows(Effectifs_FullFileName).Activate
                                
                                'supp filtres éventuels
                                Range("A1").Select
                                Application.CutCopyMode = False
                                Selection.AutoFilter
                                Range("A1").Select
                                Selection.AutoFilter
                            
                                'Si une erreur survient, on va à la ligne "errorPrestaNameHandler" et on arrête la macro
                                'On Error GoTo errorPrestaNameHandler
                                On Error GoTo pdfNonConforme
                
                                If Nom_Presta <> "beer" Then
                                'on teste la présence du nom exactement identique dans l'onglet "effectifs" :
                                    'With Workbooks(Effectifs_FullFileName).Sheets(1)
                                        '.Range("a1:a500").Find(What:=Nom_Presta, After:=ActiveCell, LookIn:=xlFormulas, _
                                            LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                            MatchCase:=False, SearchFormat:=False).Activate
                                    'End With
                                    Columns("A:A").Select
                                    Selection.Find(What:=Nom_Presta, After:=ActiveCell, LookIn:=xlValues, _
                                        LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                        MatchCase:=False, SearchFormat:=False).Activate
                                End If
                                On Error GoTo 0
                                Windows(Fact_HNO_FullFileName).Activate
                                 
                                'Longueur_Nom_Presta = Len(Nom_Presta)
                                Num_TP = Mid(pceJointe, Len(Nom_Presta) + 2, InStr(1, pceJointe, "-") - Len(Nom_Presta) - 2)
                                
                                'traitt des erreurs
                                If Not IsNumeric(Num_TP) Then GoTo MsgErr
                                'Debug.Print "num tp :" & Num_TP
                                
                                'xls HNO, onglet TPs
                                Windows(Fact_HNO_FullFileName).Activate
                                Sheets("Planning TPs").Select
                                
                                'supp filtres
                                Range("A2").Select
                                Application.CutCopyMode = False
                                Selection.AutoFilter
                                Selection.AutoFilter
                        
                                'récup année, mois, SSII
                                Columns("A:A").Select
                                Selection.Find(What:=Num_TP & "_" & Nom_Presta, After:=ActiveCell, LookIn:=xlValues, _
                                    LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                    MatchCase:=False, SearchFormat:=False).Activate
                                
                                annee = Year(ActiveCell.Offset(0, 2).Value)
                                Num_Mois = Month(ActiveCell.Offset(0, 2).Value)
                                Site = ActiveCell.Offset(0, 29).Value
                                If LCase(Site) = "mougins" Then Site = "Sophia-Antipolis"
                                SSII = ActiveCell.Offset(0, 20).Value
                                'MAJ xls HNO onglet TP avec date du jour
                                ActiveCell.Offset(0, 35).Value = CDate(Format(olmail.ReceivedTime, "dd/mm/yyyy"))
                                'Debug.Print SSII
                             
                                'ENR pièce jointe ss shpt
                                'Y:\test\CRA astreintes et TPs\TP\2-revenu signé SSII\2016\Bagnolet\12
                                On Error Resume Next
                                pceJointe.SaveAsFile "Y:\test\CRA astreintes et TPs\TP\2-revenu signé SSII\" & annee & "\" & Site & "\" & Num_Mois & "\" & pceJointe
                                Debug.Print Error
                                If Error = "Impossible d'enregistrer la pièce jointe." Then MsgBox ("Impossible d'enregistrer la pièce jointe --> copier le fichier à la main dans ''2-revenu signé SSII/" & Site & "/" & Num_Mois & "''")
                                On Error GoTo 0
                        
                                'del fichier équivalent ss "1-envoyé SSII"
                                On Error Resume Next
                                pceJointe = Nom_Presta & "_" & Num_TP & "-*.pdf"
                                'Debug.Print pceJointe
                                Kill "Y:\test\CRA astreintes et TPs\TP\1-envoyé SSII\" & Site & "\" & Num_Mois & "\" & pceJointe
                                If Error = "Fichier introuvable" Then MsgBox ("Fichier introuvable --> supp. le fichier à la main de ''1-envoyé SSII/" & Site & "/" & Num_Mois & "''")
                                On Error GoTo 0
                            'End If
                            Else 'nom CR Astr et TP non conforme
    SaisiePresta:
    pdfNonConforme:
                                'save sur C:/
                                pceJointe.SaveAsFile "C:\Users\obwe6245\Documents\work-tmp\FTV\" & pceJointe
                                'ouverture pdf
                                'ThisWorkbook.FollowHyperlink "C:\leFichier.pdf"
                                ThisWorkbook.FollowHyperlink Address:="C:\Users\obwe6245\Documents\work-tmp\FTV\" & pceJointe
                                
                                'on demande les infos à traiter
                                Nom_Presta = InputBox("Nom du prestataire ?", Admin)
                            
                                'traitt des erreurs
                                'si clic sur Annuler (vide)
                                If Nom_Presta = "" Then GoTo errorPrestaNameHandler
                                
                                'si nom_presta n'est pas ds les effectifs
                                Windows(Effectifs_FullFileName).Activate
                                
                                'supp filtres éventuels
                                Range("A1").Select
                                Application.CutCopyMode = False
                                Selection.AutoFilter
                                Range("A1").Select
                                Selection.AutoFilter
                            
                                'Si une erreur survient, on va à la ligne "errorPrestaNameHandler" et on arrête la macro
                                On Error GoTo errorPrestaNameHandler
                                'On Error Resume Next
                
                                If Nom_Presta <> "beer" Then
                                'on teste la présence du nom exactement identique dans l'onglet "effectifs" :
                                    
                                    'With Workbooks(Effectifs_FullFileName).Sheets(1)
                                        '.Range("a1:a500").Find(What:=Nom_Presta, After:=ActiveCell, LookIn:=xlFormulas, _
                                            LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                            MatchCase:=False, SearchFormat:=False).Activate
                                    'End With
                                    Columns("A:A").Select
                                    Debug.Print Nom_Presta
                                    Selection.Find(What:=Nom_Presta, After:=ActiveCell, LookIn:=xlValues, _
                                        LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                        MatchCase:=False, SearchFormat:=False).Activate
                                End If
                                On Error GoTo 0
                                Windows(Fact_HNO_FullFileName).Activate
                                 
                                
        '----------------------------------------------------------
        '----------------------------------------------------------
        '  Permet l'affichage d'une boîte de dialogue
        '  pour choisir entre plus de deux options
         Application.ScreenUpdating = False
    
         '  Ajoute une feuille de dialogue temporaire
         Set PrintDlg = ActiveWorkbook.DialogSheets.Add
    
         '  Ajoute les boutons d'option
         ArrChoix = Array("", "Astreinte", "Perm Stat", "TP")
         TopPos = 100
         For i = 1 To 3
            PrintDlg.OptionButtons.Add 78, TopPos, 150, 16.5
            PrintDlg.OptionButtons(i).Text = ArrChoix(i)
            TopPos = TopPos + 13
         Next i
    
        '  Positionne les boutons OK et Annuler
         PrintDlg.Buttons.Top = 120
    
        'ajout d'un texte dans la boite de dialogue
        ActiveSheet.Labels.Add(80, 50, 160, 35).Select
        Selection.Characters.Text = "Option pour le type de HNO :"
    
         '  Dimensionne la hauteur, la largeur et le titre de la bte de dialogue
         With PrintDlg.DialogFrame
            '.Height = Application.Max(68, PrintDlg.DialogFrame.Top + TopPos - 34)
            '.Height = 130
            '.Width = 230
            .Caption = "Choisissez une option"
         End With
    
         '  Change l'ordre de tabulation des boutons OK et Annuler
         '  afin de donner le focus au premier bouton d'option
         PrintDlg.Buttons("Button 2").BringToFront
         PrintDlg.Buttons("Button 3").BringToFront
         PrintDlg.Show
    
         ' récupération du choix effectué
         For i = 1 To 3
            If PrintDlg.OptionButtons(i).Value = xlOn Then
               Choix1 = PrintDlg.OptionButtons(i).Text
            End If
         Next
         
         If Choix1 = "" Then
            MsgBox "Aucun choix n'a été fait"
            GoTo MsgErr
         End If
    
         '  Supprime la feuille de dialogue temporaire (sans message d'avertissement)
         Application.DisplayAlerts = False
         PrintDlg.Delete
         Application.DisplayAlerts = True
        
        
        
        
    '--------------- fin procédure choix ds 1 liste déroulante -------------
    '--------------- fin procédure choix ds 1 liste déroulante -------------
    '--------------- fin procédure choix ds 1 liste déroulante -------------
        
        
        
                                TypeHNO = CInt(Choix1)
                                If TypeHNO = 3 Then
    SaisieTP:
                                    Num_TP = InputBox("No du TP ?", Admin)
                                    
                                    'traitt des erreurs
                                    If Not IsNumeric(Num_TP) Then GoTo MsgErr
                                
                                    Windows(Fact_HNO_FullFileName).Activate
                                    Sheets("Planning TPs").Select
                                    
                                    'supp filtres
                                    Range("A2").Select
                                    Application.CutCopyMode = False
                                    Selection.AutoFilter
                                    Selection.AutoFilter
                            
                                    'récup année, mois, SSII
                                    Columns("A:A").Select
                                    Selection.Find(What:=Num_TP & "_" & Nom_Presta, After:=ActiveCell, LookIn:=xlValues, _
                                        LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                        MatchCase:=False, SearchFormat:=False).Activate
                                    
                                    annee = Year(ActiveCell.Offset(0, 2).Value)
                                    Num_Mois = Month(ActiveCell.Offset(0, 2).Value)
                                    Site = ActiveCell.Offset(0, 29).Value
                                    If LCase(Site) = "mougins" Then Site = "Sophia-Antipolis"
                                    SSII = ActiveCell.Offset(0, 20).Value
                                    'MAJ xls HNO onglet TP avec date du jour
                                    ActiveCell.Offset(0, 35).Value = CDate(Format(olmail.ReceivedTime, "dd/mm/yyyy"))
                                
                                    'ENR pièce jointe ss shpt
                                    Dim pceJointe_new As String
                                    pceJointe_new = Nom_Presta & "_" & Num_TP & "-" & pceJointe
                                    Debug.Print pceJointe_new
                                    Debug.Print "Y:\test\CRA astreintes et TPs\TP\2-revenu signé SSII\" & annee & "\" & Site & "\" & Num_Mois & "\" & pceJointe
                                    pceJointe.SaveAsFile "Y:\test\CRA astreintes et TPs\TP\2-revenu signé SSII\" & annee & "\" & Site & "\" & Num_Mois & "\" & pceJointe
                                    Name "Y:\test\CRA astreintes et TPs\TP\2-revenu signé SSII\" & annee & "\" & Site & "\" & Num_Mois & "\" & pceJointe As "Y:\test\CRA astreintes et TPs\TP\2-revenu signé SSII\" & annee & "\" & Site & "\" & Num_Mois & "\" & pceJointe_new
                                    
                                    'del fichier équivalent ss "1-envoyé SSII"
                                    On Error Resume Next
                                    Kill "C:\Users\obwe6245\Documents\work-tmp\FTV\" & pceJointe
                                    pceJointe = Nom_Presta & "_" & Num_TP & "*.pdf"
                                    Kill "Y:\test\CRA astreintes et TPs\TP\1-envoyé SSII\" & Site & "\" & Num_Mois & "\" & pceJointe
                                    If Error = "Fichier introuvable" Then MsgBox ("Fichier introuvable --> supp. le fichier à la main de ''1-envoyé SSII/" & Site & "/" & Num_Mois & "''")
                                    On Error GoTo 0
                                Else
                                    If TypeHNO = 1 Then 'si astreinte
                                        Num_Semaine = InputBox("N° de la semaine ?", Admin)
                                        
                                        'traitt des erreurs
                                        If Not IsNumeric(Num_Semaine) Then GoTo MsgErr
                                
                                        Windows(Fact_HNO_FullFileName).Activate
                                        Sheets("export_RDU").Select
                                        
                                        'supp filtres
                                        Range("A2").Select
                                        Application.CutCopyMode = False
                                        Selection.AutoFilter
                                        Selection.AutoFilter
                                    
                                        'filtre sur presta/semaine
                                        'On Error GoTo fin_boucle
                                        ActiveSheet.ListObjects("Tableau9").Range.AutoFilter Field:=14, Criteria1:=Nom_Presta
                                        ActiveSheet.ListObjects("Tableau9").Range.AutoFilter Field:=60, Criteria1:=Num_Semaine
                                        
                                        'rech derniere ligne
                                        Row_Ast = Sheets("export_RDU").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
                                        'si tableau vide, mssg d'erreur
                                        If Row_Ast = 2 Then
                                            MsgBox ("Aucune intervention pour " & Nom_Presta & " W" & Num_Semaine & ", corriger et relancer.")
                                            Exit Sub
                                        End If
                                        
                                        'MAJ colonne "reçu SSII" avec date du jour
                                        Rows("2").Select
                                        Selection.Find(What:="reçu SSII", After:=ActiveCell, LookIn:=xlValues, _
                                            LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                            MatchCase:=False, SearchFormat:=False).Activate
                                        
                                        Col_Ast = ActiveCell.Column
                                        Alpha_ColMois = Split(Columns(ActiveCell.Column).Address(columnabsolute:=False), ":")(1)
                    
                                        For Each Cell In Range(Alpha_ColMois & "3:" & Alpha_ColMois & Row_Ast).SpecialCells(xlCellTypeVisible).Rows
                                            Row = Cell.Row
                                            Range(Alpha_ColMois & Row).Select
                                            Range(Alpha_ColMois & Row).Value = CDate(Format(olmail.ReceivedTime, "dd/mm/yyyy"))
                                        Next
                                        
                                        'récup site
                                        Rows("2").Select
                                        Selection.Find(What:="site", After:=ActiveCell, LookIn:=xlValues, _
                                            LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                            MatchCase:=False, SearchFormat:=False).Activate
                                        
                                        Col_Ast = ActiveCell.Column
                                        Alpha_ColMois = Split(Columns(ActiveCell.Column).Address(columnabsolute:=False), ":")(1)
                    
                                        For Each Cell In Range(Alpha_ColMois & "3:" & Alpha_ColMois & Row_Ast).SpecialCells(xlCellTypeVisible).Rows
                                            Row = Cell.Row
                                        Next
                                        Range(Alpha_ColMois & Row).Select
                                        Site = Range(Alpha_ColMois & Row).Value
                                        If LCase(Site) = "mougins" Then Site = "Sophia-Antipolis"
                                        
                                        'récup ssii porteuse
                                        Rows("2").Select
                                        Selection.Find(What:="SSII_porteuse_Int", After:=ActiveCell, LookIn:=xlValues, _
                                            LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                            MatchCase:=False, SearchFormat:=False).Activate
                                        
                                        Col_Ast = ActiveCell.Column
                                        Alpha_ColMois = Split(Columns(ActiveCell.Column).Address(columnabsolute:=False), ":")(1)
                    
                                        For Each Cell In Range(Alpha_ColMois & "3:" & Alpha_ColMois & Row_Ast).SpecialCells(xlCellTypeVisible).Rows
                                            Row = Cell.Row
                                        Next
                                        Range(Alpha_ColMois & Row).Select
                                        SSII = Range(Alpha_ColMois & Row).Value
                                        
                                        'récup n° mois
                                        Rows("2").Select
                                        Selection.Find(What:="mois_Int", After:=ActiveCell, LookIn:=xlValues, _
                                            LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                            MatchCase:=False, SearchFormat:=False).Activate
                                        
                                        Col_Ast = ActiveCell.Column
                                        Alpha_ColMois = Split(Columns(ActiveCell.Column).Address(columnabsolute:=False), ":")(1)
                    
                                        For Each Cell In Range(Alpha_ColMois & "3:" & Alpha_ColMois & Row_Ast).SpecialCells(xlCellTypeVisible).Rows
                                            Row = Cell.Row
                                        Next
                                        Range(Alpha_ColMois & Row).Select
                                        Num_Mois = Format(Range(Alpha_ColMois & Row).Value, "00")
                                        If Num_Semaine > 50 And Num_Mois = 1 Then Num_Mois = 12
                                        
                                        'récup 1ere lettre prénom
                                        Dim FirstPrenom
                                        Rows("2").Select
                                        Selection.Find(What:="Prénom", After:=ActiveCell, LookIn:=xlValues, _
                                            LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                            MatchCase:=False, SearchFormat:=False).Activate
                                        
                                        Col_Ast = ActiveCell.Column
                                        Alpha_ColMois = Split(Columns(ActiveCell.Column).Address(columnabsolute:=False), ":")(1)
                    
                                        For Each Cell In Range(Alpha_ColMois & "3:" & Alpha_ColMois & Row_Ast).SpecialCells(xlCellTypeVisible).Rows
                                            Row = Cell.Row
                                        Next
                                        Range(Alpha_ColMois & Row).Select
                                        FirstPrenom = Mid(Range(Alpha_ColMois & Row).Value, 1, 1)
                                        
                                        annee = 2016
                                        
                                        On Error GoTo 0
                                        
                                        'ENR pièce jointe ss shpt
                                        pceJointe.SaveAsFile "Y:\test\CRA astreintes et TPs\Astreintes\2-revenu signé SSII\" & annee & "\" & Site & "\" & Num_Mois & "\" & SSII & "-" & Nom_Presta & "-w" & Num_Semaine & "-signed.pdf"
                                
                                        'del fichier équivalent ss "1-envoyé SSII"
                                        On Error Resume Next
                                        Kill "C:\Users\obwe6245\Documents\work-tmp\FTV\" & pceJointe
                                        pceJointe = FirstPrenom & Nom_Presta & "-w" & Num_Semaine & "*.pdf"
                                        Kill "Y:\test\CRA astreintes et TPs\Astreintes\1-envoyé SSII\" & Site & "\" & Num_Mois & "\" & pceJointe
                                        If Error = "Fichier introuvable" Then MsgBox ("Fichier introuvable --> supp. le fichier à la main de ''1-envoyé SSII/" & Site & "/" & Num_Mois & "''")
                                        On Error GoTo 0
                                    Else 'PermStat
                                        MsgBox ("traitt à faire ds la macro pour les PS... :-(")
                                    End If 'fin si typeHNO=Astr
                                End If 'fin si typeHNO=TP
                            End If 'fin check si CR TP
                        End If 'fin si CR ASTr
                           
                        Set pceJointe = Nothing
                    
    fin_boucle:
                    End If 'fin si extension = "pdf"
                'On passe à la pièce jointe suivante
                Next y
                
                'si aucune pièce jointe traitée, message
                If x = 0 Then
                    MsgBox ("PB : aucune pièce jointe traitée !!")
                End If
            End If
            
            'marquer le mail comme étant lu
            olmail.unread = False
            
            'Déplacement du mail dans un autre dossier du .pst
            Set myDestFolder = olSpace.Folders("Dossiers personnels Hebex")
            Set myDestFolder = myDestFolder.Folders("GFAT Team")
            Set myDestFolder = myDestFolder.Folders("z-HNO, déplacts, etc")
            
            If Nom_Presta = "legatte" Or Nom_Presta = "thebaud" Or Nom_Presta = "zimmer" Then
                Set myDestFolder = myDestFolder.Folders("*akka")
                Set myDestFolder = myDestFolder.Folders(CStr(annee))
                Set myDestFolder = myDestFolder.Folders(Nom_Presta)
                GoTo MoveMail
            End If
            
            Select Case SSII
                Case Is = "Aepsilon", "BeMore", "Blue Soft", "BlueSoft", "Squad"
                    Set myDestFolder = myDestFolder.Folders("*akka")
                    Set myDestFolder = myDestFolder.Folders(CStr(annee))
                    Set myDestFolder = myDestFolder.Folders(SSII)
                Case Is = "acg", "CRI", "Komposite", "Look For", "Look-For", "Orness"
                    Set myDestFolder = myDestFolder.Folders("*aptech")
                    Set myDestFolder = myDestFolder.Folders(CStr(annee))
                    Set myDestFolder = myDestFolder.Folders(SSII)
                Case Is = "OSIATIS"
                    Set myDestFolder = myDestFolder.Folders("Osiatis (Econocom-ESR)")
                    Set myDestFolder = myDestFolder.Folders(CStr(annee))
                Case Else
                    'Set myDestFolder = olSpace.Folders("Dossiers personnels Hebex")
                    'Set myDestFolder = myDestFolder.Folders("GFAT Team")
                    'Set myDestFolder = myDestFolder.Folders("z-HNO, déplacts, etc")
                    Set myDestFolder = myDestFolder.Folders(SSII)
                    Set myDestFolder = myDestFolder.Folders(CStr(annee))
            End Select
    MoveMail:
            olmail.Move myDestFolder
            
        'On passe au mail suivant
        Next olmail
     
        ' met en place le calcul automatique
        'Application.Calculation = xlAutomatic
    
    errorPrestaNameHandler:
        'MsgBox ("Le nom du prestataire " & Nom_Presta & " n'est pas correct.")
        continuer = MsgBox("Le nom du prestataire " & Nom_Presta & " n'est pas correct." & vbCrLf & "voulez-vs continuer ?", vbYesNo, Admin)
        If continuer = vbNo Then Exit Sub
        GoTo SaisiePresta
    
    MsgErr:
        'MsgBox ("Le No du TP " & Num_TP & " n'est pas correct.")
        continuer = MsgBox("Le No du TP " & Num_TP & " n'est pas correct." & vbCrLf & "voulez-vs reprendre ?", vbYesNo, Admin)
        If continuer = vbNo Then Exit Sub
        GoTo SaisieTP
    
    End Sub

  2. #2
    Membre expérimenté Avatar de EBRAG
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Avril 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 125
    Par défaut
    Bonjour,

    il semble que ce soit ton Nom_Presta qui ne soit pas trouvé dans la colonne A !

    Il te faut mettre en place une gestion d'erreur, du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    On Error Resume Next
    Err.Clear
    Selection.Find(What:=Nom_Presta, After:=ActiveCell, LookIn:=xlValues, _
                                        LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                        MatchCase:=False, SearchFormat:=False).Activate
    If Err.Number <> 0 Then
      'on fait quoi si Nom_Presta n'est pas trouvé
    End If
    On Error GoTo 0
    Bon courange

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    et là, ca plante avec "Variable objet ou variable de bloc With non définie"
    Ce message d'erreur peut s'afficher également si un IF n'a pas de End IF et ce dans un bloc With...End With donc vu la taille de ta procédure il est difficile de t'aider.
    Manifestement ta procédure exécute plusieurs tâches donc la première chose que je ferais à ta place c'est la découpe de cette procédure en plusieurs autres de taille plus modeste afin de bien structurer le code.
    Tu verras plus clair et tu pourras ainsi mieux isoler le problème.
    En attendant tu peux utiliser le débogueur avec le pas à pas (touche F8)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par EBRAG Voir le message
    Il te faut mettre en place une gestion d'erreur
    Bonjour,

    ou sans gestion d'erreur juste en suivant l'exemple dans l'aide VBA interne de cette méthode Find ! …

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  5. #5
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    Est ce normal d'avoir mis à tout bout de champ le signe "'" qui permet de mettre des commentaires dans le code ??
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'With Workbooks(Effectifs_FullFileName).Sheets(1)
                                '    .Range("a1:a500").Find(What:=Nom_Presta, After:=ActiveCell, LookIn:=xlFormulas, _
                                        LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                        MatchCase:=False, SearchFormat:=False).Activate
                                'End With
    Ligne : 132, 136, 308, 312, 402, 406
    443 et 448 le dernier with en with y'en a pas mais entre oui

    Vu le nombre de ligne j'ai fait juste une recherche de texte "with", j'ai pas envie de regarder + de 700 lignes

    sans compter les if en plus à vérifier voir même l'orthographe du code (lettre inversée par exemple)

    Faire plusieurs procédures est un bonne suggestion
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  6. #6
    Membre expérimenté Avatar de EBRAG
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Avril 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 125
    Par défaut
    Bonjour Autodidacte !

    Il arrive qu'on fasse des essais, qu'on souhaite désactiver certaines instructions temporairement, pour faire des tests, et selon la suite à donner, supprimer les lignes d'instructions inutiles ou les réactiver.

    pour répondre à la question, pendant une phase de test, c'est normal, dans l'application finale, ça l'est moins !

  7. #7
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Je suis tout à fait d'accord mais vu le nombre de lignes , une mauvaise désactivation à un endroit et hop ça plante. Compliqué de coder dans ces conditions surtout si on fait une erreur , minime soit elle, bonjour le déboggage.
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  8. #8
    Membre éclairé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Juin 2015
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Juin 2015
    Messages : 288
    Par défaut
    bonjour à tous !

    désolé de ne aps avoir réagi plus tôt mais j'étais parti en formation
    et j'avais posté avant de partir, espérant avoir une réponse à mon retour - et j'en ai eu plusieurs ! Merci !!!
    je dois d'abord rattraper mon retard ds mon boulot avant de pouvoir "m'amuser" avec ma nouvelle macro - et tester vos propositions...
    je pense que l'histoire du if/end if est la + probable..

    je vous tiens au courant asap !

    cordt

    [EDIT]
    alors pour répondre à qq points :
    - @RyuAutodidacte : oui en effet je suis en phase de mise au point d'où tous ces " ' " à tout bout de champ... et oui je ne suis pas àl 'abri d'en mettre un au mauvais endroit...
    - @Philippe Tulliez : j'use et j'abuse de F8...
    - @EBRAG : la gestion d'erreur proposée ne fonctionne pas dans le sens où j'ai encore la fenêtre "Variable objet ou variable de bloc With non définie"

    @Philippe Tulliez : j'ai vérifié mes If... End If en les numérotant :
    apparemment, je n'en ai pas oublié, je n'en ai aps en trop ; j'espérais que ce soit ça...

    par contre, en prenant le ss-ensemble de la macro où ça plante et en faisant F8, je rentre à un moment donné dans un "if" sans sortir par le "end if" :
    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
    On Error GoTo pdfNonConforme
     
    If Nom_Presta <> "beer" Then 'si12
    'on teste la présence du nom exactement identique dans l'onglet "effectifs" :
         Columns("A:A").Select
         Selection.Find(What:=Nom_Presta, After:=ActiveCell, LookIn:=xlValues, _
               LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
               MatchCase:=False, SearchFormat:=False).Activate
    End If 'si12
    On Error GoTo 0
    Windows(Fact_HNO_FullFileName).Activate
     
    pdfNonConforme:
     'save sur C:/
    pceJointe.SaveAsFile "C:\Users\obwe6245\Documents\work-tmp\FTV\" & pceJointe
    ...
    et on sort juste après Selection.Find... puisque (dans mon cas) la macro ne trouve pas le nom ; la macro demande ensuite de saisir <nom_presta> et on retrouve le meme code de verif avec un 2e Selection.Find...
    et là, ca plante avec le message "Variable objet ou variable de bloc With non définie"

    --> est-ce à cause du fait d'être sorti du If sans etre passé par End If ???

    cordt

    bjr,

    j'ai supprimé le test "if nom_presta<>"beer" then..." et j'ai le meme mssg
    :-(

  9. #9
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Oui c'est bien possible. À creuser.
    En plus si tu as mis des gestions d'erreurs dans ton code, non maîtrisé, c'est pas le top.
    Mieux vaut coder en évitant au maximum les gestions d'erreurs.
    Si tu rentres dans un if tu dois en sortir !

    Fais des tests en modifiant la partie en erreur
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  10. #10
    Membre éclairé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Juin 2015
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Juin 2015
    Messages : 288
    Par défaut
    re,

    c'est ce que je fais.
    je supprime petit à petit les "if"

    Donc :
    1/j'ai mis un nom en dur au lieu de Nom_Presta - pareil...
    2/j'ai un truc bizarre sur le test si l'extension de la piece jointe = "pdf" ou "doc" en début de procédure,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Right(olmail.Attachments(y), 3) = "pdf" Or Right(olmail.Attachments(y), 3) = "doc" Then...
    quand je le laisse, j'ai le message du début, comme d'hab'
    si je l'enlève - avec le End If correspondant - ca prend chaque pièce jointe du mail considéré sans tester l'extension
    donc dans ce cas, la 1ere piece jointe est un .gif
    ca ne trouve pas (logique) le nom du prestataire dans le nom de la piece jointe - MAIS CA NE PLANTE PAS dans le Selection.Find !
    j'ai laissé le code de EBRAG :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                                    '**********************
                                    On Error Resume Next
                                    Err.Clear
                                    Selection.Find(What:="ziadi", After:=ActiveCell, LookIn:=xlValues, _
                                                                        LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                                                                        MatchCase:=False, SearchFormat:=False).Activate
                                    If Err.Number <> 0 Then
                                      'on fait quoi si Nom_Presta n'est pas trouvé
                                   End If
    , et le code d'erreur est 91 - le meme que pour "Variable objet ou variable de bloc With non définie" mais la fenetre d'erreur ne s'affiche plus et ca passe à la ligne suivante !!!

    je précise que ce test fonctionne quand le pdf a un nom conforme et qu'on récupère Nom_Presta

    de plus, il y a qqchose de pas normal, car j'ai mis le nom en dur ("ziadi") qui existe dans le fichier des effectifs, mais il ne le trouve pas !!!

    une idée (car là, je ne sais pas quoi en penser) ???
    un pb de paramétrage d'excel ?

    cordt

    [EDI] au 2e passage pour la 2e piece jointe qui est un pdf, là, on retombe sur le mssg du début.
    j'hallucine...

  11. #11
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Pourquoi ne pas utiliser plutôt un Like pour vérifier le pdf ou le doc
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If toto Like "*.pdf" Or toto Like "*.doc" Then
    Edit : peu de temps et sur mon phone, mais si il y a quelque chose qui me saute aux yeux, j'en ferai part

    Edit 2 : Pour la gestion du find : Pourquoi ai-je une erreur lors d'une recherche si la valeur n'existe pas ?
    Refaire la partie du find comme l'exemple (adapté à votre contexte), ça sera déjà plus propre

    Mais comme il a été suggéré au début, se serait bien de découper tout le code en plusieurs procédures quitte à être appelé par l'une des procédures
    Si chacune des procédures marche correctement indépendamment (en mode test) il n'y a aucune raison par la suite pour que cela ne marche pas

    le fait de tester chaque procédure en mode pas à pas avec les variables locales sera plus simple
    (quitte à créer une/des variable(s) temporaire(s) dans la procédure testée avant finalisation de celle-ci)
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  12. #12
    Membre éclairé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Juin 2015
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Juin 2015
    Messages : 288
    Par défaut
    bonjour,

    merci pour cette suggestion !!!
    en fait, j'ai le même pb sur un autre fichier avec un code similaire : à la 2e recherche, ca plante :-(

    j'allais effectivement en parler ici et demander comme vous gérez les erreurs après une recherche...
    je crois que j'ai ma solution... que je testerai qd j'aurai du temps !

    je ne manquerai pas de vous tenir au courant !

    A bientôt donc !

    cordt

  13. #13
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    passage en coup de vent, je n'ai pas réellement regardé le problème qui a abouti à l'ouverture de la discussion, et qui semblerait être un problème de Find qui ne trouve rien (=il faut tester si l'objet = nothing)


    je viens juste de lire le passage où on cible du .doc et du .pdf

    donc pas de .docx ? ou autre extension .doc* ?

    rapport au test "Like" qui ne contient pas d'astérisque à la fin

  14. #14
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bien vu Joe
    J'ai pas pensé à le mettre
    =il faut tester si l'objet = nothing
    En effet comme proposé dans le post 12 => Edit 2
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  15. #15
    Membre éclairé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Juin 2015
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Juin 2015
    Messages : 288
    Par défaut
    bjr !

    je reviens sur ce sujet après plusieurs jours de silence, car je n'ai pas eu le temps de tester entre-temps, désolé

    donc a priori, c'est ok !!!!!!!

    j'ai "sorti" la recherche de <Nom_Presta> dans un module à part, que j'appelle désormais "à volonté"...
    ...module où j'ai un autre problème que je vais vous soumettre dans un thread à part.
    Je ne vais pas fermer ce thread tout de suite, des fois que le nv pb soit lié à celui-ci.


    merci bcp en tous cas pour votre temps !

    bien cordt à tous

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

Discussions similaires

  1. Variable objet ou variable bloc with non définie
    Par tarbala dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/05/2008, 12h19
  2. Variable objet ou variable de bloc With non définie
    Par sl1980 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/08/2007, 19h15
  3. Réponses: 11
    Dernier message: 12/06/2007, 09h26
  4. Variable objet ou variable d'un bloc With non définie.
    Par paradeofphp dans le forum ASP.NET
    Réponses: 2
    Dernier message: 21/05/2007, 20h41
  5. Réponses: 13
    Dernier message: 01/06/2006, 17h20

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