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 :

Demande de correction de code


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Chef de projet
    Inscrit en
    Avril 2016
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 90
    Par défaut Demande de correction de code
    Bonjour à tous,

    J'ai un soucis dans mon code que je n'arrive pas à résoudre. Est-ce que quelqu'un pourrait m'aider, s'il vous plait ?

    Voici le code :

    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
    '**********************************************************************************************
    'CODAGE SUR LE CHANGEMENT DE VALEUR DE LA FEUILLE
    '**********************************************************************************************
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim CELLULECIBLE As Range
    Dim CELLULECOPIE As Range
    Dim NOMFEUILLE As Integer
    
    ' DESACTIVATION DE LA MISE A JOUR DE L'ECRAN
    ' CELA PERMET QUE NE PAS VOIR L'ECRAN TREMBLE LORSQUE LE CODE S'EXECUTE
    
    ' Application.ScreenUpdating = False
    
    ' POSE LA CONDITION DE CONTROLE SEULEMENT SUR LA COLONNE "CREATION FEUILLE"
    ' SI LA CONDITION N'EST PAS REMPLIE ALORS ON SORT DE LA "SUB"
    
    If Target.Column <> 23 Then Exit Sub
    
    ' POSE LA CONDITION DU CHANGEMENT DE VALEUR DANS LA COLONNE "CREATION FEUILLE"
    ' SI LA CONDITION EST EGALE A RIEN ALORS ON SORT DE LA SUB
    
    If Target.Value = "" Then Exit Sub
    
    '********************************************************************************************
    
    '********************************************************************************************
    ' SI LA CONDITION OU LA CELLULE CIBLE EST EGALE A "N" ALORS UNE NOUVELLE LIGNE SE CREEE
    '********************************************************************************************
    
    '********************************************************************************************
    
            ' POSE LA CONDITION DU CONTROLE DE LA VALEUR DANS LA COLONNE "CREATION FEUILLE"
    
            If Target.Value = "N" Then
    
            ' APPEL DE LA FONCTION D'INSERTION DE LIGNE VIERGE
            
            '********************************************************************************************
            ' CODAGE SUR L'INSERTION D'UNE LIGNE
            '********************************************************************************************
    
            ' DECLARE LA DONNEE DE LA VARIABLE ICI ELLE DONNE LA POSITION DE MA VARIABLE :
            ' LA VARIABLE ETANT LA CELLULE ACTIVE ON LA DEFINIE PAR LA POSITION DE CELLE-CI
            ' ICI ON CIBLE LA CELLULE EN COLONNE "B" DE LA LIGNE DE DESSOUS
    
            Set CELLULECIBLE = ActiveCell.Offset(1, -22)
    
            ' INSERTION D'UNE LIGNE ENTIERE
    
            CELLULECIBLE.EntireRow.Insert
    
            ' SELECTION DE LA CELLULE CIBLEE EN VARIABLE
    
            CELLULECIBLE.Offset(-1, 0).Select
    
            '*********************************************************************************************
            ' CODAGE SUR LE COPIER COLLER D'UNE LIGNE EXEMPLE CONTENANT DES FORMULES DE CALCUL
            '*********************************************************************************************
    
            ' DECLARE LA DONNEE DE LA VARIABLE
            ' LA VARIBALE ETANT LA CELLULE ACTIVE ICI ON CIBLE LA CELLULE DE LA MEME LIGNE MAIS EN COLONNE "A"
    
            Set CELLULECOPIE = ActiveCell.Offset(0, -1)
            
            ' AFFICHAGE LA LIGNE "LIGNE_INVEST_MASQUEE"
    
            Range("LIGNE_INVEST_MASQUEE").EntireRow.Hidden = False
    
            ' COPIAGE LA LIGNE "LIGNE_INVEST_MASQUEE" AU DESSUS DE LA CELLULE CIBLEE
            ' CORRESPONDANT LA LIGNE INSEREE PRECEDEMMENT
    
            Range("LIGNE_INVEST_MASQUEE").EntireRow.Copy CELLULECOPIE
    
            ' MASQUAGE LA LIGNE "LIGNE_INVEST_MASQUEE"
    
            Range("LIGNE_INVEST_MASQUEE").EntireRow.Hidden = True
            
            '**********************************************************************************************
            ' CODAGE D'UN MESSAGE BOX POUR CONTINUER
            '**********************************************************************************************
    
            MsgBox "VOUS AVEZ REMARQUE UNE NOUVELLE LIGNE S'EST INSEREE SOUS LA LIGNE QUE VOUS AVEZ SAISIE", vbOKOnly
            
            MsgBox "RECOMMENCONS SI VOUS VOULEZ BIEN. SAISISSEZ UNE NOUVELLE LIGNE MAIS CETTE DANS LA COLONNE 'CREATION FEUILLE' RENTREZ LA LETTRE 'O' !", vbOKOnly
            
            End If
            
    '********************************************************************************************
    
    '********************************************************************************************
    ' SI LA CONDITION OU LA CELLULE CIBLE EST EGALE A "O" ALORS UNE NOUVELLE LIGNE ET UNE NOUVELLE FEUILLE SE CREEES
    '********************************************************************************************
    
    '********************************************************************************************
    
            ' POSE LA CONDITION D'EGALITE A LA LETTRE O POUR OUI
            ' SI LA CONDITION EST EGALE A O ALORS LA SUITE DU CODE S'EXECUTE
    
            If Target.Value = "O" Then
    
            '********************************************************************************************
            ' CODAGE SUR L'INSERTION D'UNE LIGNE
            '********************************************************************************************
    
            ' DECLARE LA DONNEE DE LA VARIABLE ICI ELLE DONNE LA POSITION DE MA VARIABLE :
            ' LA VARIABLE ETANT LA CELLULE ACTIVE ON LA DEFINIE PAR LA POSITION DE CELLE-CI
            ' ICI ON CIBLE LA CELLULE EN COLONNE "B" DE LA LIGNE DE DESSOUS
    
            Set CELLULECIBLE = ActiveCell.Offset(1, -22)
            Set CELLULECOPIE = ActiveCell.Offset(0, -23)
            NOMFEUILLE = Range(ActiveCell.Offset(0, -16)).Value
            
            ' INSERTION D'UNE LIGNE ENTIERE
    
            CELLULECIBLE.EntireRow.Insert
    
            ' SELECTION DE LA CELLULE CIBLEE EN VARIABLE
    
            CELLULECIBLE.Offset(-1, 0).Select
    
            '*********************************************************************************************
            ' CODAGE SUR LE COPIER COLLER D'UNE LIGNE EXEMPLE CONTENANT DES FORMULES DE CALCUL
            '*********************************************************************************************
    
            ' DECLARE LA DONNEE DE LA VARIABLE
            ' LA VARIBALE ETANT LA CELLULE ACTIVE ICI ON CIBLE LA CELLULE DE LA MEME LIGNE MAIS EN COLONNE "A"
    
            
            ' AFFICHAGE LA LIGNE "LIGNE_INVEST_MASQUEE"
    
            Range("LIGNE_INVEST_MASQUEE").EntireRow.Hidden = False
    
            ' COPIAGE LA LIGNE "LIGNE_INVEST_MASQUEE" AU DESSUS DE LA CELLULE CIBLEE
            ' CORRESPONDANT LA LIGNE INSEREE PRECEDEMMENT
    
            Range("LIGNE_INVEST_MASQUEE").EntireRow.Copy CELLULECOPIE
    
            ' MASQUAGE LA LIGNE "LIGNE_INVEST_MASQUEE"
    
            Range("LIGNE_INVEST_MASQUEE").EntireRow.Hidden = True
    
            
            '**********************************************************************************************
            ' CODAGE POUR AJOUTER UNE FEUILLE NOMMEE
            '**********************************************************************************************
    
            ' VERIFICATION DU NOM DE LA FEUILLE
            ' SI LE NOM DE FEUILLE EXISTE DEJA ALORS MONTRER UNE MESSAGE BOX
            ' REMETTRE LA CELLULE SELECTIONNER SUR LA CELLULE DE NOM
            ' ET ARRETER LE CODE
        
            ' COPIAGE DE LA FEUILLE EN INSERTION "APRES" LA FEUILLE "RECAPITULATIF"
        
            Sheets("FEUILLE EXEMPLE").Copy After:=Sheets("RECAPITULATIF")
            
            ' SELECTION DE LA NOUVELLE FEUILLE
            
            Sheets("FEUILLE EXEMPLE (2)").Name = NOMFEUILLE
    
            ' RENOMMAGE DE LA FEUILLE CREE AVEC LA VALEUR CONTENUE DANS LA COLONNE "H"
        
            'ActiveSheet.Name = NOMFEUILLE
            
            '**********************************************************************************************
            ' FIN DE CODE
            '**********************************************************************************************
    
            'SELECTION DE LA CELLULE DE LA COLLONNE "B" ET DE LA LIGNE INSEREE
            
            Sheets("RECAPITULATIF").Select
    
            CELLULECIBLE.Offset(-1, 0).Select
            
            Set CELLULECOPIE = Nothing
            
            '**********************************************************************************************
            ' CODAGE D'UN MESSAGE BOX POUR CONTINUER
            '**********************************************************************************************
    
            MsgBox "VOUS AVEZ REMARQUE UNE NOUVELLE FOIS UNE LIGNE S'EST INSEREE SOUS LA LIGNE QUE VOUS AVEZ SAISIE", vbOKOnly
            
            MsgBox "MAIS CE N'AI PAS TOUT, VOUS AVEZ PEUT ÊTRE REMARQUE EGALEMENT QU'UNE NOUVELLE FEUILLE C'EST INSEREE ! EN PLUS ELLE EST DEJA NOMMEE", vbOKOnly
            
            End If
            
    '*********************************************************************************************
    
    '*********************************************************************************************
    ' SI LA CONDITION EST LA CELLULE ACTIVE EST DANS UNE PLAGE D'UN DES TABLEAUX
    ' ET QUE LA LETTRE DANS LA COLONNE "CREATION FEUILLE" EST EGALE A "N" OU "O"
    ' ALORS UN TRI SE FAIT SUR LA PLAGE DE CELLULES EN QUESTION
    '*********************************************************************************************
    
    '*********************************************************************************************
    
            '**********************************************************************************************
            ' SI LA CONDITION DE LA CELLULE CIBLEE EST EGALE A "N" OU "O" ALORS
            '**********************************************************************************************
            
            If Target.Value = "N" Or Target.Value = "O" Then
            
            '**********************************************************************************************
            ' SI LA CONDITION DE LA CELLULE ACTIVE EST DANS LE TABLEAU CIBLE ALORS EXCEL REDIMENSIONNE CERTAINES PLAGES
            '**********************************************************************************************
            
            If Not Application.Intersect(ActiveCell, Range("TABLEAU_INVEST_1")) Is Nothing Then
            
            '**********************************************************************************************
            ' SI LA CONDITION DE LA CELLULE ACTIVE EST DANS LE TABLEAU CIBLE ALORS EXCEL REDIMENSIONNE CERTAINES PLAGES DU "TABLEAU_1"
            '**********************************************************************************************
            
            With Range("LIGNES_INVEST_1")
            
                .Resize(.Rows.Count + 1).Name = "LIGNES_INVEST_1"
            
            End With
            
            With Range("PLAN_DE_COMPTE_INVEST_1")
            
                .Resize(.Rows.Count + 1).Name = "PLAN_DE_COMPTE_INVEST_1"
                        
            End With
            
            '*********************************************************************************************
            ' CODAGE POUR TRIER LES LIGNES DANS L'ORDRE DES NUMERO DE COMPTES
            '*********************************************************************************************
    
            ' DESACTIVE TOUT LES FILTRES DE LA FEUILLE "RECAPITULATIF"
    
            ActiveWorkbook.Worksheets("RECAPITULATIF").Sort.SortFields.Clear
    
            ' AJOUTE UN FILTRE SUR LA COLONNE "NATURE/COMPTE" DANS L'ORDRE CROISSANT
    
            ActiveWorkbook.Worksheets("RECAPITULATIF").Sort.SortFields.Add Key:=Range("PLAN_DE_COMPTE_INVEST_1"), _
                SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
                
                With ActiveWorkbook.Worksheets("RECAPITULATIF").Sort
                   .SetRange Range("LIGNES_INVEST_1")
                   .Header = xlNo
                   .MatchCase = False
                   .Orientation = xlTopToBottom
                   .SortMethod = xlPinYin
                   .Apply
                End With
            
            End If
            
            '**********************************************************************************************
            ' SI LA CONDITION DE LA CELLULE ACTIVE EST DANS LE TABLEAU CIBLE ALORS EXCEL REDIMENSIONNE CERTAINES PLAGES
            '**********************************************************************************************
            
            If Not Application.Intersect(ActiveCell, Range("TABLEAU_INVEST_2")) Is Nothing Then
            
            '**********************************************************************************************
            ' SI LA CONDITION DE LA CELLULE ACTIVE EST DANS LE TABLEAU CIBLE ALORS EXCEL REDIMENSIONNE CERTAINES PLAGES DU "TABLEAU_1"
            '**********************************************************************************************
            
            With Range("LIGNES_INVEST_2")
            
                .Resize(.Rows.Count + 1).Name = "LIGNES_INVEST_2"
            
            End With
            
            With Range("PLAN_DE_COMPTE_INVEST_2")
            
                .Resize(.Rows.Count + 1).Name = "PLAN_DE_COMPTE_INVEST_2"
                        
            End With
            
            '*********************************************************************************************
            ' CODAGE POUR TRIER LES LIGNES DANS L'ORDRE DES NUMERO DE COMPTES
            '*********************************************************************************************
    
            ' DESACTIVE TOUT LES FILTRES DE LA FEUILLE "RECAPITULATIF"
    
            ActiveWorkbook.Worksheets("RECAPITULATIF").Sort.SortFields.Clear
    
            ' AJOUTE UN FILTRE SUR LA COLONNE "NATURE/COMPTE" DANS L'ORDRE CROISSANT
    
            ActiveWorkbook.Worksheets("RECAPITULATIF").Sort.SortFields.Add Key:=Range("PLAN_DE_COMPTE_INVEST_2"), _
                SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
                
                With ActiveWorkbook.Worksheets("RECAPITULATIF").Sort
                   .SetRange Range("LIGNES_INVEST_2")
                   .Header = xlNo
                   .MatchCase = False
                   .Orientation = xlTopToBottom
                   .SortMethod = xlPinYin
                   .Apply
                End With
            
            End If
            
                    '**********************************************************************************************
            ' SI LA CONDITION DE LA CELLULE ACTIVE EST DANS LE TABLEAU CIBLE ALORS EXCEL REDIMENSIONNE CERTAINES PLAGES
            '**********************************************************************************************
            
            If Not Application.Intersect(ActiveCell, Range("TABLEAU_INVEST_3")) Is Nothing Then
            
            '**********************************************************************************************
            ' SI LA CONDITION DE LA CELLULE ACTIVE EST DANS LE TABLEAU CIBLE ALORS EXCEL REDIMENSIONNE CERTAINES PLAGES DU "TABLEAU_1"
            '**********************************************************************************************
            
            With Range("LIGNES_INVEST_3")
            
                .Resize(.Rows.Count + 1).Name = "LIGNES_INVEST_3"
            
            End With
            
            With Range("PLAN_DE_COMPTE_INVEST_3")
            
                .Resize(.Rows.Count + 1).Name = "PLAN_DE_COMPTE_INVEST_3"
                        
            End With
            
            '*********************************************************************************************
            ' CODAGE POUR TRIER LES LIGNES DANS L'ORDRE DES NUMERO DE COMPTES
            '*********************************************************************************************
    
            ' DESACTIVE TOUT LES FILTRES DE LA FEUILLE "RECAPITULATIF"
    
            ActiveWorkbook.Worksheets("RECAPITULATIF").Sort.SortFields.Clear
    
            ' AJOUTE UN FILTRE SUR LA COLONNE "NATURE/COMPTE" DANS L'ORDRE CROISSANT
    
            ActiveWorkbook.Worksheets("RECAPITULATIF").Sort.SortFields.Add Key:=Range("PLAN_DE_COMPTE_INVEST_3"), _
                SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
                
                With ActiveWorkbook.Worksheets("RECAPITULATIF").Sort
                   .SetRange Range("LIGNES_INVEST_3")
                   .Header = xlNo
                   .MatchCase = False
                   .Orientation = xlTopToBottom
                   .SortMethod = xlPinYin
                   .Apply
                End With
            
            End If
    
            '**********************************************************************************************
            ' SI LA CONDITION DE LA CELLULE ACTIVE EST DANS LE TABLEAU CIBLE ALORS EXCEL REDIMENSIONNE CERTAINES PLAGES
            '**********************************************************************************************
            
            If Not Application.Intersect(ActiveCell, Range("TABLEAU_INVEST_4")) Is Nothing Then
            
            '**********************************************************************************************
            ' SI LA CONDITION DE LA CELLULE ACTIVE EST DANS LE TABLEAU CIBLE ALORS EXCEL REDIMENSIONNE CERTAINES PLAGES DU "TABLEAU_1"
            '**********************************************************************************************
            
            With Range("LIGNES_INVEST_4")
            
                .Resize(.Rows.Count + 1).Name = "LIGNES_INVEST_4"
            
            End With
            
            With Range("PLAN_DE_COMPTE_INVEST_4")
            
                .Resize(.Rows.Count + 1).Name = "PLAN_DE_COMPTE_INVEST_4"
                        
            End With
            
            '*********************************************************************************************
            ' CODAGE POUR TRIER LES LIGNES DANS L'ORDRE DES NUMERO DE COMPTES
            '*********************************************************************************************
    
            ' DESACTIVE TOUT LES FILTRES DE LA FEUILLE "RECAPITULATIF"
    
            ActiveWorkbook.Worksheets("RECAPITULATIF").Sort.SortFields.Clear
    
            ' AJOUTE UN FILTRE SUR LA COLONNE "NATURE/COMPTE" DANS L'ORDRE CROISSANT
    
            ActiveWorkbook.Worksheets("RECAPITULATIF").Sort.SortFields.Add Key:=Range("PLAN_DE_COMPTE_INVEST_4"), _
                SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
                
                With ActiveWorkbook.Worksheets("RECAPITULATIF").Sort
                   .SetRange Range("LIGNES_INVEST_4")
                   .Header = xlNo
                   .MatchCase = False
                   .Orientation = xlTopToBottom
                   .SortMethod = xlPinYin
                   .Apply
                End With
            
            End If
    
            End If
            
    'MsgBox "VOUS AVEZ PEUT ÊTRE ENCORE REMARQUE QUE LES LIGNES DES TABLEAUX SE SONT TRIEES PAR ORDRE DE NUMERO DE COMPTE", vbOKOnly
    
    ' ACTIVATION DE LA MISE A JOUR DE L'ECRAN ET DONNE UN SEUL CHANGEMENT DE CELUI-CI
    
    ' Application.ScreenUpdating = True
      
    ' FERMETURE DE LA "SUB"
    
    End Sub
    J'arrive à copier la feuille exemple et à l'insérer mais je n'arrive pas à la renommer avec une valeur de cellule. C'est la partie souligné qui me pose problème.

    Je vous joint le fichier en question.

    TABLEAU DE SUIVI V2 PARTAGE 2.xlsm

    Si quelqu'un peut m'aider à comprendre où est l'erreur.

    Bonne soirée.

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim NOMFEUILLE As Integer
    Tu déclare le nom de la feuille comme un entier, c'est normal ?
    Que vaut NOMFEUILLE au moment de l'erreur ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NOMFEUILLE = Range(ActiveCell.Offset(0, -16)).Value
    Travailler avec des select et des activecell est rarement une bonne idée, as-tu essayer de lancer ta macro en mode pas à pas (touche F8) pour être sur que ta cellule active soit bien celle que tu penses ?

  3. #3
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Tout d'abord ce code est très désagréable à lire à cause, de l'emploi inopportun des majuscules, des sauts de ligne inutiles et de l'excès de commentaires : comme pour le contrôle, trop de commentaires tue le commentaire !!!

    Il y a de nombreuses erreurs de concept dans le code :
    - il provoque l'évènement Change mais il n'est conçu comme un code récursif.
    - Target est la plage des cellules modifiées, elle n'est unique que lorsque Target.Count = 1.
    - il faut éviter l'emploi de : Select, ActiveCell, ActiveSheet, ActiveWorkbook, ...
    - plus généralement, préférer la référence à un objet défini plutôt que la référence à un objet actif.
    - éviter aussi les références implicites (en particulier pour Range), préférer une référence explicite (ex : Me.Range)
    - utiliser le type de variable ad hoc, par ex. éviter un Integer pour un Name (string)
    - ...

    Edit :
    Les conventions de codage facilitent la lecture et la compréhension du code. Voir ici :
    http://argyronet.developpez.com/office/vba/convention/
    et plus (trop) détaillé ici :
    http://usualsoft.com/Tutors/fics/ms_convcod.pdf

  4. #4
    Membre actif
    Homme Profil pro
    Chef de projet
    Inscrit en
    Avril 2016
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 90
    Par défaut
    Bonjour le forum, bonjour Patrice740,

    Je suis bien d'accord qu'il y a beaucoup de commentaire mais c'est fait express. cela est fait pour aider une personne qui ne connaîtrait rien au codage VBA.
    Je ne me mets pas seulement en tant que programmeur mais aussi comme utilisateur. Les majuscules sont ici pour bien différencier les noms de variables du codage.

    De plus Patrice740, je n'ai pas demandé à être critiquer mais à être aider. Donc ton commentaire ne sert à rien, mise à part de pollué une discussion qui pourrait aider d'autres personnes.

    Merci, bonne soirée.

  5. #5
    Membre actif
    Homme Profil pro
    Chef de projet
    Inscrit en
    Avril 2016
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 90
    Par défaut
    Bonsoir halaster08, le forum,

    J'ai bien essayé ce que tu m'as indiqué mais cela ne fonctionne pas. Je vérifie bien les valeurs donc je ne comprends pas l'erreur de la méthode range a échoué.

    En effet dans "NOMFEUILLE = Range(ActiveCell.Offset(0, -16)).Value", la variable "NOMFEUILLE" à une valeur 0 alors que le "Range(ActiveCell.Offset(0, -16)).Value" à la valeur "2 - 2" que je veux.

    Je pense que cela viens, après plusieurs éliminations d'indices, que cette partie de code ne fonctionne pas car je demande la valeur de la bonne cellule mais celle-ci est calculée par une concaténation.

    Je devrais peut-être penser autrement et ne pas prendre la valeur calculée de "Range(ActiveCell.Offset(0, -16)).Value" mais plutôt entrer "NOMFEUILLE = " concatenation de telle et telle cellule.

    Je vais essayé et je vous redis le résultat.

    Merci tout de même pour l'aide que vous m'apportez.

    a tout à l'heure.

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par Kris41 Voir le message
    [...] la variable "NOMFEUILLE" à une valeur 0 alors que le "Range(ActiveCell.Offset(0, -16)).Value" à la valeur "2 - 2"
    Citation Envoyé par Kris41 Voir le message
    De plus Patrice740, [...] ton commentaire ne sert à rien, mise à part de pollué une discussion ...
    Et pourtant ...
    Citation Envoyé par Patrice740 Voir le message
    Il y a de nombreuses erreurs de concept dans le code :
    [...]
    - utiliser le type de variable ad hoc, par ex. éviter un Integer pour un Name (string)

  7. #7
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par Kris41 Voir le message
    Bonjour le forum, bonjour Patrice740,

    Les majuscules sont ici pour bien différencier les noms de variables du codage.
    Oui Chef.

    Dans 99,999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 % des lignes de codes VB connues, ce qu'il y a entre Dim et As, c'est un nom de variable ou d'objet.



    De plus Patrice740, je n'ai pas demandé à être critiquer mais à être aider. Donc ton commentaire ne sert à rien, mise à part de pollué une discussion qui pourrait aider d'autres personnes.

    Merci, bonne soirée.
    Ah bon, laisser passer un code de broche à foin, truffé d'horreurs c'est aider ? T'es sûr d'être un (bon??????????????????) chef de projet ?

    Pour en rajouter. Tu utilises des comparaisons logiques avec des lettres majuscules uniquement et sans contrôle d'erreur ou de conversion de minuscules en majuscules. Un code d'amateur.

    Et puis, comme c'est extrêmement facile de confondre 0 et O sur un clavier et qu'il n'y a aucune protection contre cela sans ton code…

  8. #8
    Membre actif
    Homme Profil pro
    Chef de projet
    Inscrit en
    Avril 2016
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 90
    Par défaut
    Bonsoir Patrice740, le forum,

    Oui effectivement j'ai fais cette erreur que j'ai corrigé hier soir et cela fonctionne mieux. Après je sais que l'on peut critiqué mon code mais je me mets à la place de mes collègues qui n'ont que peu de connaissance Excel. Donc du coup, ils comprennent mieux le codage.

    Et je suis désolé, mais là encore j'ai un retour des mes collègues pour laquelle ils comprennent mieux avec ce que j'ai fais. Voir un code avec les conventions excel, n'est pas forcément mieux pour des débutants, car beaucoup se découragent juste en voyant un code bien écrit.

    Quand j'écris ce code je me mets à leur place et j'essai de faire en sorte que le code soit représentatif de leurs manipulations excel comment les copier, coller, supprimer et formules de calculs simple.

    Je ne dis pas non plus et je ne le dirais jamais que je suis bon dans le code vba, bien au contraire je cherche toujours à m'instruire sur ce sujet. Mais si mon action d'écrire un code compréhensible les aident à progresser alors je continuerais à le faire pour leurs expliqués.

    Donc, je continue ce code maladroit certes mais compréhensible et atteignable pour eux. Je dois finir ce premier code et je commence déjà à réfléchir pour aller sur un code plus propre mais toujours accessible et compréhensible pour eux.

    Bonne soirée.

Discussions similaires

  1. [MySQL] Demande correction du code
    Par ouiissemovic dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/04/2010, 18h18
  2. Réponses: 15
    Dernier message: 30/07/2008, 19h06
  3. Demande de corrections d'exercices Turbo Pascal
    Par Helpine dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 16/01/2005, 11h38

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