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 :

Une macro sur tous les onglets


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Support qualité logistique
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Support qualité logistique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Points : 2
    Points
    2
    Par défaut Une macro sur tous les onglets
    Bonjour,

    Je ne sais pas coder, je me contente de faire des macro, puis de venir chercher sur votre fofo (merci ), les bouts de codes qui me manque à droite ou à gauche pour que ça tienne la route, mais là je ne trouve pas.

    Ma macro est en deux partie :
    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
    ' IPTT Macro
    ' Macro enregistrée le 23/11/2012 par i0155970
    '
     
    '
        Cells.Select
        Range("K6").Activate
        Application.CutCopyMode = False
        With Selection
            .Orientation = 0
            .AddIndent = False
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        For Each ws In ActiveWorkbook.Worksheets
        With ws.Range("G13:G5312")
                .NumberFormat = "0"
                .Value = .Value
        End With
        Next
        Sheets("Feuil1").Select
        Sheets("Feuil1").Name = "CSMS"
    Jusque là tout va bien, mais la seconde, je souhaite qu'elle s'exécute sur tous les onglets présents (le nombre peut varié) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sheets("IP%1014").Select
        Range("M3").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,4,0)"
        Range("M3").Select
        Selection.AutoFill Destination:=Range("M3:M662")
        Range("M3:M662").Select
    Au final je crée cette macro pour une vingtaine de personnes, qui s'en serviront avec des extractions différentes (onglet CSMS) et des onglets IPTT différents à remplir ; et je ne sais pas vraiment comment rendre cette macro disponible facilement.
    Je me fais bien comprendre ?

    *Merci*

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Bonjour Maksym,

    Pour faire simple, je pense qu'une boucle suffira, tu as juste besoin de rajouter "For Each worksheets in thisworkbook ... Next" ainsi qu'une condition pour ne pas passer dans ton onglet CSMS ce qui donnera pour toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For Each Worksheets In ThisWorkbook
    If Worksheets.Name <> "CSMS" Then
        Range("M3").Select
            ActiveCell.FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,4,0)"
            Range("M3").Select
            Selection.AutoFill Destination:=Range("M3:M662")
            Range("M3:M662").Select
    End If
    Next
    Tu peux déjà essayer ca.

    Pour que les personnes relancent d'eux mêmes directement la macro, une chose simple que tu pourrais faire (selon moi) ce serait de créer un bouton dans ton/tes onglet(s), ils cliquent et la macro se lance.

    Je ne suis pas un pro non plus mais je te propose un autre code un peu plus épuré, a essayer on sait jamais que ca fonctionne du premier coup ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For Each Worksheets In ThisWorkbook
        If Worksheets.Name <> "CSMS" Then
            Cells(3, 13).Select
            With Selection
                .FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,4,0)"
                .AutoFill Destination:=Range("M3:M662")
            End With
        End If
    Next
    Cordialement

  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
    12 922
    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 : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Bonjour,

    @ nonohzx
    Désolé mais ta proposition de parcourir l'ensemble des feuilles est sans doute une bonne piste mais la manière dont est codifiée cette boucle est totalement erronée.
    As-tu testé la solution que tu proposes ?
    Je te conseille la lecture de ce tuto sur la gestion des boucles dans excel et tout particulièrement ce chapitre

    Exemple pour parcourir la collection des feuilles d'un classeur, ici l'on parcourt les feuilles du classeur où se trouve le code VBA (ThisWorkbbok).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub ListFeuilles()
     Dim sht As Worksheet
     ' Parcourir les feuilles du classeur où se trouve le code VBa
     For Each sht In ThisWorkbook.Worksheets
      ' Le code
      MsgBox sht.Name
      ' Pour tester le nom d'une feuille
      ' If sht.Name = "maFeuille" Then ... La suite du code
     Next
    End Sub

  4. #4
    Candidat au Club
    Homme Profil pro
    Support qualité logistique
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Support qualité logistique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Bonjour nonohzx et Philippe,

    Merci à vous deux de vous être penchés sur mon problème.

    Je dois dire que ça dépasse largement mon niveau de bidouillage là, et je ne parviens pas à intégrer votre solution Philippe.

    J'ajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub IPTT
    Dim sht As Worksheet
     ' Parcourir les feuilles du classeur où se trouve le code VBa
     ' 1ere partie de mon code, sur Feuil1, et qui se termine par renommer Feuil1 en CSMS
     For Each sht In ThisWorkbook.Worksheets
      ' 2ème partie de mon code qui doit s'appliquer à toutes les autres feuilles  MsgBox sht.Name
      ' Pour tester le nom d'une feuille
      ' If sht.Name = "maFeuille" Then ... La suite du code
     Next
    End Sub
    Je ne comprends pas dans cette dernière partie où apparaît la condition : si ma feuille s'appelle CSMS arrêter la macro.

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 922
    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 : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    La ligne sera (de mémoire, je n'ai pas accès au VBA pour l'instant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If sht.Name = "CSMS" Then Exit Sub
    Bonjour,
    Une autre solution est l'utilisation du SELECT CASE
    Exemple :
    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
    Sub IPTT()
     Dim sht As Worksheet
     '
     ' Code
     '
     ' Parcourir les feuilles du classeur où se trouve le code VBA
     For Each sht In ThisWorkbook.Worksheets
      Select Case sht.Name
       Case "DashBoard"
         Exit Sub ' Quitte la procédure
       Case "Feuil1", "Feuil2"
        Exit For ' Quitte la boucle
       Case "Feuil3"
        ' Code
       Case Else ' Toutes les autres feuilles
        ' Code
      End Select
     Next
     '
     ' Autre code
     '
     MsgBox "Boucle terminée"
    End Sub

  6. #6
    Candidat au Club
    Homme Profil pro
    Support qualité logistique
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Support qualité logistique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Je suis désolé mais j'ai vraiment du mal à l'appliquer.

    J'ai donc couper la macro en deux : la partie sur la Feuil1 (=> CSMS) marche bien.

    Ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sub IPTT2()
    Dim sht As Worksheet
    For Each sht In ThisWorkbook.Worksheets
    'code
    Ca fait tourner la macro en boucle sur la seconde feuille, mais pas sur les suivantes. (à la limite si ça doit faire la macro sur la feuille CSMS c'est pas grave, mais en dernier !)

  7. #7
    Membre régulier
    Homme Profil pro
    Salarié
    Inscrit en
    Septembre 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Salarié

    Informations forums :
    Inscription : Septembre 2012
    Messages : 49
    Points : 72
    Points
    72
    Par défaut
    Bonjour,

    Moi non plus je n'arrive pas à utiliser le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each sht In ThisWorkbook.Worksheets
    .
    .
    .
    Next
    Du coup j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For i = 1 To ActiveWorkbook.Worksheets.Count
    ActiveWorkbook.Worksheets(i).Activate
    .
    .
    .
    Next
    Mais de ce que je comprend, tu codes les macros directement sur les feuilles excel. Je ne suis pas sur, mais ça peut poser des problèmes. Créés un nouveau module pour plus de sécurité.

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 922
    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 : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai montré un code qui parcourt une collection de feuilles où la variable objet (ici sht) représente un des feuilles dans la boucle.
    Maintenant il faut savoir ce que vous voulez faire avec ces feuilles.
    Un petit exemple ici
    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
     For Each sht In ThisWorkbook.Worksheets
      Select Case sht.Name
       Case "Feuil1", "Feuil2" ' Ecrit dans cellule A1 de ces feuilles
        sht.Range("A1") = "Coucou"
       Case "Feuil3" ' Affiche le nom de cette feuille
        MsgBox sht.Name
        ' Code
       Case "Feuil5"
        sht.Activate    ' Active la feuille
       Case "Feuil4" 
        sht.Name = "Toto" ' Renomme cette feuille en Toto
       Case "Toto"
        sht.Name = "Feuil4" ' Renomme cette feuille en Feuil4
       Case Else ' Toutes les autres feuilles
        ' Code
      End Select
     Next
    Est-ce plus clair ?

  9. #9
    Candidat au Club
    Homme Profil pro
    Support qualité logistique
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Support qualité logistique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    J'avais laissé cette version de côté car dans mon cas les noms de feuilles ne seront jamais les mêmes, car cette macro est amenée à être utilisée par différentes personnes, sur différents projets..

  10. #10
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 239
    Points : 307
    Points
    307
    Par défaut
    Bonjour,

    j'arrive aaprès la tempête mais enfin ...

    Pour parcourir tous les onglets et si une majorité d'onglets doivent subirle même traitement , la structure for eech semble la plus adaptée ; Mais attention , il faut adapter le traitement car dans l'exemple décrit , le traitement s'effectue toujours sur le même onglet.
    Deplus , il faut eviter le exit for car la boucle s'arrête ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For Each sheet_ In activeworkbook.Worksheets
    If sheet_.Name <> "CSMS" Then
        Worksheets (sheet_.Name ). Range("M3").Select
          
      ActiveCell.FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,4,0)"
            Worksheets (sheet_.Name ). Range("M3").Select
            Selection.AutoFill Destination:=Range("M3:M662")
            Worksheets (sheet_.Name ).Range("M3:M662").Select
    End If
    Next
    i've made a mistake

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    For Each sheet_ In activeworkbook.Worksheets
    If sheet_.Name <> "CSMS" Then
        Worksheets (sheet_.Name ). Range("M3").Select
     
      ActiveCell.FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,4,0)"
            Worksheets (sheet_.Name ). Range("M3").Select
            Selection.AutoFill Destination:=Worksheets (sheet_.Name ). Range("M3:M662")
            Worksheets (sheet_.Name ).Range("M3:M662").Select
    End If
    Next

  11. #11
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par CodeFacile Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets (sheet_.Name ). Range("M3").Select
    Bonjour,

    Deux aberrations dans cette ligne:
    Pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets(sheet_.Name).Range
    alors que suffit?

    Le Select est à proscrire.

    Je me pose une autre question:
    Que viennent faire les 3 espaces?
    Sont-ils le résultat de code tapé sur le forum ou d'assemblage de morceaux piqués çà et là?

  12. #12
    Candidat au Club
    Homme Profil pro
    Support qualité logistique
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Support qualité logistique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Désolé à nouveau, mais j'ai trimé dessus et je n'arrive à appliquer aucune de vos solutions. Je vous mets le code en entier, et il marche comme ça, reste à le faire glisser sur tous les onglets, quelque soit leur nom !

    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
    Sub IPTT()
    '
    ' IPTT Macro
    ' Macro enregistrée le 23/11/2012 par i0155970
    '
     
    '
        Cells.Select
        Range("K6").Activate
        Application.CutCopyMode = False
        With Selection
            .Orientation = 0
            .AddIndent = False
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        For Each ws In ActiveWorkbook.Worksheets
        With ws.Range("G13:G5312")
                .NumberFormat = "0"
                .Value = .Value
        End With
        Next
        Sheets("Feuil1").Select
        Sheets("Feuil1").Name = "CSMS"
        Sheets("IP%1014").Select
        Range("M3").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,4,0)"
        Range("M3").Select
        Selection.AutoFill Destination:=Range("M3:M662")
        Range("M3:M662").Select
        Range("M3").Select
        Selection.Copy
        Range("N3").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Selection.AutoFill Destination:=Range("N3:N662")
        Range("N3:N662").Select
        ActiveWindow.ScrollRow = 8
        ActiveWindow.ScrollRow = 15
        ActiveWindow.ScrollRow = 30
        ActiveWindow.ScrollRow = 37
        ActiveWindow.ScrollRow = 51
        ActiveWindow.ScrollRow = 58
        ActiveWindow.ScrollRow = 72
        ActiveWindow.ScrollRow = 87
        ActiveWindow.ScrollRow = 94
        ActiveWindow.ScrollRow = 115
        ActiveWindow.ScrollRow = 122
        ActiveWindow.ScrollRow = 137
        ActiveWindow.ScrollRow = 151
        ActiveWindow.ScrollRow = 158
        ActiveWindow.ScrollRow = 180
        ActiveWindow.ScrollRow = 194
        ActiveWindow.ScrollRow = 215
        ActiveWindow.ScrollRow = 230
        ActiveWindow.ScrollRow = 251
        ActiveWindow.ScrollRow = 280
        ActiveWindow.ScrollRow = 301
        ActiveWindow.ScrollRow = 322
        ActiveWindow.ScrollRow = 351
        ActiveWindow.ScrollRow = 372
        ActiveWindow.ScrollRow = 394
        ActiveWindow.ScrollRow = 415
        ActiveWindow.ScrollRow = 430
        ActiveWindow.ScrollRow = 451
        ActiveWindow.ScrollRow = 465
        ActiveWindow.ScrollRow = 480
        ActiveWindow.ScrollRow = 487
        ActiveWindow.ScrollRow = 501
        ActiveWindow.ScrollRow = 523
        ActiveWindow.ScrollRow = 530
        ActiveWindow.ScrollRow = 551
        ActiveWindow.ScrollRow = 573
        ActiveWindow.ScrollRow = 587
        ActiveWindow.ScrollRow = 608
        ActiveWindow.ScrollRow = 630
        ActiveWindow.ScrollRow = 651
        ActiveWindow.ScrollRow = 694
        ActiveWindow.ScrollRow = 730
        ActiveWindow.ScrollRow = 765
        ActiveWindow.ScrollRow = 808
        ActiveWindow.ScrollRow = 858
        ActiveWindow.ScrollRow = 894
        ActiveWindow.ScrollRow = 944
        ActiveWindow.ScrollRow = 980
        ActiveWindow.ScrollRow = 1023
        ActiveWindow.ScrollRow = 1044
        ActiveWindow.ScrollRow = 1051
        ActiveWindow.ScrollRow = 1065
        ActiveWindow.ScrollRow = 1073
        ActiveWindow.ScrollRow = 1080
        ActiveWindow.ScrollRow = 1087
        ActiveWindow.ScrollRow = 1094
        ActiveWindow.ScrollRow = 1101
        ActiveWindow.ScrollRow = 1108
        ActiveWindow.ScrollRow = 1115
        ActiveWindow.ScrollRow = 1123
        ActiveWindow.ScrollRow = 1130
        ActiveWindow.ScrollRow = 1137
        ActiveWindow.ScrollRow = 1151
        ActiveWindow.ScrollRow = 1173
        ActiveWindow.ScrollRow = 1180
        ActiveWindow.ScrollRow = 1194
        ActiveWindow.ScrollRow = 1215
        ActiveWindow.ScrollRow = 1230
        ActiveWindow.ScrollRow = 1251
        ActiveWindow.ScrollRow = 1258
        ActiveWindow.ScrollRow = 1280
        ActiveWindow.ScrollRow = 1287
        ActiveWindow.ScrollRow = 1273
        ActiveWindow.ScrollRow = 1258
        ActiveWindow.ScrollRow = 1244
        ActiveWindow.ScrollRow = 1230
        ActiveWindow.ScrollRow = 1208
        ActiveWindow.ScrollRow = 1187
        ActiveWindow.ScrollRow = 1173
        ActiveWindow.ScrollRow = 1158
        ActiveWindow.ScrollRow = 1151
        ActiveWindow.ScrollRow = 1137
        ActiveWindow.ScrollRow = 1130
        ActiveWindow.ScrollRow = 1108
        ActiveWindow.ScrollRow = 1101
        ActiveWindow.ScrollRow = 1087
        ActiveWindow.ScrollRow = 1080
        ActiveWindow.ScrollRow = 1073
        ActiveWindow.ScrollRow = 1065
        ActiveWindow.ScrollRow = 1058
        ActiveWindow.ScrollRow = 1051
        ActiveWindow.ScrollRow = 1044
        ActiveWindow.ScrollRow = 1037
        ActiveWindow.ScrollRow = 1030
        ActiveWindow.ScrollRow = 1023
        ActiveWindow.ScrollRow = 1015
        ActiveWindow.ScrollRow = 1001
        ActiveWindow.ScrollRow = 994
        ActiveWindow.ScrollRow = 987
        ActiveWindow.ScrollRow = 980
        ActiveWindow.ScrollRow = 973
        ActiveWindow.ScrollRow = 958
        ActiveWindow.ScrollRow = 951
        ActiveWindow.ScrollRow = 944
        ActiveWindow.ScrollRow = 937
        ActiveWindow.ScrollRow = 930
        ActiveWindow.ScrollRow = 923
        ActiveWindow.ScrollRow = 915
        ActiveWindow.ScrollRow = 930
        ActiveWindow.ScrollRow = 937
        ActiveWindow.ScrollRow = 951
        ActiveWindow.ScrollRow = 965
        ActiveWindow.ScrollRow = 980
        ActiveWindow.ScrollRow = 987
        ActiveWindow.ScrollRow = 994
        ActiveWindow.ScrollRow = 980
        ActiveWindow.ScrollRow = 973
        ActiveWindow.ScrollRow = 965
        ActiveWindow.ScrollRow = 958
        ActiveWindow.ScrollRow = 951
        ActiveWindow.ScrollRow = 944
        ActiveWindow.ScrollRow = 937
        ActiveWindow.ScrollRow = 930
        ActiveWindow.ScrollRow = 923
        ActiveWindow.ScrollRow = 915
        ActiveWindow.ScrollRow = 908
        ActiveWindow.ScrollRow = 901
        ActiveWindow.ScrollRow = 894
        ActiveWindow.ScrollRow = 887
        ActiveWindow.ScrollRow = 880
        ActiveWindow.ScrollRow = 873
        ActiveWindow.ScrollRow = 865
        ActiveWindow.ScrollRow = 858
        ActiveWindow.ScrollRow = 851
        ActiveWindow.ScrollRow = 844
        ActiveWindow.ScrollRow = 837
        ActiveWindow.ScrollRow = 830
        ActiveWindow.ScrollRow = 823
        ActiveWindow.ScrollRow = 815
        ActiveWindow.ScrollRow = 808
        ActiveWindow.ScrollRow = 801
        ActiveWindow.ScrollRow = 794
        ActiveWindow.ScrollRow = 787
        ActiveWindow.ScrollRow = 780
        ActiveWindow.ScrollRow = 773
        ActiveWindow.ScrollRow = 765
        ActiveWindow.ScrollRow = 758
        ActiveWindow.ScrollRow = 751
        ActiveWindow.ScrollRow = 744
        ActiveWindow.ScrollRow = 737
        ActiveWindow.ScrollRow = 730
        ActiveWindow.ScrollRow = 723
        ActiveWindow.ScrollRow = 715
        ActiveWindow.ScrollRow = 708
        ActiveWindow.ScrollRow = 701
        ActiveWindow.ScrollRow = 694
        ActiveWindow.ScrollRow = 687
        ActiveWindow.ScrollRow = 680
        ActiveWindow.ScrollRow = 673
        ActiveWindow.ScrollRow = 665
        ActiveWindow.ScrollRow = 658
        ActiveWindow.ScrollRow = 651
        ActiveWindow.ScrollRow = 644
        ActiveWindow.ScrollRow = 637
        ActiveWindow.ScrollRow = 630
        ActiveWindow.ScrollRow = 623
        ActiveWindow.ScrollRow = 615
        ActiveWindow.ScrollRow = 608
        ActiveWindow.ScrollRow = 601
        ActiveWindow.ScrollRow = 594
        ActiveWindow.ScrollRow = 601
        ActiveWindow.ScrollRow = 608
        ActiveWindow.ScrollRow = 615
        ActiveWindow.ScrollRow = 623
        Range("M662:N662").Select
        Selection.AutoFill Destination:=Range("M662:N1012"), Type:=xlFillDefault
        Range("M662:N1012").Select
        Range("N1007").Select
        ActiveWindow.ScrollRow = 980
        ActiveWindow.ScrollRow = 965
        ActiveWindow.ScrollRow = 944
        ActiveWindow.ScrollRow = 923
        ActiveWindow.ScrollRow = 901
        ActiveWindow.ScrollRow = 880
        ActiveWindow.ScrollRow = 865
        ActiveWindow.ScrollRow = 844
        ActiveWindow.ScrollRow = 830
        ActiveWindow.ScrollRow = 815
        ActiveWindow.ScrollRow = 794
        ActiveWindow.ScrollRow = 773
        ActiveWindow.ScrollRow = 751
        ActiveWindow.ScrollRow = 737
        ActiveWindow.ScrollRow = 708
        ActiveWindow.ScrollRow = 680
        ActiveWindow.ScrollRow = 665
        ActiveWindow.ScrollRow = 637
        ActiveWindow.ScrollRow = 623
        ActiveWindow.ScrollRow = 608
        ActiveWindow.ScrollRow = 587
        ActiveWindow.ScrollRow = 565
        ActiveWindow.ScrollRow = 544
        ActiveWindow.ScrollRow = 530
        ActiveWindow.ScrollRow = 508
        ActiveWindow.ScrollRow = 494
        ActiveWindow.ScrollRow = 465
        ActiveWindow.ScrollRow = 444
        ActiveWindow.ScrollRow = 430
        ActiveWindow.ScrollRow = 401
        ActiveWindow.ScrollRow = 387
        ActiveWindow.ScrollRow = 372
        ActiveWindow.ScrollRow = 358
        ActiveWindow.ScrollRow = 344
        ActiveWindow.ScrollRow = 322
        ActiveWindow.ScrollRow = 308
        ActiveWindow.ScrollRow = 287
        ActiveWindow.ScrollRow = 272
        ActiveWindow.ScrollRow = 251
        ActiveWindow.ScrollRow = 237
        ActiveWindow.ScrollRow = 215
        ActiveWindow.ScrollRow = 201
        ActiveWindow.ScrollRow = 194
        ActiveWindow.ScrollRow = 172
        ActiveWindow.ScrollRow = 165
        ActiveWindow.ScrollRow = 151
        ActiveWindow.ScrollRow = 137
        ActiveWindow.ScrollRow = 130
        ActiveWindow.ScrollRow = 122
        ActiveWindow.ScrollRow = 115
        ActiveWindow.ScrollRow = 108
        ActiveWindow.ScrollRow = 101
        ActiveWindow.ScrollRow = 87
        ActiveWindow.ScrollRow = 72
        ActiveWindow.ScrollRow = 58
        ActiveWindow.ScrollRow = 51
        ActiveWindow.ScrollRow = 44
        ActiveWindow.ScrollRow = 30
        ActiveWindow.ScrollRow = 15
        ActiveWindow.ScrollRow = 8
        ActiveWindow.ScrollRow = 1
        Range("N3").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,5,0)"
        Range("N3").Select
        Selection.AutoFill Destination:=Range("N3:N1012")
        Range("N3:N1012").Select
        Range("N3").Select
        Selection.Copy
        Range("O3").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,6,0)"
        Range("O3").Select
        Selection.Copy
        Application.CutCopyMode = False
        Selection.AutoFill Destination:=Range("O3:O1012")
        Range("O3:O1012").Select
        Range("O3").Select
        Selection.Copy
        Range("P3").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,7,0)"
        Range("P3").Select
        Selection.AutoFill Destination:=Range("P3:P1012")
        Range("P3:P1012").Select
        Selection.NumberFormat = "m/d/yyyy"
        Range("Q5").Select
        ActiveWindow.ScrollColumn = 2
        ActiveWindow.ScrollColumn = 3
        ActiveWindow.ScrollColumn = 4
        ActiveWindow.ScrollColumn = 5
        ActiveWindow.ScrollColumn = 6
        ActiveWindow.ScrollColumn = 7
        ActiveWindow.ScrollColumn = 8
        ActiveWindow.ScrollColumn = 9
        ActiveWindow.ScrollColumn = 10
        ActiveWindow.ScrollColumn = 11
        ActiveWindow.ScrollColumn = 12
        Range("V3").Select
        ActiveCell.FormulaR1C1 = _
            "=IF(AND(VLOOKUP(RC4,CSMS!R13C7:R5312C31,11,0)=""N/A"",AND(VLOOKUP(RC4,CSMS!R13C7:R5312C31,20,0)=""yes"")),""Destroyed on site"",VLOOKUP(RC4,CSMS!R13C7:R5312C31,11,0))"
        Range("V3").Select
        Selection.AutoFill Destination:=Range("V3:V1012"), Type:=xlFillDefault
        Range("V3:V1012").Select
        Range("Y985").Select
        ActiveWindow.LargeScroll Down:=1
        ActiveWindow.ScrollRow = 1001
        ActiveWindow.ScrollRow = 994
        ActiveWindow.ScrollRow = 987
        ActiveWindow.ScrollRow = 965
        ActiveWindow.ScrollRow = 944
        ActiveWindow.ScrollRow = 923
        ActiveWindow.ScrollRow = 901
        ActiveWindow.ScrollRow = 880
        ActiveWindow.ScrollRow = 851
        ActiveWindow.ScrollRow = 823
        ActiveWindow.ScrollRow = 787
        ActiveWindow.ScrollRow = 758
        ActiveWindow.ScrollRow = 730
        ActiveWindow.ScrollRow = 708
        ActiveWindow.ScrollRow = 680
        ActiveWindow.ScrollRow = 658
        ActiveWindow.ScrollRow = 630
        ActiveWindow.ScrollRow = 608
        ActiveWindow.ScrollRow = 594
        ActiveWindow.ScrollRow = 573
        ActiveWindow.ScrollRow = 558
        ActiveWindow.ScrollRow = 551
        ActiveWindow.ScrollRow = 530
        ActiveWindow.ScrollRow = 523
        ActiveWindow.ScrollRow = 501
        ActiveWindow.ScrollRow = 487
        ActiveWindow.ScrollRow = 473
        ActiveWindow.ScrollRow = 465
        ActiveWindow.ScrollRow = 451
        ActiveWindow.ScrollRow = 437
        ActiveWindow.ScrollRow = 422
        ActiveWindow.ScrollRow = 415
        ActiveWindow.ScrollRow = 408
        ActiveWindow.ScrollRow = 387
        ActiveWindow.ScrollRow = 380
        ActiveWindow.ScrollRow = 365
        ActiveWindow.ScrollRow = 358
        ActiveWindow.ScrollRow = 351
        ActiveWindow.ScrollRow = 337
        ActiveWindow.ScrollRow = 322
        ActiveWindow.ScrollRow = 308
        ActiveWindow.ScrollRow = 301
        ActiveWindow.ScrollRow = 294
        ActiveWindow.ScrollRow = 280
        ActiveWindow.ScrollRow = 272
        ActiveWindow.ScrollRow = 258
        ActiveWindow.ScrollRow = 251
        ActiveWindow.ScrollRow = 244
        ActiveWindow.ScrollRow = 237
        ActiveWindow.ScrollRow = 230
        ActiveWindow.ScrollRow = 215
        ActiveWindow.ScrollRow = 208
        ActiveWindow.ScrollRow = 201
        ActiveWindow.ScrollRow = 194
        ActiveWindow.ScrollRow = 187
        ActiveWindow.ScrollRow = 180
        ActiveWindow.ScrollRow = 172
        ActiveWindow.ScrollRow = 158
        ActiveWindow.ScrollRow = 151
        ActiveWindow.ScrollRow = 137
        ActiveWindow.ScrollRow = 130
        ActiveWindow.ScrollRow = 115
        ActiveWindow.ScrollRow = 108
        ActiveWindow.ScrollRow = 94
        ActiveWindow.ScrollRow = 87
        ActiveWindow.ScrollRow = 80
        ActiveWindow.ScrollRow = 72
        ActiveWindow.ScrollRow = 65
        ActiveWindow.ScrollRow = 58
        ActiveWindow.ScrollRow = 51
        ActiveWindow.ScrollRow = 44
        ActiveWindow.ScrollRow = 37
        ActiveWindow.ScrollRow = 30
        ActiveWindow.ScrollRow = 22
        ActiveWindow.ScrollRow = 15
        ActiveWindow.ScrollRow = 8
        ActiveWindow.ScrollRow = 1
        Range("Y3").Select
        ActiveCell.FormulaR1C1 = _
            "=IF(VLOOKUP(RC4,CSMS!R13C7:R5312C31,11,0)=""N/A"",VLOOKUP(RC4,CSMS!R13C7:R5312C31,22,0),VLOOKUP(RC4,CSMS!R13C7:R5312C31,12,0))"
        Range("Y3").Select
        Selection.AutoFill Destination:=Range("Y3:Y1012"), Type:=xlFillDefault
        Range("Y3:Y1012").Select
        Range("Y1011").Select
        ActiveWindow.SmallScroll Down:=-33
        ActiveWindow.ScrollRow = 944
        ActiveWindow.ScrollRow = 937
        ActiveWindow.ScrollRow = 923
        ActiveWindow.ScrollRow = 915
        ActiveWindow.ScrollRow = 894
        ActiveWindow.ScrollRow = 873
        ActiveWindow.ScrollRow = 844
        ActiveWindow.ScrollRow = 815
        ActiveWindow.ScrollRow = 780
        ActiveWindow.ScrollRow = 744
        ActiveWindow.ScrollRow = 723
        ActiveWindow.ScrollRow = 694
        ActiveWindow.ScrollRow = 665
        ActiveWindow.ScrollRow = 637
        ActiveWindow.ScrollRow = 615
        ActiveWindow.ScrollRow = 587
        ActiveWindow.ScrollRow = 565
        ActiveWindow.ScrollRow = 544
        ActiveWindow.ScrollRow = 523
        ActiveWindow.ScrollRow = 508
        ActiveWindow.ScrollRow = 487
        ActiveWindow.ScrollRow = 473
        ActiveWindow.ScrollRow = 451
        ActiveWindow.ScrollRow = 430
        ActiveWindow.ScrollRow = 408
        ActiveWindow.ScrollRow = 387
        ActiveWindow.ScrollRow = 365
        ActiveWindow.ScrollRow = 344
        ActiveWindow.ScrollRow = 330
        ActiveWindow.ScrollRow = 315
        ActiveWindow.ScrollRow = 308
        ActiveWindow.ScrollRow = 287
        ActiveWindow.ScrollRow = 272
        ActiveWindow.ScrollRow = 251
        ActiveWindow.ScrollRow = 230
        ActiveWindow.ScrollRow = 208
        ActiveWindow.ScrollRow = 194
        ActiveWindow.ScrollRow = 172
        ActiveWindow.ScrollRow = 158
        ActiveWindow.ScrollRow = 144
        ActiveWindow.ScrollRow = 130
        ActiveWindow.ScrollRow = 122
        ActiveWindow.ScrollRow = 108
        ActiveWindow.ScrollRow = 101
        ActiveWindow.ScrollRow = 94
        ActiveWindow.ScrollRow = 80
        ActiveWindow.ScrollRow = 72
        ActiveWindow.ScrollRow = 65
        ActiveWindow.ScrollRow = 58
        ActiveWindow.ScrollRow = 51
        ActiveWindow.ScrollRow = 44
        ActiveWindow.ScrollRow = 37
        ActiveWindow.ScrollRow = 30
        ActiveWindow.ScrollRow = 22
        ActiveWindow.ScrollRow = 15
        ActiveWindow.ScrollRow = 8
        ActiveWindow.ScrollRow = 1
        ActiveWindow.ScrollColumn = 11
        ActiveWindow.ScrollColumn = 10
        ActiveWindow.ScrollColumn = 11
        Range("M3:Y6").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("V13").Select
    End Sub
    Oui je sais c'est sale...

    Merci à tous pour vos réponses en tout cas c'est plaisant de se faire aider spontanément.

  13. #13
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    L'enregistreur de Macros est un outil super pour trouver une syntaxe particulière comme, par exemple, une mise en forme.
    Mais il ne faut jamais en utiliser le résultat sans le retravailler.

    Dans le code que tu montres, il y a un tas de lignes inutiles telles que les Scroll qui ne sont que le reflet des mouvements que tu as faits à la souris.

    De plus, on n'arrête pas de répéter qu'il faut éviter d'utiliser les Select, Activate et autres Selection qui provoquent une grande instabilité du code.
    Imagine que, pendant le déroulement d'une macro un peu longue, l'utilisateur soit curieux de voir son évolution et se déplace dans les feuilles et/ou les cellules ou pire, s'impatiente et va sur un autre classeur. La sélection change en cours de route et toute la macro est faussée.

    La programmation Excel travaille sur des objets (Workbook, Worksheet, Range, etc..). Il faut essayer d'intégrer cette notion avant de commencer à programmer.

    Si ton code se situe dans le classeur traité (ce n'est pas toujours le cas), le premier objet à connaitre est ThisWorkbook qui est le classeur dans lequel se situe la macro en cours. Tu remarqueras la différence avec ActiveWorkbook qui est le classeur actif (donc au premier plan).

    La première ligne de ton code est Cells.Select.
    Tu sélectionnes toutes les cellules... mais de quelle feuille de quel classeur?

    Puis tu appliques une mise en forme sur cette sélection (je passe volontairement 2 lignes inutiles).
    Cette partie de code peux se résumer ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        With ThisWorkbook.Worksheets("LeNomDeLaFeuille").Cells ' Bien sûr, adapter le nom de la feuille...
          .Orientation = 0
          .AddIndent = False
          .ShrinkToFit = False
          .ReadingOrder = xlContext
          .MergeCells = False
        End With
    Je n'ai pas vérifié ce que fait cette mise en forme mais j'ai repris ton code pour l'exemple.
    Comprends-tu cette notion d'objets?

    On peut aprofondir un peu avec la portion de code suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        For Each ws In ActiveWorkbook.Worksheets
        With ws.Range("G13:G5312")
                .NumberFormat = "0"
                .Value = .Value
        End With
        Next
    Qui signifie: Pour chaque objet (qu'on nomme ws) dans la collection des Feuilles (Worksheets) du classeur actif (ActiveWorkbook) exécuter le code qui suit.
    Les objets d'une collection de feuilles sont des feuilles. Donc ws est une feuille.
    Aie... Un Active quelque chose...
    On va le remplacer par ThisWorkbook pour que, si l'utilisateur change de classeur pendant l'exécution de la macro, le traitement se fasse toujours sur le bon.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      For Each ws In ThisWorkbook.Worksheets
        With ws.Range("G13:G5312")
          .NumberFormat = "0"
          .Value = .Value
        End With
      Next
    Lignes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Sheets("Feuil1").Select
        Sheets("Feuil1").Name = "CSMS"
    Là, non plus, on n'a pas dit sur quel classeur on travaille et on a utilisé Select.
    Dans ce cas-ci, la ligne avec le Select est parfaitement inutile puisque, dans la ligne suivante, on va préciser par son nom de départ la feuille à renommer.
    Ce qui donne, une fois corrigé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ThisWorkbook.Sheets("Feuil1").Name = "CSMS"
    Je te propose encore la correction des 3 lignes suivantes puis je te laisse essayer d'utiliser ce que je t'ai expliqué plus haut.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Sheets("IP%1014").Select
        Range("M3").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,4,0)"
    On supprime les Select et ActiveCell et on précise le classeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ThisWorkbook.Sheets("IP%1014").Range("M3").FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,4,0)"
    Tu penses pouvoir continuer seul?
    N'oublie pas que tous les Scroll dans ton code sont inutiles et peuvent être retirés sauf si tu veux un effet "animation"...

  14. #14
    Candidat au Club
    Homme Profil pro
    Support qualité logistique
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Support qualité logistique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Salut AlainTech,

    Merci pour le temps que tu accordes à mon problème. Et apparemment, non je ne peux pas continuer seul.

    Premier point : tu utilises ThisWorkbook, donc tu pars de la feuille où la macro se situe. Dans mon VBA, elle est placée dans Module, et non sur cette "feuil1".

    Je commence à saisir la notion d'objets, je crois, mais je ne comprends pas pourquoi, dans un code qui est sensé s'appliquer à tous les feuilles d'un classeur quelque soit leur nom (puisque plusieurs utilisateurs différents), ThisWorkbook.Sheets("IP%1014"), le nom des autres feuilles (mis à part la première qui sera toujours nommée Feuil1) apparait.

    J'ai épuré mon code, et essayé de suivre tes instructions, mais ça bloque assez rapidement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sheets("IP%1014").Select
        Range("M3").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,4,0)"
        
        ThisWorkbook.Sheets("IP%1014").Range("M3").FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,4,0)"
        ThisWorkbook.Sheets("IP%1014").Range("M3").Copy
        ThisWorkbook.Sheets("IP%1014").Range("M3:M662").Paste.Application.CutCopyMode = False
        
        ThisWorkbook.Sheets("IP%1014").Range("N3").FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,5,0)"
        ThisWorkbook.Sheets("IP%1014").Range("N3").Copy
        ThisWorkbook.Sheets("IP%1014").Range("N3:N6").Paste.Application.CutCopyMode = False
          
        ThisWorkbook.Sheets("IP%1014").Range("M3:N662").Type = xlFillDefault

  15. #15
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 922
    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 : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Premier point : tu utilises ThisWorkbook, donc tu pars de la feuille où la macro se situe. Dans mon VBA, elle est placée dans Module, et non sur cette "feuil1".
    ThisWorkbook est le classeur et pas la feuille où se trouve le code VBA. Les feuilles, les modules font parties du classeur.

    Tu dis avoir épuré ton code mais malgré les remarques d'Alain, tu as encore des Select et Selection en ligne 1, 2 et 3

    Une autre petite remarque, dans un code lorsque l'on utilise le même objet à la suite comme ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ThisWorkbook.Sheets("IP%1014").Range("M3").FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,4,0)"
    ThisWorkbook.Sheets("IP%1014").Range("M3").Copy
    Il est préférable pour la lecture d'utiliser le bloc d'instruction With et ne pas oublier de terminer par End With
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With ThisWorkbook
     .Sheets("IP%1014").Range("M3").FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,4,0)"
     .Sheets("IP%1014").Range("M3").Copy
    End With

  16. #16
    Candidat au Club
    Homme Profil pro
    Support qualité logistique
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Support qualité logistique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Merci Philippe,

    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
        With ThisWorkbook.Worksheets("Feuil1").Cells
            .Orientation = 0
            .AddIndent = False
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        
        For Each ws In ThisWorkbook.Worksheets
        With ws.Range("G13:G5312")
                .NumberFormat = "0"
                .Value = .Value
        End With
        Next
        
        ThisWorkbook.Sheets("Feuil1").Name = "CSMS"
            
        With ThisWorkbook
        .Sheets("IP%1014").Range("M3").FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,4,0)"
        .Sheets("IP%1014").Range("M3").Copy
        .Sheets("IP%1014").Range("M3:M662").Paste
        
        .Sheets("IP%1014").Range("N3").FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,5,0)"
        .Sheets("IP%1014").Range("N3").Copy
        .Sheets("IP%1014").Range("N3:N662").Paste.Application.CutCopyMode = False
          
        .Sheets("IP%1014").Range("M3:N662").Type = xlFillDefault
        End With
    Voilà où j'en suis, mais avant de continuer, je voudrais savoir pourquoi mon "paste" ne passe plus ?

  17. #17
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 922
    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 : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Quand tu dis que cela ne passe plus, il n'est pas inintéressant d'indiquer la ligne où tu as un problème et surtout quel message d'erreur tu reçois parce-que forcément tu as eu un message d'erreur.
    La syntaxe pour un Copier/Coller c'est expression.Copy(Destination) (Extrait de l'aide de VBA)
    Quand on développe, il faut tout de même prendre de bonnes habitudes avant d'appeler au secours. Tu places ton curseur sur la méthode (Ici Copy) et tu cliques sur F1 et tu vas recevoir toute l'aide que tu veux, la syntaxe et des exemples.
    Petit exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With ThisWorkbook.Sheets("Feuil1")
    .Range("A2").Copy Range("A3:A100")
    .Range("D2").Copy Range("D3:D100")
    End With
    Tu auras aussi remarqué With ThisWorkbook.Sheets("Feuil1")

  18. #18
    Candidat au Club
    Homme Profil pro
    Support qualité logistique
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Support qualité logistique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Ok j'essaie d'avancer seul. Et la ligne qui me bloque est en rouge.

  19. #19
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 922
    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 : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Mais qu'est-ce qui bloque ?
    [EDIT]
    Je t'ai expliqué dans ma réponse quelle est est la bonne syntaxe.

  20. #20
    Candidat au Club
    Homme Profil pro
    Support qualité logistique
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Support qualité logistique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    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
     
        With ThisWorkbook.Sheets("IP%1014")
        .Range("M3").FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,4,0)"
        .Range("M3").Copy Range("M4:M662")
     
        .Range("N3").FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,5,0)"
        .Range("N3").Copy Range("N4:N662")
        End With
        'Copie de la formule ok, mais le collage se fait sur la bonne plage, mais sur
     la feuille où l'on se trouve, et non sur "IP%1014" (donc ActiveWorkbook si j'ai
     bien compris ; pourquoi ?!)
     
     
        With ThisWorkbook.Sheets("IP%1014")
        .Range("M3:N662").Type = xlFillDefault '"Propriété ou méthode non gérée par cet objet"

Discussions similaires

  1. [XL-2007] Optimisation d'une macro + Application à tous les onglets
    Par Identifiant75 dans le forum Excel
    Réponses: 53
    Dernier message: 05/05/2015, 19h23
  2. [LibreOffice] Executer une macro sur TOUS les documents ouvert
    Par Gomoz dans le forum OpenOffice & LibreOffice
    Réponses: 4
    Dernier message: 23/01/2015, 21h00
  3. Exécuter une macro sur tous les onglets d'un fichier sauf un
    Par Marsama dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/04/2011, 17h38
  4. Macro sur tous les onglets
    Par yann3131 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/01/2010, 17h35
  5. [XL-2003] Exécuter une macro sur tous les fichiers d'un dossier.
    Par ahmet dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/10/2009, 09h49

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