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 :

CleanTrim en lot au lieu de l'utilisé en boucle [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut CleanTrim en lot au lieu de l'utilisé en boucle
    Bonjour a vous,


    JE sollicite votre aide concernant un code que j'utilise depuis quelques temps. Ce code est une version du fameux Trim, mais qui enlève également certains caractère spéciaux.


    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
    Function CleanTrim(ByVal S As String, Optional ConvertNonBreakingSpace As Boolean = True) As String
     
        Dim x As Long, CodesToClean As Variant
     
        CodesToClean = Array(0, 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, 127, 129, 141, 143, 144, 157)
     
        If ConvertNonBreakingSpace Then S = Replace(S, Chr(160), " ")
     
        For x = LBound(CodesToClean) To UBound(CodesToClean)
     
        If InStr(S, Chr(CodesToClean(x))) Then S = Replace(S, Chr(CodesToClean(x)), "")
     
        Next
     
        CleanTrim = WorksheetFunction.Trim(S)
     
    End Function
    Je voudrais utilisé la fonction CleanTrim ou quelquechose qui fait la même chose, pour un ensemble de cellule d'un de mes documents de travail afin d'éviter d'avoir des espace et retour de chariot (alt+enter) apres certains donnés qui me cause problème lors de l'intégration du fichier dans une base donnée. Le CleanTrim est pours la seconde ligne de la colonne no_format_travail (qui est présentement L), f_travail (qui est présentement la colonne N), c_travail (qui est présentement la colonne O), g_travail (qui est présentement la colonne P) et sg_travail (qui est présentement la colonne Q) jusqu'à la dernière utilisé de chacune des colonnes.


    SI j'utilise CleanTrim dans une boucle, je n'ai pas de problème, je n'ai pas de message d'erreur.


    Si j'utilise CleanTrim dans un array ou Seulement dans un code qu'un range est égale au range affecté de CleanTrim j'arrive avec un message d'erreur. Donc je voudrais éviter de faire une boucle afin d eviter de ralentir le code..


    Voici mon code de depart


    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
    Sub copiedansproduit_item_creation()
     
        Dim x As Integer
        Dim cell As Variant
        Dim LettreVoulue As String
        LettreVoulue = TrouveLettreColonne([prov_long_travail])
     
     
        Application.ScreenUpdating = False
     
     
    'ici serais l'emplacement du Cleantrim 
     
     
     
     
    'enlever les lignes de produit_item si jamais on refais la macro
     
        Worksheets("produits_items").Range("a2:BZ" & LastLignUsedInSheet("produits_items") + 1).Delete
     
     
        Sheets("Travail").Select
     
     
       For Each cell In Worksheets("Travail").Range(LettreVoulue & 2, LettreVoulue & LastLignUsedInColumn(LettreVoulue))
     
            x = x + 1
     
     
        If IsEmpty(Cells(x + 1, [no_item_travail].Column).value) Then
     
    ' Si la couleur n'est pas un numéro ou le format n'est lui non plus un numéro ou
    ' si la provinciale courte est vide ou est égale a "???" ou le GAC ayant description régionale est vide ou est égale a "???"
    ' ou la provinciale longue est supérieur a 200 caractères ou la provinciale courte est supérieur a 100 caractères
    ' ou la famille classe groupe sous-groupe n'existe pas ou si le GAC ayant description régionale est ano ou gaceq ou sigma ou ??? et que la
    ' description régionale longue est supérieur de 200 et la courte supérieur a 100 et que le GAC ayant description courte est différent des choix
    ' possibles on indique un erreur et on quitte la sub
     
            If IsNumeric(Cells(x + 1, [no_couleur_travail].Column)) = False _
            Or IsNumeric(Cells(x + 1, [no_format_travail].Column)) = False _
            Or IsEmpty(Cells(x + 1, [no_format_travail].Column)) _
            Or IsEmpty(Cells(x + 1, [prov_court_travail].Column)) _
            Or Cells(x + 1, [prov_court_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [gac_travail].Column)) _
            Or Cells(x + 1, [gac_travail].Column) = "???" _
            Or Len(Cells(x + 1, [prov_long_travail].Column)) > 200 _
            Or Len(Cells(x + 1, [prov_court_travail].Column)) > 100 _
            Or Cells(x + 1, [fcgs_travail].Column) = "non" _
            Or ((Cells(x + 1, [gac_travail].Column) = "SIGMA" Or Cells(x + 1, [gac_travail].Column) = "sigma" _
            Or Cells(x + 1, [gac_travail].Column) = "gaceq" Or Cells(x + 1, [gac_travail].Column) = "GACEQ" _
            Or Cells(x + 1, [gac_travail].Column) = "ano" Or Cells(x + 1, [gac_travail].Column) = "ANO") _
            And (Cells(x + 1, [reg_long_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [reg_long_travail].Column)) _
            Or Len(Cells(x + 1, [reg_long_travail].Column)) > 200 _
            Or Cells(x + 1, [reg_court_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [reg_court_travail].Column)) Or Len(Cells(x + 1, [reg_court_travail].Column)) > 100)) _
            Or (Cells(x + 1, [gac_travail].Column) <> "gaceq" And Cells(x + 1, [gac_travail].Column) <> "GACEQ" _
            And Cells(x + 1, [gac_travail].Column) <> "sigma" And Cells(x + 1, [gac_travail].Column) <> "SIGMA" _
            And Cells(x + 1, [gac_travail].Column) <> "tous" And Cells(x + 1, [gac_travail].Column) <> "TOUS" _
            And Cells(x + 1, [gac_travail].Column) <> "ANO" And Cells(x + 1, [gac_travail].Column) <> "ano" _
            And Cells(x + 1, [gac_travail].Column) <> "aucun" And Cells(x + 1, [gac_travail].Column) <> "AUCUN") Then
     
                MsgBox "N'a pu transféré dans l'onglet produit_item, utiliser le bouton validation a fin de trouver les erreurs !!!", vbCritical
                Exit Sub
     
            Else
     
            If IsEmpty(Cells(x + 1, [no_item_travail].Column).value) Then
     
    'copie description provinciale longue
     
                Sheets("produits_items").Cells(x + 1, [desc_prov_pi].Column) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
    'copie description provinciale courte
     
                Sheets("produits_items").Cells(x + 1, [desc_prov_court_pi].Column) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
    'mettre vrai dans index des taxes
     
          Union(Sheets("produits_items").Cells(x + 1, [ind_tx_prov_pi].Column), _
                Sheets("produits_items").Cells(x + 1, [ind_taxe_fed_pi].Column)) = "TRUE"
     
     
    'mettre P dans code_portee_produit et dans code_portee_item
     
           Union(Sheets("produits_items").Cells(x + 1, [code_portee_produit_pi].Column), _
                 Sheets("produits_items").Cells(x + 1, [code_portee_item_pi].Column)) = "P"
     
    'copie de la famille
     
                Sheets("produits_items").Cells(x + 1, [no_famille_pi].Column) = Sheets("Travail").Cells(x + 1, [f_travail].Column)
     
    'copie de la classe
     
                Sheets("produits_items").Cells(x + 1, [no_classe_pi].Column) = Sheets("Travail").Cells(x + 1, [c_travail].Column)
     
    'copie du groupe
     
                Sheets("produits_items").Cells(x + 1, [no_groupe_pi].Column) = Sheets("Travail").Cells(x + 1, [g_travail].Column)
     
    'copie du sous-groupe
     
                Sheets("produits_items").Cells(x + 1, [no_ss_groupe_pi].Column) = Sheets("Travail").Cells(x + 1, [sg_travail].Column)
     
    'copie du format
     
                Sheets("produits_items").Cells(x + 1, [no_format_pi].Column) = CleanTrim(Sheets("Travail").Cells(x + 1, [no_format_travail].Column)) 'ce cleantrim sera a enlever apres que le menage initiale fonctionne
     
    'copie de la couleur s'il y a lieu
     
                If Not IsEmpty(Sheets("Travail").Cells(x + 1, [no_couleur_travail].Column).value) Then _
                Sheets("produits_items").Cells(x + 1, [no_couleur_pi].Column) = Sheets("Travail").Cells(x + 1, [no_couleur_travail].Column)
     
    'copie de la regionale longue et courte dépendamment de la colonne GAC ayant description régionnale
     
                Sheets("Travail").Select
     
                If Cells(x + 1, [gac_travail].Column).value = "GACEQ" Or Cells(x + 1, [gac_travail].Column).value = "gaceq" Then
     
    'Si GACEQ copie régionale longue dans desc_reg_gaceq
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si GACEQ copie régionale courte dans desc_reg_court_gaceq
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
     
    'Si GACEQ copie provinciale longue dans desc_reg_gacouest et desc_reg_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si GACEQ copie provinciale courte dans desc_reg_court_gacouest et desc_reg_court_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "ANO" Or Cells(x + 1, [gac_travail].Column).value = "ano" Then
     
    'Si ANO copie régionale longue dans desc_reg_gacouest
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si ANO copie régionale courte dans desc_reg_court_gacouest
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
    'Si ANO copie provinciale longue dans desc_reg_gaceq et desc_reg_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si ANO copie provinciale courte dans desc_reg_court_gaceq et desc_reg_court_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "SIGMA" Or Cells(x + 1, [gac_travail].Column).value = "sigma" Then
     
    'Si SIGMA copie régionale longue dans desc_reg_sigmasante
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si SIGMA copie régionale courte dans desc_reg_court_sigmasante
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
    'Si SIGMA copie provinciale longue dans desc_reg_gaceq et desc_reg_gacouest
     
              Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
    'Si SIGMA copie provinciale courte dans desc_reg_court_gaceq et desc_reg_court_gacouest
     
              Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "AUCUN" Or Cells(x + 1, [gac_travail].Column).value = "aucun" Then
     
    'Si "aucun" copie provinciale longue dans desc_reg_gaceq, desc_reg_gacouest et desc_reg_sigmasante
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si "aucun" copie provinciale courte dans desc_reg_court_gaceq, desc_reg_court_gacouest et desc_reg_court_sigmasante
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
               ElseIf Cells(x + 1, [gac_travail].Column).value = "TOUS" Or Cells(x + 1, [gac_travail].Column).value = "tous" Then
     
    'Si TOUS copie régionale longue dans desc_reg_gacouest_pi, desc_reg_gaceq_pi, desc_reg_sigmasante_pi
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si TOUS copie régionale courte dans desc_reg_court_gaceq_pi,desc_reg_court_gacouest_pi,desc_reg_court_sigmasante_pi
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
     
                End If
     
    'Si la famille copier est 80 mettre S sinon P dans code_type_produit
     
                Sheets("produits_items").Cells(x + 1, [code_type_produit_pi].Column).value = _
                IIf(Sheets("produits_items").Cells(x + 1, [no_famille_pi].Column).value = 80, "S", "P")
     
                End If
     
            End If
     
        End If
     
        Next cell
     
    'enlever les lignes vides de la feuille produits_items
     
        Sheets("produits_items").Select
        Range("A2").EntireRow.Insert
        Range("b1:B" & LastLignUsedInColumn("B")).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
     
     
    'sauvegarder le document
        ActiveWorkbook.Save
     
    End Sub



    Voici également mon test avec le array (avec erreur)

    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
    Sub copiedansproduit_item_creationTEST()
     
        Dim x As Integer
        Dim cell As Variant
        Dim LettreVoulue As String
        Dim LettreFormat As String
        Dim LettreFamille As String
        Dim LettreClasse As String
        Dim LettreGroupe As String
        Dim LettreSousGroupe As String
        Dim tout_Format As Range
        Dim tout_Famille As Range
        Dim tout_Classe As Range
        Dim tout_Groupe As Range
        Dim tout_SousGroupe As Range
        Dim ACorriger As Variant
        Dim element As Variant
     
        LettreVoulue = TrouveLettreColonne([prov_long_travail])
        LettreFormat = TrouveLettreColonne([no_format_travail])
        LettreFamille = TrouveLettreColonne([f_travail])
        LettreClasse = TrouveLettreColonne([c_travail])
        LettreGroupe = TrouveLettreColonne([g_travail])
        LettreSousGroupe = TrouveLettreColonne([sg_travail])
     
        Set tout_Format = Worksheets("Travail").Range(LettreFormat & 2, LettreFormat & LastLignUsedInColumn(LettreFormat))
        Set tout_Famille = Worksheets("Travail").Range(LettreFamille & 2, LettreFamille & LastLignUsedInColumn(LettreFamille))
        Set tout_Classe = Worksheets("Travail").Range(LettreClasse & 2, LettreClasse & LastLignUsedInColumn(LettreClasse))
        Set tout_Groupe = Worksheets("Travail").Range(LettreGroupe & 2, LettreGroupe & LastLignUsedInColumn(LettreGroupe))
        Set tout_SousGroupe = Worksheets("Travail").Range(LettreSousGroupe & 2, LettreSousGroupe & LastLignUsedInColumn(LettreSousGroupe))
     
        ACorriger = Array(tout_Format, tout_Famille, tout_Classe, tout_Groupe, tout_SousGroupe)
     
     
        Application.ScreenUpdating = False
     
    'nettoyer les lignes critiques afin d'enlever les caractères spéciaux
     
    For Each element In tout_Format
     
    element.value = CleanTrim(element.value)
     
    Next element
     
     
     
     
    'enlever les lignes de produit_item si jamais on refais la macro
     
        Worksheets("produits_items").Range("a2:BZ" & LastLignUsedInSheet("produits_items") + 1).Delete
     
     
        Sheets("Travail").Select
     
     
       For Each cell In Worksheets("Travail").Range(LettreVoulue & 2, LettreVoulue & LastLignUsedInColumn(LettreVoulue))
     
            x = x + 1
     
     
        If IsEmpty(Cells(x + 1, [no_item_travail].Column).value) Then
     
    ' Si la couleur n'est pas un numéro ou le format n'est lui non plus un numéro ou
    ' si la provinciale courte est vide ou est égale a "???" ou le GAC ayant description régionale est vide ou est égale a "???"
    ' ou la provinciale longue est supérieur a 200 caractères ou la provinciale courte est supérieur a 100 caractères
    ' ou la famille classe groupe sous-groupe n'existe pas ou si le GAC ayant description régionale est ano ou gaceq ou sigma ou ??? et que la
    ' description régionale longue est supérieur de 200 et la courte supérieur a 100 et que le GAC ayant description courte est différent des choix
    ' possibles on indique un erreur et on quitte la sub
     
            If IsNumeric(Cells(x + 1, [no_couleur_travail].Column)) = False _
            Or IsNumeric(Cells(x + 1, [no_format_travail].Column)) = False _
            Or IsEmpty(Cells(x + 1, [no_format_travail].Column)) _
            Or IsEmpty(Cells(x + 1, [prov_court_travail].Column)) _
            Or Cells(x + 1, [prov_court_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [gac_travail].Column)) _
            Or Cells(x + 1, [gac_travail].Column) = "???" _
            Or Len(Cells(x + 1, [prov_long_travail].Column)) > 200 _
            Or Len(Cells(x + 1, [prov_court_travail].Column)) > 100 _
            Or Cells(x + 1, [fcgs_travail].Column) = "non" _
            Or ((Cells(x + 1, [gac_travail].Column) = "SIGMA" Or Cells(x + 1, [gac_travail].Column) = "sigma" _
            Or Cells(x + 1, [gac_travail].Column) = "gaceq" Or Cells(x + 1, [gac_travail].Column) = "GACEQ" _
            Or Cells(x + 1, [gac_travail].Column) = "ano" Or Cells(x + 1, [gac_travail].Column) = "ANO") _
            And (Cells(x + 1, [reg_long_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [reg_long_travail].Column)) _
            Or Len(Cells(x + 1, [reg_long_travail].Column)) > 200 _
            Or Cells(x + 1, [reg_court_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [reg_court_travail].Column)) Or Len(Cells(x + 1, [reg_court_travail].Column)) > 100)) _
            Or (Cells(x + 1, [gac_travail].Column) <> "gaceq" And Cells(x + 1, [gac_travail].Column) <> "GACEQ" _
            And Cells(x + 1, [gac_travail].Column) <> "sigma" And Cells(x + 1, [gac_travail].Column) <> "SIGMA" _
            And Cells(x + 1, [gac_travail].Column) <> "tous" And Cells(x + 1, [gac_travail].Column) <> "TOUS" _
            And Cells(x + 1, [gac_travail].Column) <> "ANO" And Cells(x + 1, [gac_travail].Column) <> "ano" _
            And Cells(x + 1, [gac_travail].Column) <> "aucun" And Cells(x + 1, [gac_travail].Column) <> "AUCUN") Then
     
                MsgBox "N'a pu transféré dans l'onglet produit_item, utiliser le bouton validation a fin de trouver les erreurs !!!", vbCritical
                Exit Sub
     
            Else
     
            If IsEmpty(Cells(x + 1, [no_item_travail].Column).value) Then
     
    'copie description provinciale longue
     
                Sheets("produits_items").Cells(x + 1, [desc_prov_pi].Column) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
    'copie description provinciale courte
     
                Sheets("produits_items").Cells(x + 1, [desc_prov_court_pi].Column) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
    'mettre vrai dans index des taxes
     
          Union(Sheets("produits_items").Cells(x + 1, [ind_tx_prov_pi].Column), _
                Sheets("produits_items").Cells(x + 1, [ind_taxe_fed_pi].Column)) = "TRUE"
     
     
    'mettre P dans code_portee_produit et dans code_portee_item
     
           Union(Sheets("produits_items").Cells(x + 1, [code_portee_produit_pi].Column), _
                 Sheets("produits_items").Cells(x + 1, [code_portee_item_pi].Column)) = "P"
     
    'copie de la famille
     
                Sheets("produits_items").Cells(x + 1, [no_famille_pi].Column) = Sheets("Travail").Cells(x + 1, [f_travail].Column)
     
    'copie de la classe
     
                Sheets("produits_items").Cells(x + 1, [no_classe_pi].Column) = Sheets("Travail").Cells(x + 1, [c_travail].Column)
     
    'copie du groupe
     
                Sheets("produits_items").Cells(x + 1, [no_groupe_pi].Column) = Sheets("Travail").Cells(x + 1, [g_travail].Column)
     
    'copie du sous-groupe
     
                Sheets("produits_items").Cells(x + 1, [no_ss_groupe_pi].Column) = Sheets("Travail").Cells(x + 1, [sg_travail].Column)
     
    'copie du format
     
                Sheets("produits_items").Cells(x + 1, [no_format_pi].Column) = Sheets("Travail").Cells(x + 1, [no_format_travail].Column)
     
    'copie de la couleur s'il y a lieu
     
                If Not IsEmpty(Sheets("Travail").Cells(x + 1, [no_couleur_travail].Column).value) Then _
                Sheets("produits_items").Cells(x + 1, [no_couleur_pi].Column) = Sheets("Travail").Cells(x + 1, [no_couleur_travail].Column)
     
    'copie de la regionale longue et courte dépendamment de la colonne GAC ayant description régionnale
     
                Sheets("Travail").Select
     
                If Cells(x + 1, [gac_travail].Column).value = "GACEQ" Or Cells(x + 1, [gac_travail].Column).value = "gaceq" Then
     
    'Si GACEQ copie régionale longue dans desc_reg_gaceq
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si GACEQ copie régionale courte dans desc_reg_court_gaceq
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
     
    'Si GACEQ copie provinciale longue dans desc_reg_gacouest et desc_reg_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si GACEQ copie provinciale courte dans desc_reg_court_gacouest et desc_reg_court_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "ANO" Or Cells(x + 1, [gac_travail].Column).value = "ano" Then
     
    'Si ANO copie régionale longue dans desc_reg_gacouest
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si ANO copie régionale courte dans desc_reg_court_gacouest
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
    'Si ANO copie provinciale longue dans desc_reg_gaceq et desc_reg_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si ANO copie provinciale courte dans desc_reg_court_gaceq et desc_reg_court_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "SIGMA" Or Cells(x + 1, [gac_travail].Column).value = "sigma" Then
     
    'Si SIGMA copie régionale longue dans desc_reg_sigmasante
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si SIGMA copie régionale courte dans desc_reg_court_sigmasante
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
    'Si SIGMA copie provinciale longue dans desc_reg_gaceq et desc_reg_gacouest
     
              Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
    'Si SIGMA copie provinciale courte dans desc_reg_court_gaceq et desc_reg_court_gacouest
     
              Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "AUCUN" Or Cells(x + 1, [gac_travail].Column).value = "aucun" Then
     
    'Si "aucun" copie provinciale longue dans desc_reg_gaceq, desc_reg_gacouest et desc_reg_sigmasante
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si "aucun" copie provinciale courte dans desc_reg_court_gaceq, desc_reg_court_gacouest et desc_reg_court_sigmasante
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
               ElseIf Cells(x + 1, [gac_travail].Column).value = "TOUS" Or Cells(x + 1, [gac_travail].Column).value = "tous" Then
     
    'Si TOUS copie régionale longue dans desc_reg_gacouest_pi, desc_reg_gaceq_pi, desc_reg_sigmasante_pi
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si TOUS copie régionale courte dans desc_reg_court_gaceq_pi,desc_reg_court_gacouest_pi,desc_reg_court_sigmasante_pi
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
     
                End If
     
    'Si la famille copier est 80 mettre S sinon P dans code_type_produit
     
                Sheets("produits_items").Cells(x + 1, [code_type_produit_pi].Column).value = _
                IIf(Sheets("produits_items").Cells(x + 1, [no_famille_pi].Column).value = 80, "S", "P")
     
                End If
     
            End If
     
        End If
     
        Next cell
     
    'enlever les lignes vides de la feuille produits_items
     
        Sheets("produits_items").Select
        Range("A2").EntireRow.Insert
        Range("b1:B" & LastLignUsedInColumn("B")).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
     
     
    'sauvegarder le document
        ActiveWorkbook.Save
     
    End Sub
    Je joins également une version de mon fichier de travail sans macro



    un gros merci !!!!
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    À titre indicatif voici le code avec l'option sans array


    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
    Sub copiedansproduit_item_creationTESTsansarray()
     
        Dim x As Integer
        Dim cell As Variant
        Dim LettreVoulue As String
        Dim LettreFormat As String
        Dim LettreFamille As String
        Dim LettreClasse As String
        Dim LettreGroupe As String
        Dim LettreSousGroupe As String
     
        LettreVoulue = TrouveLettreColonne([prov_long_travail])
        LettreFormat = TrouveLettreColonne([no_format_travail])
        LettreFamille = TrouveLettreColonne([f_travail])
        LettreClasse = TrouveLettreColonne([c_travail])
        LettreGroupe = TrouveLettreColonne([g_travail])
        LettreSousGroupe = TrouveLettreColonne([sg_travail])
     
     
        Application.ScreenUpdating = False
     
    'nettoyer les lignes critiques afin d'enlever les caractères spéciaux
     
    Worksheets("Travail").Range(LettreFormat & 2, LettreVoulue & LastLignUsedInColumn(LettreFormat)) = _
        CleanTrim(Worksheets("Travail").Range(LettreFormat & 2, LettreVoulue & LastLignUsedInColumn(LettreFormat)))
     
    Worksheets("Travail").Range(LettreFamille & 2, LettreVoulue & LastLignUsedInColumn(LettreFamille)) = _
        CleanTrim(Worksheets("Travail").Range(LettreFamille & 2, LettreVoulue & LastLignUsedInColumn(LettreFamille)))
     
    Worksheets("Travail").Range(LettreClasse & 2, LettreVoulue & LastLignUsedInColumn(LettreClasse)) = _
        CleanTrim(Worksheets("Travail").Range(LettreClasse & 2, LettreVoulue & LastLignUsedInColumn(LettreClasse)))
     
    Worksheets("Travail").Range(LettreGroupe & 2, LettreVoulue & LastLignUsedInColumn(LettreGroupe)) = _
        CleanTrim(Worksheets("Travail").Range(LettreGroupe & 2, LettreVoulue & LastLignUsedInColumn(LettreGroupe)))
     
    Worksheets("Travail").Range(LettreSousGroupe & 2, LettreVoulue & LastLignUsedInColumn(LettreSousGroupe)) = _
        CleanTrim(Worksheets("Travail").Range(LettreSousGroupe & 2, LettreVoulue & LastLignUsedInColumn(LettreSousGroupe)))
     
     
     
    'enlever les lignes de produit_item si jamais on refais la macro
     
        Worksheets("produits_items").Range("a2:BZ" & LastLignUsedInSheet("produits_items") + 1).Delete
     
     
        Sheets("Travail").Select
     
     
       For Each cell In Worksheets("Travail").Range(LettreVoulue & 2, LettreVoulue & LastLignUsedInColumn(LettreVoulue))
     
            x = x + 1
     
     
        If IsEmpty(Cells(x + 1, [no_item_travail].Column).value) Then
     
    ' Si la couleur n'est pas un numéro ou le format n'est lui non plus un numéro ou
    ' si la provinciale courte est vide ou est égale a "???" ou le GAC ayant description régionale est vide ou est égale a "???"
    ' ou la provinciale longue est supérieur a 200 caractères ou la provinciale courte est supérieur a 100 caractères
    ' ou la famille classe groupe sous-groupe n'existe pas ou si le GAC ayant description régionale est ano ou gaceq ou sigma ou ??? et que la
    ' description régionale longue est supérieur de 200 et la courte supérieur a 100 et que le GAC ayant description courte est différent des choix
    ' possibles on indique un erreur et on quitte la sub
     
            If IsNumeric(Cells(x + 1, [no_couleur_travail].Column)) = False _
            Or IsNumeric(Cells(x + 1, [no_format_travail].Column)) = False _
            Or IsEmpty(Cells(x + 1, [no_format_travail].Column)) _
            Or IsEmpty(Cells(x + 1, [prov_court_travail].Column)) _
            Or Cells(x + 1, [prov_court_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [gac_travail].Column)) _
            Or Cells(x + 1, [gac_travail].Column) = "???" _
            Or Len(Cells(x + 1, [prov_long_travail].Column)) > 200 _
            Or Len(Cells(x + 1, [prov_court_travail].Column)) > 100 _
            Or Cells(x + 1, [fcgs_travail].Column) = "non" _
            Or ((Cells(x + 1, [gac_travail].Column) = "SIGMA" Or Cells(x + 1, [gac_travail].Column) = "sigma" _
            Or Cells(x + 1, [gac_travail].Column) = "gaceq" Or Cells(x + 1, [gac_travail].Column) = "GACEQ" _
            Or Cells(x + 1, [gac_travail].Column) = "ano" Or Cells(x + 1, [gac_travail].Column) = "ANO") _
            And (Cells(x + 1, [reg_long_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [reg_long_travail].Column)) _
            Or Len(Cells(x + 1, [reg_long_travail].Column)) > 200 _
            Or Cells(x + 1, [reg_court_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [reg_court_travail].Column)) Or Len(Cells(x + 1, [reg_court_travail].Column)) > 100)) _
            Or (Cells(x + 1, [gac_travail].Column) <> "gaceq" And Cells(x + 1, [gac_travail].Column) <> "GACEQ" _
            And Cells(x + 1, [gac_travail].Column) <> "sigma" And Cells(x + 1, [gac_travail].Column) <> "SIGMA" _
            And Cells(x + 1, [gac_travail].Column) <> "tous" And Cells(x + 1, [gac_travail].Column) <> "TOUS" _
            And Cells(x + 1, [gac_travail].Column) <> "ANO" And Cells(x + 1, [gac_travail].Column) <> "ano" _
            And Cells(x + 1, [gac_travail].Column) <> "aucun" And Cells(x + 1, [gac_travail].Column) <> "AUCUN") Then
     
                MsgBox "N'a pu transféré dans l'onglet produit_item, utiliser le bouton validation a fin de trouver les erreurs !!!", vbCritical
                Exit Sub
     
            Else
     
            If IsEmpty(Cells(x + 1, [no_item_travail].Column).value) Then
     
    'copie description provinciale longue
     
                Sheets("produits_items").Cells(x + 1, [desc_prov_pi].Column) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
    'copie description provinciale courte
     
                Sheets("produits_items").Cells(x + 1, [desc_prov_court_pi].Column) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
    'mettre vrai dans index des taxes
     
          Union(Sheets("produits_items").Cells(x + 1, [ind_tx_prov_pi].Column), _
                Sheets("produits_items").Cells(x + 1, [ind_taxe_fed_pi].Column)) = "TRUE"
     
     
    'mettre P dans code_portee_produit et dans code_portee_item
     
           Union(Sheets("produits_items").Cells(x + 1, [code_portee_produit_pi].Column), _
                 Sheets("produits_items").Cells(x + 1, [code_portee_item_pi].Column)) = "P"
     
    'copie de la famille
     
                Sheets("produits_items").Cells(x + 1, [no_famille_pi].Column) = Sheets("Travail").Cells(x + 1, [f_travail].Column)
     
    'copie de la classe
     
                Sheets("produits_items").Cells(x + 1, [no_classe_pi].Column) = Sheets("Travail").Cells(x + 1, [c_travail].Column)
     
    'copie du groupe
     
                Sheets("produits_items").Cells(x + 1, [no_groupe_pi].Column) = Sheets("Travail").Cells(x + 1, [g_travail].Column)
     
    'copie du sous-groupe
     
                Sheets("produits_items").Cells(x + 1, [no_ss_groupe_pi].Column) = Sheets("Travail").Cells(x + 1, [sg_travail].Column)
     
    'copie du format
     
                Sheets("produits_items").Cells(x + 1, [no_format_pi].Column) = Sheets("Travail").Cells(x + 1, [no_format_travail].Column)
     
    'copie de la couleur s'il y a lieu
     
                If Not IsEmpty(Sheets("Travail").Cells(x + 1, [no_couleur_travail].Column).value) Then _
                Sheets("produits_items").Cells(x + 1, [no_couleur_pi].Column) = Sheets("Travail").Cells(x + 1, [no_couleur_travail].Column)
     
    'copie de la regionale longue et courte dépendamment de la colonne GAC ayant description régionnale
     
                Sheets("Travail").Select
     
                If Cells(x + 1, [gac_travail].Column).value = "GACEQ" Or Cells(x + 1, [gac_travail].Column).value = "gaceq" Then
     
    'Si GACEQ copie régionale longue dans desc_reg_gaceq
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si GACEQ copie régionale courte dans desc_reg_court_gaceq
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
     
    'Si GACEQ copie provinciale longue dans desc_reg_gacouest et desc_reg_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si GACEQ copie provinciale courte dans desc_reg_court_gacouest et desc_reg_court_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "ANO" Or Cells(x + 1, [gac_travail].Column).value = "ano" Then
     
    'Si ANO copie régionale longue dans desc_reg_gacouest
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si ANO copie régionale courte dans desc_reg_court_gacouest
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
    'Si ANO copie provinciale longue dans desc_reg_gaceq et desc_reg_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si ANO copie provinciale courte dans desc_reg_court_gaceq et desc_reg_court_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "SIGMA" Or Cells(x + 1, [gac_travail].Column).value = "sigma" Then
     
    'Si SIGMA copie régionale longue dans desc_reg_sigmasante
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si SIGMA copie régionale courte dans desc_reg_court_sigmasante
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
    'Si SIGMA copie provinciale longue dans desc_reg_gaceq et desc_reg_gacouest
     
              Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
    'Si SIGMA copie provinciale courte dans desc_reg_court_gaceq et desc_reg_court_gacouest
     
              Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "AUCUN" Or Cells(x + 1, [gac_travail].Column).value = "aucun" Then
     
    'Si "aucun" copie provinciale longue dans desc_reg_gaceq, desc_reg_gacouest et desc_reg_sigmasante
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si "aucun" copie provinciale courte dans desc_reg_court_gaceq, desc_reg_court_gacouest et desc_reg_court_sigmasante
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
               ElseIf Cells(x + 1, [gac_travail].Column).value = "TOUS" Or Cells(x + 1, [gac_travail].Column).value = "tous" Then
     
    'Si TOUS copie régionale longue dans desc_reg_gacouest_pi, desc_reg_gaceq_pi, desc_reg_sigmasante_pi
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si TOUS copie régionale courte dans desc_reg_court_gaceq_pi,desc_reg_court_gacouest_pi,desc_reg_court_sigmasante_pi
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
     
                End If
     
    'Si la famille copier est 80 mettre S sinon P dans code_type_produit
     
                Sheets("produits_items").Cells(x + 1, [code_type_produit_pi].Column).value = _
                IIf(Sheets("produits_items").Cells(x + 1, [no_famille_pi].Column).value = 80, "S", "P")
     
                End If
     
            End If
     
        End If
     
        Next cell
     
    'enlever les lignes vides de la feuille produits_items
     
        Sheets("produits_items").Select
        Range("A2").EntireRow.Insert
        Range("b1:B" & LastLignUsedInColumn("B")).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
     
     
    'sauvegarder le document
        ActiveWorkbook.Save
     
    End Sub

    J'ai un erreur 13. Incompatibilité de type

  3. #3
    Membre habitué
    Homme Profil pro
    Comptable
    Inscrit en
    Novembre 2018
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Novembre 2018
    Messages : 100
    Points : 158
    Points
    158
    Par défaut
    Salut,

    Si j'ai bien compris ta demande : c'est de pouvoir utiliser ta fonction directement sur un ensemble de cellule afin d'avoir a éviter à faire une boucle

    Je n'ai excel sur mon PC mais essaye l'approche suivante :

    1 - On fusionne les données (Range ou Array) avec un séparateur
    2 - On appelle la fonction CleanTrim (Le séparateur doit être un caractère qui n'est pas contenu dans ta chaine et supprimer dans CleanTrim)
    3 - On split les données dans la range ou l'Array en fonction du séparateur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MonText = Join(Range("A1:A10"),"/")
    MonText = ClearTrim(MonText)
    Range("A1:A10") = Split(Montext,"/")
    Pour forcer le formatage en string tu as la conversion Cstr(Montext) possible.
    A+

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Un gros merci, j'y jette un coup d'oeil et reviens si j'ai des questions



    Edit : J'arrive toujours a des erreurs en l'adaptant au array et également sans les array en faisant une conversion ou pas

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour
    j'avoue ne pas tres bien comprendre le probleme de boucle
    en effet tu replace divers caracteres dans une boucle pourquoi pas l'espace avec puisque de toute facon tu est obligé de boucler sur chaque chaine de chaque cellules??????? pour tout les char de l'array
    apres pour remplacer l'espace (char(160)) dans une plage tu peux tres bien faire un replace global avant si tu veux et basta

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
    Range("A1:A10").Replace " ", ""
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    je serais curieux de voir une 10 aines de tes cellules a nétoyer je pense qu'il y a une autre solution
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Bonjour monsieur Toulon,


    JE vais essayé votre suggestion avec le replace. Effectivement il y a seulement 2 caractères potentiels à enlever sois l'espace et le retour de charriot (alt+enter). Pour la boucle dans ma tête je vois un peu le code suivant,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each cell In Worksheets("Travail").Range(LettreFormat & 2, LettreFormat & LastLignUsedInColumn(LettreFormat))
     
            x = x + 1
     
     Sheets("produits_items").Cells(x + 1, [no_format_travail].Column) = CleanTrim(Sheets("produits_items").Cells(x + 1, [no_format_travail].Column))
     
    Next cell
    et ce pour les 5 colonnes. Donc en passant cellule par cellule, ma boucle est lourde. Si je pouvais la faire en lot, ça serais idéale.



    JE vais donc essayé le replace et vous reviens. Également si vous avez une idée pour faire le tout en lot, je serais preneur


    merci beaucoup !!!

  8. #8
    Expert confirmé
    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
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour,

    Je vois que ta fonction prends en compte un string,
    Mais elle pourrait être modifiée pour une plage complète …
    Si cela correspond à ce que tu souhaite ???

    J’ai peut être qq chose,
    Mais manque de temps je repasserai ce soir …
    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 en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  9. #9
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Bonjour cher ami Ryu


    Effectivement si je pourrais allez de colonne ommis la première cellule qui est le titre, jusqu'à la dernière ça serais déjà pas mal mieusx à ce que j'ai bidouillé avec la boucle infernale !!!

  10. #10
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    re
    je serais curieux de voir une 10 aines de tes cellules a nétoyer je pense qu'il y a une autre solution
    Bonjour monsieur Toulon, j'ai essayé de répertorier dans mon document un exemple de truc à nettoyé


    en attendant votre autre solution car la replace également, je la trouve déjà génial !!!
    Fichiers attachés Fichiers attachés

  11. #11
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Voici les deux solutions que j'arrive


    LA 1ere est avec la boucle "unique" i.e. cellule par cellule j'effectue le CleanTrim


    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
    Sub copiedansproduit_item_creationORIGINALE()
     
        Dim x As Long
        Dim y As Long
        Dim cell As Variant
        Dim LettreVoulue As String
        LettreVoulue = TrouveLettreColonne([prov_long_travail])
        Dim element As Variant
     
     
        Application.ScreenUpdating = False
     
    'nettoyer les lignes critiques afin d'enlever les caractères spéciaux
     
    For Each element In Worksheets("Travail").Range(LettreVoulue & 2, LettreVoulue & LastLignUsedInColumn(LettreVoulue))
     
            y = y + 1
     
     Sheets("Travail").Cells(y + 1, [no_format_travail].Column) = CleanTrim(Sheets("Travail").Cells(y + 1, [no_format_travail].Column))
     Sheets("Travail").Cells(y + 1, [f_travail].Column) = CleanTrim(Sheets("Travail").Cells(y + 1, [f_travail].Column))
     Sheets("Travail").Cells(y + 1, [c_travail].Column) = CleanTrim(Sheets("Travail").Cells(y + 1, [c_travail].Column))
     Sheets("Travail").Cells(y + 1, [g_travail].Column) = CleanTrim(Sheets("Travail").Cells(y + 1, [g_travail].Column))
     Sheets("Travail").Cells(y + 1, [sg_travail].Column) = CleanTrim(Sheets("Travail").Cells(y + 1, [sg_travail].Column))
     
    Next element
     
     
    'enlever les lignes de produit_item si jamais on refais la macro
     
        Worksheets("produits_items").Range("a2:BZ" & LastLignUsedInSheet("produits_items") + 1).Delete
     
     
        Sheets("Travail").Select
     
     
       For Each cell In Worksheets("Travail").Range(LettreVoulue & 2, LettreVoulue & LastLignUsedInColumn(LettreVoulue))
     
            x = x + 1
     
     
        If IsEmpty(Cells(x + 1, [no_item_travail].Column).value) Then
     
    ' Si la couleur n'est pas un numéro ou le format n'est lui non plus un numéro ou
    ' si la provinciale courte est vide ou est égale a "???" ou le GAC ayant description régionale est vide ou est égale a "???"
    ' ou la provinciale longue est supérieur a 200 caractères ou la provinciale courte est supérieur a 100 caractères
    ' ou la famille classe groupe sous-groupe n'existe pas ou si le GAC ayant description régionale est ano ou gaceq ou sigma ou ??? et que la
    ' description régionale longue est supérieur de 200 et la courte supérieur a 100 et que le GAC ayant description courte est différent des choix
    ' possibles on indique un erreur et on quitte la sub
     
            If IsNumeric(Cells(x + 1, [no_couleur_travail].Column)) = False _
            Or IsNumeric(Cells(x + 1, [no_format_travail].Column)) = False _
            Or IsEmpty(Cells(x + 1, [no_format_travail].Column)) _
            Or IsEmpty(Cells(x + 1, [prov_court_travail].Column)) _
            Or Cells(x + 1, [prov_court_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [gac_travail].Column)) _
            Or Cells(x + 1, [gac_travail].Column) = "???" _
            Or Len(Cells(x + 1, [prov_long_travail].Column)) > 200 _
            Or Len(Cells(x + 1, [prov_court_travail].Column)) > 100 _
            Or Cells(x + 1, [fcgs_travail].Column) = "non" _
            Or ((Cells(x + 1, [gac_travail].Column) = "SIGMA" Or Cells(x + 1, [gac_travail].Column) = "sigma" _
            Or Cells(x + 1, [gac_travail].Column) = "gaceq" Or Cells(x + 1, [gac_travail].Column) = "GACEQ" _
            Or Cells(x + 1, [gac_travail].Column) = "ano" Or Cells(x + 1, [gac_travail].Column) = "ANO") _
            And (Cells(x + 1, [reg_long_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [reg_long_travail].Column)) _
            Or Len(Cells(x + 1, [reg_long_travail].Column)) > 200 _
            Or Cells(x + 1, [reg_court_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [reg_court_travail].Column)) Or Len(Cells(x + 1, [reg_court_travail].Column)) > 100)) _
            Or (Cells(x + 1, [gac_travail].Column) <> "gaceq" And Cells(x + 1, [gac_travail].Column) <> "GACEQ" _
            And Cells(x + 1, [gac_travail].Column) <> "sigma" And Cells(x + 1, [gac_travail].Column) <> "SIGMA" _
            And Cells(x + 1, [gac_travail].Column) <> "tous" And Cells(x + 1, [gac_travail].Column) <> "TOUS" _
            And Cells(x + 1, [gac_travail].Column) <> "ANO" And Cells(x + 1, [gac_travail].Column) <> "ano" _
            And Cells(x + 1, [gac_travail].Column) <> "aucun" And Cells(x + 1, [gac_travail].Column) <> "AUCUN") Then
     
                MsgBox "N'a pu transféré dans l'onglet produit_item, utiliser le bouton validation a fin de trouver les erreurs !!!", vbCritical
                Exit Sub
     
            Else
     
            If IsEmpty(Cells(x + 1, [no_item_travail].Column).value) Then
     
    'copie description provinciale longue
     
                Sheets("produits_items").Cells(x + 1, [desc_prov_pi].Column) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
    'copie description provinciale courte
     
                Sheets("produits_items").Cells(x + 1, [desc_prov_court_pi].Column) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
    'mettre vrai dans index des taxes
     
          Union(Sheets("produits_items").Cells(x + 1, [ind_tx_prov_pi].Column), _
                Sheets("produits_items").Cells(x + 1, [ind_taxe_fed_pi].Column)) = "TRUE"
     
     
    'mettre P dans code_portee_produit et dans code_portee_item
     
           Union(Sheets("produits_items").Cells(x + 1, [code_portee_produit_pi].Column), _
                 Sheets("produits_items").Cells(x + 1, [code_portee_item_pi].Column)) = "P"
     
    'copie de la famille
     
                Sheets("produits_items").Cells(x + 1, [no_famille_pi].Column) = Sheets("Travail").Cells(x + 1, [f_travail].Column)
     
    'copie de la classe
     
                Sheets("produits_items").Cells(x + 1, [no_classe_pi].Column) = Sheets("Travail").Cells(x + 1, [c_travail].Column)
     
    'copie du groupe
     
                Sheets("produits_items").Cells(x + 1, [no_groupe_pi].Column) = Sheets("Travail").Cells(x + 1, [g_travail].Column)
     
    'copie du sous-groupe
     
                Sheets("produits_items").Cells(x + 1, [no_ss_groupe_pi].Column) = Sheets("Travail").Cells(x + 1, [sg_travail].Column)
     
    'copie du format
     
                Sheets("produits_items").Cells(x + 1, [no_format_pi].Column) = Sheets("Travail").Cells(x + 1, [no_format_travail].Column)
     
    'copie de la couleur s'il y a lieu
     
                If Not IsEmpty(Sheets("Travail").Cells(x + 1, [no_couleur_travail].Column).value) Then _
                Sheets("produits_items").Cells(x + 1, [no_couleur_pi].Column) = Sheets("Travail").Cells(x + 1, [no_couleur_travail].Column)
     
    'copie de la regionale longue et courte dépendamment de la colonne GAC ayant description régionnale
     
                Sheets("Travail").Select
     
                If Cells(x + 1, [gac_travail].Column).value = "GACEQ" Or Cells(x + 1, [gac_travail].Column).value = "gaceq" Then
     
    'Si GACEQ copie régionale longue dans desc_reg_gaceq
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si GACEQ copie régionale courte dans desc_reg_court_gaceq
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
     
    'Si GACEQ copie provinciale longue dans desc_reg_gacouest et desc_reg_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si GACEQ copie provinciale courte dans desc_reg_court_gacouest et desc_reg_court_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "ANO" Or Cells(x + 1, [gac_travail].Column).value = "ano" Then
     
    'Si ANO copie régionale longue dans desc_reg_gacouest
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si ANO copie régionale courte dans desc_reg_court_gacouest
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
    'Si ANO copie provinciale longue dans desc_reg_gaceq et desc_reg_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si ANO copie provinciale courte dans desc_reg_court_gaceq et desc_reg_court_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "SIGMA" Or Cells(x + 1, [gac_travail].Column).value = "sigma" Then
     
    'Si SIGMA copie régionale longue dans desc_reg_sigmasante
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si SIGMA copie régionale courte dans desc_reg_court_sigmasante
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
    'Si SIGMA copie provinciale longue dans desc_reg_gaceq et desc_reg_gacouest
     
              Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
    'Si SIGMA copie provinciale courte dans desc_reg_court_gaceq et desc_reg_court_gacouest
     
              Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "AUCUN" Or Cells(x + 1, [gac_travail].Column).value = "aucun" Then
     
    'Si "aucun" copie provinciale longue dans desc_reg_gaceq, desc_reg_gacouest et desc_reg_sigmasante
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si "aucun" copie provinciale courte dans desc_reg_court_gaceq, desc_reg_court_gacouest et desc_reg_court_sigmasante
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
               ElseIf Cells(x + 1, [gac_travail].Column).value = "TOUS" Or Cells(x + 1, [gac_travail].Column).value = "tous" Then
     
    'Si TOUS copie régionale longue dans desc_reg_gacouest_pi, desc_reg_gaceq_pi, desc_reg_sigmasante_pi
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si TOUS copie régionale courte dans desc_reg_court_gaceq_pi,desc_reg_court_gacouest_pi,desc_reg_court_sigmasante_pi
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
     
                End If
     
    'Si la famille copier est 80 mettre S sinon P dans code_type_produit
     
                Sheets("produits_items").Cells(x + 1, [code_type_produit_pi].Column).value = _
                IIf(Sheets("produits_items").Cells(x + 1, [no_famille_pi].Column).value = 80, "S", "P")
     
                End If
     
            End If
     
        End If
     
        Next cell
     
    'enlever les lignes vides de la feuille produits_items
     
        Sheets("produits_items").Select
        Range("A2").EntireRow.Insert
        Range("b1:B" & LastLignUsedInColumn("B")).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
     
     
    'sauvegarder le document
        ActiveWorkbook.Save
     
    End Sub

    La seconde est celle par monsieur Toulon (que je ) donc avec replace ... j'ai ajouté une boucle sur un array qui contient mes range

    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
    Sub copiedansproduit_item_creationTESTreplace()
     
        Dim x As Long
        Dim cell As Variant
        Dim LettreVoulue As String
        Dim LettreFormat As String
        Dim LettreFamille As String
        Dim LettreClasse As String
        Dim LettreGroupe As String
        Dim LettreSousGroupe As String
        Dim tout_Format As Range
        Dim tout_Famille As Range
        Dim tout_Classe As Range
        Dim tout_Groupe As Range
        Dim tout_SousGroupe As Range
        Dim element As Variant
        Dim ACorriger As Variant
     
     
        LettreVoulue = TrouveLettreColonne([prov_long_travail])
        LettreFormat = TrouveLettreColonne([no_format_travail])
        LettreFamille = TrouveLettreColonne([f_travail])
        LettreClasse = TrouveLettreColonne([c_travail])
        LettreGroupe = TrouveLettreColonne([g_travail])
        LettreSousGroupe = TrouveLettreColonne([sg_travail])
     
        Set tout_Format = Worksheets("Travail").Range(LettreFormat & 2, LettreFormat & LastLignUsedInColumn(LettreFormat))
        Set tout_Famille = Worksheets("Travail").Range(LettreFamille & 2, LettreFamille & LastLignUsedInColumn(LettreFamille))
        Set tout_Classe = Worksheets("Travail").Range(LettreClasse & 2, LettreClasse & LastLignUsedInColumn(LettreClasse))
        Set tout_Groupe = Worksheets("Travail").Range(LettreGroupe & 2, LettreGroupe & LastLignUsedInColumn(LettreGroupe))
        Set tout_SousGroupe = Worksheets("Travail").Range(LettreSousGroupe & 2, LettreSousGroupe & LastLignUsedInColumn(LettreSousGroupe))
     
     
        ACorriger = Array(tout_Format, tout_Famille, tout_Classe, tout_Groupe, tout_SousGroupe)
     
    '    Application.ScreenUpdating = False
     
     
    'nettoyer les lignes critiques afin d'enlever les caractères spéciaux
     
     
    For Each element In ACorriger
     
    element.Replace " ", ""
    element.Replace Chr(10), ""
     
    Next element
     
    'enlever les lignes de produit_item si jamais on refais la macro
     
        Worksheets("produits_items").Range("a2:BZ" & LastLignUsedInSheet("produits_items") + 1).Delete
     
     
        Sheets("Travail").Select
     
     
       For Each cell In Worksheets("Travail").Range(LettreVoulue & 2, LettreVoulue & LastLignUsedInColumn(LettreVoulue))
     
            x = x + 1
     
     
        If IsEmpty(Cells(x + 1, [no_item_travail].Column).value) Then
     
    ' Si la couleur n'est pas un numéro ou le format n'est lui non plus un numéro ou
    ' si la provinciale courte est vide ou est égale a "???" ou le GAC ayant description régionale est vide ou est égale a "???"
    ' ou la provinciale longue est supérieur a 200 caractères ou la provinciale courte est supérieur a 100 caractères
    ' ou la famille classe groupe sous-groupe n'existe pas ou si le GAC ayant description régionale est ano ou gaceq ou sigma ou ??? et que la
    ' description régionale longue est supérieur de 200 et la courte supérieur a 100 et que le GAC ayant description courte est différent des choix
    ' possibles on indique un erreur et on quitte la sub
     
            If IsNumeric(Cells(x + 1, [no_couleur_travail].Column)) = False _
            Or IsNumeric(Cells(x + 1, [no_format_travail].Column)) = False _
            Or IsEmpty(Cells(x + 1, [no_format_travail].Column)) _
            Or IsEmpty(Cells(x + 1, [prov_court_travail].Column)) _
            Or Cells(x + 1, [prov_court_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [gac_travail].Column)) _
            Or Cells(x + 1, [gac_travail].Column) = "???" _
            Or Len(Cells(x + 1, [prov_long_travail].Column)) > 200 _
            Or Len(Cells(x + 1, [prov_court_travail].Column)) > 100 _
            Or Cells(x + 1, [fcgs_travail].Column) = "non" _
            Or ((Cells(x + 1, [gac_travail].Column) = "SIGMA" Or Cells(x + 1, [gac_travail].Column) = "sigma" _
            Or Cells(x + 1, [gac_travail].Column) = "gaceq" Or Cells(x + 1, [gac_travail].Column) = "GACEQ" _
            Or Cells(x + 1, [gac_travail].Column) = "ano" Or Cells(x + 1, [gac_travail].Column) = "ANO") _
            And (Cells(x + 1, [reg_long_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [reg_long_travail].Column)) _
            Or Len(Cells(x + 1, [reg_long_travail].Column)) > 200 _
            Or Cells(x + 1, [reg_court_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [reg_court_travail].Column)) Or Len(Cells(x + 1, [reg_court_travail].Column)) > 100)) _
            Or (Cells(x + 1, [gac_travail].Column) <> "gaceq" And Cells(x + 1, [gac_travail].Column) <> "GACEQ" _
            And Cells(x + 1, [gac_travail].Column) <> "sigma" And Cells(x + 1, [gac_travail].Column) <> "SIGMA" _
            And Cells(x + 1, [gac_travail].Column) <> "tous" And Cells(x + 1, [gac_travail].Column) <> "TOUS" _
            And Cells(x + 1, [gac_travail].Column) <> "ANO" And Cells(x + 1, [gac_travail].Column) <> "ano" _
            And Cells(x + 1, [gac_travail].Column) <> "aucun" And Cells(x + 1, [gac_travail].Column) <> "AUCUN") Then
     
                MsgBox "N'a pu transféré dans l'onglet produit_item, utiliser le bouton validation a fin de trouver les erreurs !!!", vbCritical
                Exit Sub
     
            Else
     
            If IsEmpty(Cells(x + 1, [no_item_travail].Column).value) Then
     
    'copie description provinciale longue
     
                Sheets("produits_items").Cells(x + 1, [desc_prov_pi].Column) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
    'copie description provinciale courte
     
                Sheets("produits_items").Cells(x + 1, [desc_prov_court_pi].Column) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
    'mettre vrai dans index des taxes
     
          Union(Sheets("produits_items").Cells(x + 1, [ind_tx_prov_pi].Column), _
                Sheets("produits_items").Cells(x + 1, [ind_taxe_fed_pi].Column)) = "TRUE"
     
     
    'mettre P dans code_portee_produit et dans code_portee_item
     
           Union(Sheets("produits_items").Cells(x + 1, [code_portee_produit_pi].Column), _
                 Sheets("produits_items").Cells(x + 1, [code_portee_item_pi].Column)) = "P"
     
    'copie de la famille
     
                Sheets("produits_items").Cells(x + 1, [no_famille_pi].Column) = Sheets("Travail").Cells(x + 1, [f_travail].Column)
     
    'copie de la classe
     
                Sheets("produits_items").Cells(x + 1, [no_classe_pi].Column) = Sheets("Travail").Cells(x + 1, [c_travail].Column)
     
    'copie du groupe
     
                Sheets("produits_items").Cells(x + 1, [no_groupe_pi].Column) = Sheets("Travail").Cells(x + 1, [g_travail].Column)
     
    'copie du sous-groupe
     
                Sheets("produits_items").Cells(x + 1, [no_ss_groupe_pi].Column) = Sheets("Travail").Cells(x + 1, [sg_travail].Column)
     
    'copie du format
     
                Sheets("produits_items").Cells(x + 1, [no_format_pi].Column) = Sheets("Travail").Cells(x + 1, [no_format_travail].Column)
     
    'copie de la couleur s'il y a lieu
     
                If Not IsEmpty(Sheets("Travail").Cells(x + 1, [no_couleur_travail].Column).value) Then _
                Sheets("produits_items").Cells(x + 1, [no_couleur_pi].Column) = Sheets("Travail").Cells(x + 1, [no_couleur_travail].Column)
     
    'copie de la regionale longue et courte dépendamment de la colonne GAC ayant description régionnale
     
                Sheets("Travail").Select
     
                If Cells(x + 1, [gac_travail].Column).value = "GACEQ" Or Cells(x + 1, [gac_travail].Column).value = "gaceq" Then
     
    'Si GACEQ copie régionale longue dans desc_reg_gaceq
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si GACEQ copie régionale courte dans desc_reg_court_gaceq
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
     
    'Si GACEQ copie provinciale longue dans desc_reg_gacouest et desc_reg_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si GACEQ copie provinciale courte dans desc_reg_court_gacouest et desc_reg_court_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "ANO" Or Cells(x + 1, [gac_travail].Column).value = "ano" Then
     
    'Si ANO copie régionale longue dans desc_reg_gacouest
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si ANO copie régionale courte dans desc_reg_court_gacouest
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
    'Si ANO copie provinciale longue dans desc_reg_gaceq et desc_reg_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si ANO copie provinciale courte dans desc_reg_court_gaceq et desc_reg_court_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "SIGMA" Or Cells(x + 1, [gac_travail].Column).value = "sigma" Then
     
    'Si SIGMA copie régionale longue dans desc_reg_sigmasante
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si SIGMA copie régionale courte dans desc_reg_court_sigmasante
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
    'Si SIGMA copie provinciale longue dans desc_reg_gaceq et desc_reg_gacouest
     
              Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
    'Si SIGMA copie provinciale courte dans desc_reg_court_gaceq et desc_reg_court_gacouest
     
              Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "AUCUN" Or Cells(x + 1, [gac_travail].Column).value = "aucun" Then
     
    'Si "aucun" copie provinciale longue dans desc_reg_gaceq, desc_reg_gacouest et desc_reg_sigmasante
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si "aucun" copie provinciale courte dans desc_reg_court_gaceq, desc_reg_court_gacouest et desc_reg_court_sigmasante
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
               ElseIf Cells(x + 1, [gac_travail].Column).value = "TOUS" Or Cells(x + 1, [gac_travail].Column).value = "tous" Then
     
    'Si TOUS copie régionale longue dans desc_reg_gacouest_pi, desc_reg_gaceq_pi, desc_reg_sigmasante_pi
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si TOUS copie régionale courte dans desc_reg_court_gaceq_pi,desc_reg_court_gacouest_pi,desc_reg_court_sigmasante_pi
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
     
                End If
     
    'Si la famille copier est 80 mettre S sinon P dans code_type_produit
     
                Sheets("produits_items").Cells(x + 1, [code_type_produit_pi].Column).value = _
                IIf(Sheets("produits_items").Cells(x + 1, [no_famille_pi].Column).value = 80, "S", "P")
     
                End If
     
            End If
     
        End If
     
        Next cell
     
    'enlever les lignes vides de la feuille produits_items
     
        Sheets("produits_items").Select
        Range("A2").EntireRow.Insert
        Range("b1:B" & LastLignUsedInColumn("B")).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
     
     
    'sauvegarder le document
        ActiveWorkbook.Save
     
    End Sub
    Donc j'attends vos commentaire ou suggestion, si vous avez quelquechose de plus optimale que c'est 2 codes




    en vous remerciant mille fois !!!

    Donc j'Attends

  12. #12
    Expert confirmé
    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
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,

    j'aimerai savoir quel résultat fais ce code (comme je suis sur Mac) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.Replace Chr(1), ""
    je re de suite le temps de ta réponse
    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 en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  13. #13
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Salut donc le code sans le  efface tout ce que j'ai pris dans la sélection

  14. #14
    Expert confirmé
    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
    Points : 4 174
    Points
    4 174
    Par défaut
    ok,

    Donc si on fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(S, Chr(CodesToClean(x))) Then S = Replace(S, Chr(1), "") ' partie de ton code juste précision du Chr(1)
    on est censé avoir quel résutat ? tu peux me donner un exemple ??
    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 en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  15. #15
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonsoir,

    Si j'utilise CleanTrim dans un array ou Seulement dans un code qu'un range est égale au range affecté de CleanTrim j'arrive avec un message d'erreur.
    Quel est donc ce mystérieux message d'erreur que tu nous caches si soigneusement?

    Pourquoi ne pas tenter, dans la boucle sur ton Array, une conversion grâce à CStr(element.value)?
    Cordialement,
    Franck

  16. #16
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Citation Envoyé par RyuAutodidacte Voir le message
    ok,

    Donc si on fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(S, Chr(CodesToClean(x))) Then S = Replace(S, Chr(1), "") ' partie de ton code juste précision du Chr(1)
    on est censé avoir quel résutat ? tu peux me donner un exemple ??
    Bonjour Ryu, je comprends que on change donc la liste de caractère du CleanTrim par le chr(1)


    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
    Sub copiedansproduit_item_creationTESTsansarray()
     
        Dim x As Integer
        Dim cell As Variant
        Dim LettreVoulue As String
        Dim LettreFormat As String
        Dim LettreFamille As String
        Dim LettreClasse As String
        Dim LettreGroupe As String
        Dim LettreSousGroupe As String
     
        LettreVoulue = TrouveLettreColonne([prov_long_travail])
        LettreFormat = TrouveLettreColonne([no_format_travail])
        LettreFamille = TrouveLettreColonne([f_travail])
        LettreClasse = TrouveLettreColonne([c_travail])
        LettreGroupe = TrouveLettreColonne([g_travail])
        LettreSousGroupe = TrouveLettreColonne([sg_travail])
     
     
        Application.ScreenUpdating = False
     
    'nettoyer les lignes critiques afin d'enlever les caractères spéciaux
     
    Worksheets("Travail").Range(LettreFormat & 2, LettreVoulue & LastLignUsedInColumn(LettreFormat)) = _
        TESTCleanTrim(Worksheets("Travail").Range(LettreFormat & 2, LettreVoulue & LastLignUsedInColumn(LettreFormat)))
     
    Worksheets("Travail").Range(LettreFamille & 2, LettreVoulue & LastLignUsedInColumn(LettreFamille)) = _
        TESTCleanTrim(Worksheets("Travail").Range(LettreFamille & 2, LettreVoulue & LastLignUsedInColumn(LettreFamille)))
     
    Worksheets("Travail").Range(LettreClasse & 2, LettreVoulue & LastLignUsedInColumn(LettreClasse)) = _
        TESTCleanTrim(Worksheets("Travail").Range(LettreClasse & 2, LettreVoulue & LastLignUsedInColumn(LettreClasse)))
     
    Worksheets("Travail").Range(LettreGroupe & 2, LettreVoulue & LastLignUsedInColumn(LettreGroupe)) = _
        TESTCleanTrim(Worksheets("Travail").Range(LettreGroupe & 2, LettreVoulue & LastLignUsedInColumn(LettreGroupe)))
     
    Worksheets("Travail").Range(LettreSousGroupe & 2, LettreVoulue & LastLignUsedInColumn(LettreSousGroupe)) = _
        TESTCleanTrim(Worksheets("Travail").Range(LettreSousGroupe & 2, LettreVoulue & LastLignUsedInColumn(LettreSousGroupe)))
     
     
     
    'enlever les lignes de produit_item si jamais on refais la macro
     
        Worksheets("produits_items").Range("a2:BZ" & LastLignUsedInSheet("produits_items") + 1).Delete
     
     
        Sheets("Travail").Select
     
     
       For Each cell In Worksheets("Travail").Range(LettreVoulue & 2, LettreVoulue & LastLignUsedInColumn(LettreVoulue))
     
            x = x + 1
     
     
        If IsEmpty(Cells(x + 1, [no_item_travail].Column).value) Then
     
    ' Si la couleur n'est pas un numéro ou le format n'est lui non plus un numéro ou
    ' si la provinciale courte est vide ou est égale a "???" ou le GAC ayant description régionale est vide ou est égale a "???"
    ' ou la provinciale longue est supérieur a 200 caractères ou la provinciale courte est supérieur a 100 caractères
    ' ou la famille classe groupe sous-groupe n'existe pas ou si le GAC ayant description régionale est ano ou gaceq ou sigma ou ??? et que la
    ' description régionale longue est supérieur de 200 et la courte supérieur a 100 et que le GAC ayant description courte est différent des choix
    ' possibles on indique un erreur et on quitte la sub
     
            If IsNumeric(Cells(x + 1, [no_couleur_travail].Column)) = False _
            Or IsNumeric(Cells(x + 1, [no_format_travail].Column)) = False _
            Or IsEmpty(Cells(x + 1, [no_format_travail].Column)) _
            Or IsEmpty(Cells(x + 1, [prov_court_travail].Column)) _
            Or Cells(x + 1, [prov_court_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [gac_travail].Column)) _
            Or Cells(x + 1, [gac_travail].Column) = "???" _
            Or Len(Cells(x + 1, [prov_long_travail].Column)) > 200 _
            Or Len(Cells(x + 1, [prov_court_travail].Column)) > 100 _
            Or Cells(x + 1, [fcgs_travail].Column) = "non" _
            Or ((Cells(x + 1, [gac_travail].Column) = "SIGMA" Or Cells(x + 1, [gac_travail].Column) = "sigma" _
            Or Cells(x + 1, [gac_travail].Column) = "gaceq" Or Cells(x + 1, [gac_travail].Column) = "GACEQ" _
            Or Cells(x + 1, [gac_travail].Column) = "ano" Or Cells(x + 1, [gac_travail].Column) = "ANO") _
            And (Cells(x + 1, [reg_long_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [reg_long_travail].Column)) _
            Or Len(Cells(x + 1, [reg_long_travail].Column)) > 200 _
            Or Cells(x + 1, [reg_court_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [reg_court_travail].Column)) Or Len(Cells(x + 1, [reg_court_travail].Column)) > 100)) _
            Or (Cells(x + 1, [gac_travail].Column) <> "gaceq" And Cells(x + 1, [gac_travail].Column) <> "GACEQ" _
            And Cells(x + 1, [gac_travail].Column) <> "sigma" And Cells(x + 1, [gac_travail].Column) <> "SIGMA" _
            And Cells(x + 1, [gac_travail].Column) <> "tous" And Cells(x + 1, [gac_travail].Column) <> "TOUS" _
            And Cells(x + 1, [gac_travail].Column) <> "ANO" And Cells(x + 1, [gac_travail].Column) <> "ano" _
            And Cells(x + 1, [gac_travail].Column) <> "aucun" And Cells(x + 1, [gac_travail].Column) <> "AUCUN") Then
     
                MsgBox "N'a pu transféré dans l'onglet produit_item, utiliser le bouton validation a fin de trouver les erreurs !!!", vbCritical
                Exit Sub
     
            Else
     
            If IsEmpty(Cells(x + 1, [no_item_travail].Column).value) Then
     
    'copie description provinciale longue
     
                Sheets("produits_items").Cells(x + 1, [desc_prov_pi].Column) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
    'copie description provinciale courte
     
                Sheets("produits_items").Cells(x + 1, [desc_prov_court_pi].Column) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
    'mettre vrai dans index des taxes
     
          Union(Sheets("produits_items").Cells(x + 1, [ind_tx_prov_pi].Column), _
                Sheets("produits_items").Cells(x + 1, [ind_taxe_fed_pi].Column)) = "TRUE"
     
     
    'mettre P dans code_portee_produit et dans code_portee_item
     
           Union(Sheets("produits_items").Cells(x + 1, [code_portee_produit_pi].Column), _
                 Sheets("produits_items").Cells(x + 1, [code_portee_item_pi].Column)) = "P"
     
    'copie de la famille
     
                Sheets("produits_items").Cells(x + 1, [no_famille_pi].Column) = Sheets("Travail").Cells(x + 1, [f_travail].Column)
     
    'copie de la classe
     
                Sheets("produits_items").Cells(x + 1, [no_classe_pi].Column) = Sheets("Travail").Cells(x + 1, [c_travail].Column)
     
    'copie du groupe
     
                Sheets("produits_items").Cells(x + 1, [no_groupe_pi].Column) = Sheets("Travail").Cells(x + 1, [g_travail].Column)
     
    'copie du sous-groupe
     
                Sheets("produits_items").Cells(x + 1, [no_ss_groupe_pi].Column) = Sheets("Travail").Cells(x + 1, [sg_travail].Column)
     
    'copie du format
     
                Sheets("produits_items").Cells(x + 1, [no_format_pi].Column) = Sheets("Travail").Cells(x + 1, [no_format_travail].Column)
     
    'copie de la couleur s'il y a lieu
     
                If Not IsEmpty(Sheets("Travail").Cells(x + 1, [no_couleur_travail].Column).value) Then _
                Sheets("produits_items").Cells(x + 1, [no_couleur_pi].Column) = Sheets("Travail").Cells(x + 1, [no_couleur_travail].Column)
     
    'copie de la regionale longue et courte dépendamment de la colonne GAC ayant description régionnale
     
                Sheets("Travail").Select
     
                If Cells(x + 1, [gac_travail].Column).value = "GACEQ" Or Cells(x + 1, [gac_travail].Column).value = "gaceq" Then
     
    'Si GACEQ copie régionale longue dans desc_reg_gaceq
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si GACEQ copie régionale courte dans desc_reg_court_gaceq
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
     
    'Si GACEQ copie provinciale longue dans desc_reg_gacouest et desc_reg_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si GACEQ copie provinciale courte dans desc_reg_court_gacouest et desc_reg_court_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "ANO" Or Cells(x + 1, [gac_travail].Column).value = "ano" Then
     
    'Si ANO copie régionale longue dans desc_reg_gacouest
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si ANO copie régionale courte dans desc_reg_court_gacouest
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
    'Si ANO copie provinciale longue dans desc_reg_gaceq et desc_reg_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si ANO copie provinciale courte dans desc_reg_court_gaceq et desc_reg_court_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "SIGMA" Or Cells(x + 1, [gac_travail].Column).value = "sigma" Then
     
    'Si SIGMA copie régionale longue dans desc_reg_sigmasante
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si SIGMA copie régionale courte dans desc_reg_court_sigmasante
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
    'Si SIGMA copie provinciale longue dans desc_reg_gaceq et desc_reg_gacouest
     
              Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
    'Si SIGMA copie provinciale courte dans desc_reg_court_gaceq et desc_reg_court_gacouest
     
              Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "AUCUN" Or Cells(x + 1, [gac_travail].Column).value = "aucun" Then
     
    'Si "aucun" copie provinciale longue dans desc_reg_gaceq, desc_reg_gacouest et desc_reg_sigmasante
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si "aucun" copie provinciale courte dans desc_reg_court_gaceq, desc_reg_court_gacouest et desc_reg_court_sigmasante
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
               ElseIf Cells(x + 1, [gac_travail].Column).value = "TOUS" Or Cells(x + 1, [gac_travail].Column).value = "tous" Then
     
    'Si TOUS copie régionale longue dans desc_reg_gacouest_pi, desc_reg_gaceq_pi, desc_reg_sigmasante_pi
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si TOUS copie régionale courte dans desc_reg_court_gaceq_pi,desc_reg_court_gacouest_pi,desc_reg_court_sigmasante_pi
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
     
                End If
     
    'Si la famille copier est 80 mettre S sinon P dans code_type_produit
     
                Sheets("produits_items").Cells(x + 1, [code_type_produit_pi].Column).value = _
                IIf(Sheets("produits_items").Cells(x + 1, [no_famille_pi].Column).value = 80, "S", "P")
     
                End If
     
            End If
     
        End If
     
        Next cell
     
    'enlever les lignes vides de la feuille produits_items
     
        Sheets("produits_items").Select
        Range("A2").EntireRow.Insert
        Range("b1:B" & LastLignUsedInColumn("B")).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
     
     
    'sauvegarder le document
        ActiveWorkbook.Save
     
    End Sub
    dont le CleanTim

    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
    unction TESTCleanTrim(ByVal S As String, Optional ConvertNonBreakingSpace As Boolean = True) As String
     
        Dim x As Long, CodesToClean As Variant
     
        CodesToClean = Array(0, 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, 127, 129, 141, 143, 144, 157)
     
        If ConvertNonBreakingSpace Then S = Replace(S, Chr(160), " ")
     
        For x = LBound(CodesToClean) To UBound(CodesToClean)
     
        If InStr(S, Chr(CodesToClean(x))) Then S = Replace(S, Chr(1), "")
     
        Next
     
        TESTCleanTrim = WorksheetFunction.Trim(S)
     
    End Function

    j'Arrive avec un message d'erreur encore

  17. #17
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Bonjour Pijaku,


    JE parlais du code suivant avant les conseil de monsieur Toulon donc


    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
    Sub copiedansproduit_item_creationTESTarray()
     
        Dim x As Integer
        Dim cell As Variant
        Dim LettreVoulue As String
        Dim LettreFormat As String
        Dim LettreFamille As String
        Dim LettreClasse As String
        Dim LettreGroupe As String
        Dim LettreSousGroupe As String
        Dim tout_Format As Range
        Dim tout_Famille As Range
        Dim tout_Classe As Range
        Dim tout_Groupe As Range
        Dim tout_SousGroupe As Range
        Dim ACorriger As Variant
        Dim element As Variant
     
        LettreVoulue = TrouveLettreColonne([prov_long_travail])
        LettreFormat = TrouveLettreColonne([no_format_travail])
        LettreFamille = TrouveLettreColonne([f_travail])
        LettreClasse = TrouveLettreColonne([c_travail])
        LettreGroupe = TrouveLettreColonne([g_travail])
        LettreSousGroupe = TrouveLettreColonne([sg_travail])
     
        Set tout_Format = Worksheets("Travail").Range(LettreFormat & 2, LettreFormat & LastLignUsedInColumn(LettreFormat))
        Set tout_Famille = Worksheets("Travail").Range(LettreFamille & 2, LettreFamille & LastLignUsedInColumn(LettreFamille))
        Set tout_Classe = Worksheets("Travail").Range(LettreClasse & 2, LettreClasse & LastLignUsedInColumn(LettreClasse))
        Set tout_Groupe = Worksheets("Travail").Range(LettreGroupe & 2, LettreGroupe & LastLignUsedInColumn(LettreGroupe))
        Set tout_SousGroupe = Worksheets("Travail").Range(LettreSousGroupe & 2, LettreSousGroupe & LastLignUsedInColumn(LettreSousGroupe))
     
        ACorriger = Array(tout_Format, tout_Famille, tout_Classe, tout_Groupe, tout_SousGroupe)
     
     
        Application.ScreenUpdating = False
     
    'nettoyer les lignes critiques afin d'enlever les caractères spéciaux
     
    For Each element In tout_Format
     
    element.value = CleanTrim(element.value)
     
    Next element
     
     
     
     
    'enlever les lignes de produit_item si jamais on refais la macro
     
        Worksheets("produits_items").Range("a2:BZ" & LastLignUsedInSheet("produits_items") + 1).Delete
     
     
        Sheets("Travail").Select
     
     
       For Each cell In Worksheets("Travail").Range(LettreVoulue & 2, LettreVoulue & LastLignUsedInColumn(LettreVoulue))
     
            x = x + 1
     
     
        If IsEmpty(Cells(x + 1, [no_item_travail].Column).value) Then
     
    ' Si la couleur n'est pas un numéro ou le format n'est lui non plus un numéro ou
    ' si la provinciale courte est vide ou est égale a "???" ou le GAC ayant description régionale est vide ou est égale a "???"
    ' ou la provinciale longue est supérieur a 200 caractères ou la provinciale courte est supérieur a 100 caractères
    ' ou la famille classe groupe sous-groupe n'existe pas ou si le GAC ayant description régionale est ano ou gaceq ou sigma ou ??? et que la
    ' description régionale longue est supérieur de 200 et la courte supérieur a 100 et que le GAC ayant description courte est différent des choix
    ' possibles on indique un erreur et on quitte la sub
     
            If IsNumeric(Cells(x + 1, [no_couleur_travail].Column)) = False _
            Or IsNumeric(Cells(x + 1, [no_format_travail].Column)) = False _
            Or IsEmpty(Cells(x + 1, [no_format_travail].Column)) _
            Or IsEmpty(Cells(x + 1, [prov_court_travail].Column)) _
            Or Cells(x + 1, [prov_court_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [gac_travail].Column)) _
            Or Cells(x + 1, [gac_travail].Column) = "???" _
            Or Len(Cells(x + 1, [prov_long_travail].Column)) > 200 _
            Or Len(Cells(x + 1, [prov_court_travail].Column)) > 100 _
            Or Cells(x + 1, [fcgs_travail].Column) = "non" _
            Or ((Cells(x + 1, [gac_travail].Column) = "SIGMA" Or Cells(x + 1, [gac_travail].Column) = "sigma" _
            Or Cells(x + 1, [gac_travail].Column) = "gaceq" Or Cells(x + 1, [gac_travail].Column) = "GACEQ" _
            Or Cells(x + 1, [gac_travail].Column) = "ano" Or Cells(x + 1, [gac_travail].Column) = "ANO") _
            And (Cells(x + 1, [reg_long_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [reg_long_travail].Column)) _
            Or Len(Cells(x + 1, [reg_long_travail].Column)) > 200 _
            Or Cells(x + 1, [reg_court_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [reg_court_travail].Column)) Or Len(Cells(x + 1, [reg_court_travail].Column)) > 100)) _
            Or (Cells(x + 1, [gac_travail].Column) <> "gaceq" And Cells(x + 1, [gac_travail].Column) <> "GACEQ" _
            And Cells(x + 1, [gac_travail].Column) <> "sigma" And Cells(x + 1, [gac_travail].Column) <> "SIGMA" _
            And Cells(x + 1, [gac_travail].Column) <> "tous" And Cells(x + 1, [gac_travail].Column) <> "TOUS" _
            And Cells(x + 1, [gac_travail].Column) <> "ANO" And Cells(x + 1, [gac_travail].Column) <> "ano" _
            And Cells(x + 1, [gac_travail].Column) <> "aucun" And Cells(x + 1, [gac_travail].Column) <> "AUCUN") Then
     
                MsgBox "N'a pu transféré dans l'onglet produit_item, utiliser le bouton validation a fin de trouver les erreurs !!!", vbCritical
                Exit Sub
     
            Else
     
            If IsEmpty(Cells(x + 1, [no_item_travail].Column).value) Then
     
    'copie description provinciale longue
     
                Sheets("produits_items").Cells(x + 1, [desc_prov_pi].Column) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
    'copie description provinciale courte
     
                Sheets("produits_items").Cells(x + 1, [desc_prov_court_pi].Column) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
    'mettre vrai dans index des taxes
     
          Union(Sheets("produits_items").Cells(x + 1, [ind_tx_prov_pi].Column), _
                Sheets("produits_items").Cells(x + 1, [ind_taxe_fed_pi].Column)) = "TRUE"
     
     
    'mettre P dans code_portee_produit et dans code_portee_item
     
           Union(Sheets("produits_items").Cells(x + 1, [code_portee_produit_pi].Column), _
                 Sheets("produits_items").Cells(x + 1, [code_portee_item_pi].Column)) = "P"
     
    'copie de la famille
     
                Sheets("produits_items").Cells(x + 1, [no_famille_pi].Column) = Sheets("Travail").Cells(x + 1, [f_travail].Column)
     
    'copie de la classe
     
                Sheets("produits_items").Cells(x + 1, [no_classe_pi].Column) = Sheets("Travail").Cells(x + 1, [c_travail].Column)
     
    'copie du groupe
     
                Sheets("produits_items").Cells(x + 1, [no_groupe_pi].Column) = Sheets("Travail").Cells(x + 1, [g_travail].Column)
     
    'copie du sous-groupe
     
                Sheets("produits_items").Cells(x + 1, [no_ss_groupe_pi].Column) = Sheets("Travail").Cells(x + 1, [sg_travail].Column)
     
    'copie du format
     
                Sheets("produits_items").Cells(x + 1, [no_format_pi].Column) = Sheets("Travail").Cells(x + 1, [no_format_travail].Column)
     
    'copie de la couleur s'il y a lieu
     
                If Not IsEmpty(Sheets("Travail").Cells(x + 1, [no_couleur_travail].Column).value) Then _
                Sheets("produits_items").Cells(x + 1, [no_couleur_pi].Column) = Sheets("Travail").Cells(x + 1, [no_couleur_travail].Column)
     
    'copie de la regionale longue et courte dépendamment de la colonne GAC ayant description régionnale
     
                Sheets("Travail").Select
     
                If Cells(x + 1, [gac_travail].Column).value = "GACEQ" Or Cells(x + 1, [gac_travail].Column).value = "gaceq" Then
     
    'Si GACEQ copie régionale longue dans desc_reg_gaceq
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si GACEQ copie régionale courte dans desc_reg_court_gaceq
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
     
    'Si GACEQ copie provinciale longue dans desc_reg_gacouest et desc_reg_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si GACEQ copie provinciale courte dans desc_reg_court_gacouest et desc_reg_court_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "ANO" Or Cells(x + 1, [gac_travail].Column).value = "ano" Then
     
    'Si ANO copie régionale longue dans desc_reg_gacouest
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si ANO copie régionale courte dans desc_reg_court_gacouest
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
    'Si ANO copie provinciale longue dans desc_reg_gaceq et desc_reg_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si ANO copie provinciale courte dans desc_reg_court_gaceq et desc_reg_court_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "SIGMA" Or Cells(x + 1, [gac_travail].Column).value = "sigma" Then
     
    'Si SIGMA copie régionale longue dans desc_reg_sigmasante
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si SIGMA copie régionale courte dans desc_reg_court_sigmasante
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
    'Si SIGMA copie provinciale longue dans desc_reg_gaceq et desc_reg_gacouest
     
              Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
    'Si SIGMA copie provinciale courte dans desc_reg_court_gaceq et desc_reg_court_gacouest
     
              Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "AUCUN" Or Cells(x + 1, [gac_travail].Column).value = "aucun" Then
     
    'Si "aucun" copie provinciale longue dans desc_reg_gaceq, desc_reg_gacouest et desc_reg_sigmasante
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si "aucun" copie provinciale courte dans desc_reg_court_gaceq, desc_reg_court_gacouest et desc_reg_court_sigmasante
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
               ElseIf Cells(x + 1, [gac_travail].Column).value = "TOUS" Or Cells(x + 1, [gac_travail].Column).value = "tous" Then
     
    'Si TOUS copie régionale longue dans desc_reg_gacouest_pi, desc_reg_gaceq_pi, desc_reg_sigmasante_pi
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si TOUS copie régionale courte dans desc_reg_court_gaceq_pi,desc_reg_court_gacouest_pi,desc_reg_court_sigmasante_pi
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
     
                End If
     
    'Si la famille copier est 80 mettre S sinon P dans code_type_produit
     
                Sheets("produits_items").Cells(x + 1, [code_type_produit_pi].Column).value = _
                IIf(Sheets("produits_items").Cells(x + 1, [no_famille_pi].Column).value = 80, "S", "P")
     
                End If
     
            End If
     
        End If
     
        Next cell
     
    'enlever les lignes vides de la feuille produits_items
     
        Sheets("produits_items").Select
        Range("A2").EntireRow.Insert
        Range("b1:B" & LastLignUsedInColumn("B")).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
     
     
    'sauvegarder le document
        ActiveWorkbook.Save
     
    End Sub

    Nom : Capture erreur array.JPG
Affichages : 155
Taille : 21,0 Ko


    Pour la conversion, j'ai fait quelques tentatives qui n'a pas marché mais je vais re-tenter ...

  18. #18
    Expert confirmé
    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
    Points : 4 174
    Points
    4 174
    Par défaut
    re,

    fais le test en posant qq pièges en choisissant la feuille et plage voulue :
    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
    Sub ExempleTest2()
    Dim x As Integer, Rng As Range, CodesToClean
     
        CodesToClean = Array(0, 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, 127, 129, 141, 143, 144, 157)
     
        With Sheets(1) ' Mettre la feuille voulue
            Set Rng = .Range("A1:A2") ' mettre la plage voulue
            For x = LBound(CodesToClean) To UBound(CodesToClean)
                Rng.Replace Chr(CodesToClean(x)), ""
            Next
     
            With Rng
                .Value = Evaluate("IF(ISTEXT(" & .Address & "),TRIM(" & .Address & "),REPT(" & .Address & ",1))")
            End With
        End With
        Set Rng = Nothing
    End Sub
    PS: j'ai retiré le 1 de l'Array volontairement (pas sur que tu en es besoin ????)
    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 en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  19. #19
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Re


    en ajoutant le code j'arrive avec ceci mai le CleanTrim ne s'exécute pas mais je n'ai plus d'erreur. Il doit avoir une combinaison de .value




    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
    Sub copiedansproduit_item_creationTESTarray2()
     
        Dim x As Integer
        Dim cell As Variant
        Dim LettreVoulue As String
        Dim LettreFormat As String
        Dim LettreFamille As String
        Dim LettreClasse As String
        Dim LettreGroupe As String
        Dim LettreSousGroupe As String
        Dim tout_Format As Range
        Dim tout_Famille As Range
        Dim tout_Classe As Range
        Dim tout_Groupe As Range
        Dim tout_SousGroupe As Range
        Dim ACorriger As Variant
        Dim element As Variant
     
        LettreVoulue = TrouveLettreColonne([prov_long_travail])
        LettreFormat = TrouveLettreColonne([no_format_travail])
        LettreFamille = TrouveLettreColonne([f_travail])
        LettreClasse = TrouveLettreColonne([c_travail])
        LettreGroupe = TrouveLettreColonne([g_travail])
        LettreSousGroupe = TrouveLettreColonne([sg_travail])
     
        Set tout_Format = Worksheets("Travail").Range(LettreFormat & 2, LettreFormat & LastLignUsedInColumn(LettreFormat))
        Set tout_Famille = Worksheets("Travail").Range(LettreFamille & 2, LettreFamille & LastLignUsedInColumn(LettreFamille))
        Set tout_Classe = Worksheets("Travail").Range(LettreClasse & 2, LettreClasse & LastLignUsedInColumn(LettreClasse))
        Set tout_Groupe = Worksheets("Travail").Range(LettreGroupe & 2, LettreGroupe & LastLignUsedInColumn(LettreGroupe))
        Set tout_SousGroupe = Worksheets("Travail").Range(LettreSousGroupe & 2, LettreSousGroupe & LastLignUsedInColumn(LettreSousGroupe))
     
        ACorriger = Array(tout_Format, tout_Famille, tout_Classe, tout_Groupe, tout_SousGroupe)
     
     
        Application.ScreenUpdating = False
     
    'nettoyer les lignes critiques afin d'enlever les caractères spéciaux
     
    For Each element In tout_Format
     
    element = CStr(element)
    element = CleanTrim(element)
     
    Next element
     
     
    'enlever les lignes de produit_item si jamais on refais la macro
     
        Worksheets("produits_items").Range("a2:BZ" & LastLignUsedInSheet("produits_items") + 1).Delete
     
     
        Sheets("Travail").Select
     
     
       For Each cell In Worksheets("Travail").Range(LettreVoulue & 2, LettreVoulue & LastLignUsedInColumn(LettreVoulue))
     
            x = x + 1
     
     
        If IsEmpty(Cells(x + 1, [no_item_travail].Column).value) Then
     
    ' Si la couleur n'est pas un numéro ou le format n'est lui non plus un numéro ou
    ' si la provinciale courte est vide ou est égale a "???" ou le GAC ayant description régionale est vide ou est égale a "???"
    ' ou la provinciale longue est supérieur a 200 caractères ou la provinciale courte est supérieur a 100 caractères
    ' ou la famille classe groupe sous-groupe n'existe pas ou si le GAC ayant description régionale est ano ou gaceq ou sigma ou ??? et que la
    ' description régionale longue est supérieur de 200 et la courte supérieur a 100 et que le GAC ayant description courte est différent des choix
    ' possibles on indique un erreur et on quitte la sub
     
            If IsNumeric(Cells(x + 1, [no_couleur_travail].Column)) = False _
            Or IsNumeric(Cells(x + 1, [no_format_travail].Column)) = False _
            Or IsEmpty(Cells(x + 1, [no_format_travail].Column)) _
            Or IsEmpty(Cells(x + 1, [prov_court_travail].Column)) _
            Or Cells(x + 1, [prov_court_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [gac_travail].Column)) _
            Or Cells(x + 1, [gac_travail].Column) = "???" _
            Or Len(Cells(x + 1, [prov_long_travail].Column)) > 200 _
            Or Len(Cells(x + 1, [prov_court_travail].Column)) > 100 _
            Or Cells(x + 1, [fcgs_travail].Column) = "non" _
            Or ((Cells(x + 1, [gac_travail].Column) = "SIGMA" Or Cells(x + 1, [gac_travail].Column) = "sigma" _
            Or Cells(x + 1, [gac_travail].Column) = "gaceq" Or Cells(x + 1, [gac_travail].Column) = "GACEQ" _
            Or Cells(x + 1, [gac_travail].Column) = "ano" Or Cells(x + 1, [gac_travail].Column) = "ANO") _
            And (Cells(x + 1, [reg_long_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [reg_long_travail].Column)) _
            Or Len(Cells(x + 1, [reg_long_travail].Column)) > 200 _
            Or Cells(x + 1, [reg_court_travail].Column) = "???" _
            Or IsEmpty(Cells(x + 1, [reg_court_travail].Column)) Or Len(Cells(x + 1, [reg_court_travail].Column)) > 100)) _
            Or (Cells(x + 1, [gac_travail].Column) <> "gaceq" And Cells(x + 1, [gac_travail].Column) <> "GACEQ" _
            And Cells(x + 1, [gac_travail].Column) <> "sigma" And Cells(x + 1, [gac_travail].Column) <> "SIGMA" _
            And Cells(x + 1, [gac_travail].Column) <> "tous" And Cells(x + 1, [gac_travail].Column) <> "TOUS" _
            And Cells(x + 1, [gac_travail].Column) <> "ANO" And Cells(x + 1, [gac_travail].Column) <> "ano" _
            And Cells(x + 1, [gac_travail].Column) <> "aucun" And Cells(x + 1, [gac_travail].Column) <> "AUCUN") Then
     
                MsgBox "N'a pu transféré dans l'onglet produit_item, utiliser le bouton validation a fin de trouver les erreurs !!!", vbCritical
                Exit Sub
     
            Else
     
            If IsEmpty(Cells(x + 1, [no_item_travail].Column).value) Then
     
    'copie description provinciale longue
     
                Sheets("produits_items").Cells(x + 1, [desc_prov_pi].Column) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
    'copie description provinciale courte
     
                Sheets("produits_items").Cells(x + 1, [desc_prov_court_pi].Column) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
    'mettre vrai dans index des taxes
     
          Union(Sheets("produits_items").Cells(x + 1, [ind_tx_prov_pi].Column), _
                Sheets("produits_items").Cells(x + 1, [ind_taxe_fed_pi].Column)) = "TRUE"
     
     
    'mettre P dans code_portee_produit et dans code_portee_item
     
           Union(Sheets("produits_items").Cells(x + 1, [code_portee_produit_pi].Column), _
                 Sheets("produits_items").Cells(x + 1, [code_portee_item_pi].Column)) = "P"
     
    'copie de la famille
     
                Sheets("produits_items").Cells(x + 1, [no_famille_pi].Column) = Sheets("Travail").Cells(x + 1, [f_travail].Column)
     
    'copie de la classe
     
                Sheets("produits_items").Cells(x + 1, [no_classe_pi].Column) = Sheets("Travail").Cells(x + 1, [c_travail].Column)
     
    'copie du groupe
     
                Sheets("produits_items").Cells(x + 1, [no_groupe_pi].Column) = Sheets("Travail").Cells(x + 1, [g_travail].Column)
     
    'copie du sous-groupe
     
                Sheets("produits_items").Cells(x + 1, [no_ss_groupe_pi].Column) = Sheets("Travail").Cells(x + 1, [sg_travail].Column)
     
    'copie du format
     
                Sheets("produits_items").Cells(x + 1, [no_format_pi].Column) = Sheets("Travail").Cells(x + 1, [no_format_travail].Column)
     
    'copie de la couleur s'il y a lieu
     
                If Not IsEmpty(Sheets("Travail").Cells(x + 1, [no_couleur_travail].Column).value) Then _
                Sheets("produits_items").Cells(x + 1, [no_couleur_pi].Column) = Sheets("Travail").Cells(x + 1, [no_couleur_travail].Column)
     
    'copie de la regionale longue et courte dépendamment de la colonne GAC ayant description régionnale
     
                Sheets("Travail").Select
     
                If Cells(x + 1, [gac_travail].Column).value = "GACEQ" Or Cells(x + 1, [gac_travail].Column).value = "gaceq" Then
     
    'Si GACEQ copie régionale longue dans desc_reg_gaceq
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si GACEQ copie régionale courte dans desc_reg_court_gaceq
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
     
    'Si GACEQ copie provinciale longue dans desc_reg_gacouest et desc_reg_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si GACEQ copie provinciale courte dans desc_reg_court_gacouest et desc_reg_court_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "ANO" Or Cells(x + 1, [gac_travail].Column).value = "ano" Then
     
    'Si ANO copie régionale longue dans desc_reg_gacouest
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si ANO copie régionale courte dans desc_reg_court_gacouest
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
    'Si ANO copie provinciale longue dans desc_reg_gaceq et desc_reg_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si ANO copie provinciale courte dans desc_reg_court_gaceq et desc_reg_court_sigmasante
     
            Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                  Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "SIGMA" Or Cells(x + 1, [gac_travail].Column).value = "sigma" Then
     
    'Si SIGMA copie régionale longue dans desc_reg_sigmasante
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si SIGMA copie régionale courte dans desc_reg_court_sigmasante
     
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
    'Si SIGMA copie provinciale longue dans desc_reg_gaceq et desc_reg_gacouest
     
              Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                    Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
    'Si SIGMA copie provinciale courte dans desc_reg_court_gaceq et desc_reg_court_gacouest
     
              Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                    Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
                ElseIf Cells(x + 1, [gac_travail].Column).value = "AUCUN" Or Cells(x + 1, [gac_travail].Column).value = "aucun" Then
     
    'Si "aucun" copie provinciale longue dans desc_reg_gaceq, desc_reg_gacouest et desc_reg_sigmasante
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_long_travail].Column)
     
     
    'Si "aucun" copie provinciale courte dans desc_reg_court_gaceq, desc_reg_court_gacouest et desc_reg_court_sigmasante
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [prov_court_travail].Column)
     
     
               ElseIf Cells(x + 1, [gac_travail].Column).value = "TOUS" Or Cells(x + 1, [gac_travail].Column).value = "tous" Then
     
    'Si TOUS copie régionale longue dans desc_reg_gacouest_pi, desc_reg_gaceq_pi, desc_reg_sigmasante_pi
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [reg_long_travail].Column)
     
    'Si TOUS copie régionale courte dans desc_reg_court_gaceq_pi,desc_reg_court_gacouest_pi,desc_reg_court_sigmasante_pi
     
               Union(Sheets("produits_items").Cells(x + 1, [desc_reg_court_gacouest_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_gaceq_pi].Column), _
                     Sheets("produits_items").Cells(x + 1, [desc_reg_court_sigmasante_pi].Column)) = Sheets("Travail").Cells(x + 1, [reg_court_travail].Column)
     
     
                End If
     
    'Si la famille copier est 80 mettre S sinon P dans code_type_produit
     
                Sheets("produits_items").Cells(x + 1, [code_type_produit_pi].Column).value = _
                IIf(Sheets("produits_items").Cells(x + 1, [no_famille_pi].Column).value = 80, "S", "P")
     
                End If
     
            End If
     
        End If
     
        Next cell
     
    'enlever les lignes vides de la feuille produits_items
     
        Sheets("produits_items").Select
        Range("A2").EntireRow.Insert
        Range("b1:B" & LastLignUsedInColumn("B")).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
     
     
    'sauvegarder le document
        ActiveWorkbook.Save
     
    End Sub

    Update: Je viens de me rendre compte que ma boucle ne pointais pas sur mon array,


    J'arrive encore avec le message de l'erreur 13

  20. #20
    Expert confirmé
    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
    Points : 4 174
    Points
    4 174
    Par défaut
    je ne sais pas si ta dernière réponse me concerne, mais je demandais juste de tester sur un nouveau classeur des données à traiter avec le code que je t'ai donné ci-dessus,
    afin d'avoir un retour sur le résultat et savoir si ce résultat correspond à tes attentes ??
    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 en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Utilisé le framework 3.5 au lieu du 4.0
    Par toniob44 dans le forum VB.NET
    Réponses: 8
    Dernier message: 05/06/2012, 22h47
  2. Réponses: 2
    Dernier message: 30/06/2009, 09h53
  3. fichier mde utilisé au lieu de mdb
    Par laurent.w dans le forum Sécurité
    Réponses: 3
    Dernier message: 23/01/2007, 17h30
  4. je sais pas utilisé une boucle pour ?
    Par napz dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/10/2006, 01h09
  5. Réponses: 9
    Dernier message: 22/03/2003, 21h47

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