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. #21
    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
    L'erreur 13 est très parlante. Elle t'indiques que tu envoies à ta fonction une variable d'un mauvais type. Donc autre chose qu'un String.
    D'où ma proposition de conversion.
    Remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For Each element In tout_Format
     
    element.value = CleanTrim(element.value)
     
    Next element
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For Each element In tout_Format
     
    element.value = CleanTrim(CStr(element.value))
     
    Next element
    De plus, tu mélanges un peu tout. Ta variable tout_Format est de type Range, ta variable element de type Variant. Donc tu ne boucles pas sur un Array, mais sur un Range... Avec les problèmes de lenteur induits.
    Cordialement,
    Franck

  2. #22
    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
    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 ??
    re-bonsoir mon ami, non le message était pour Pijaku.


    J'ai ajouté le code a ma macro et tout le contenu de mes cellule de ma plage sont des #VALEUR!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    Sub copiedansproduit_item_creationTESTsansarray2()
     
        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
     
        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))
     
     
     
        Application.ScreenUpdating = False
     
    'nettoyer les lignes critiques afin d'enlever les caractères spéciaux
     
    Dim y 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("Travail") ' Mettre la feuille voulue
            Set Rng = Union(tout_Format, tout_Famille, tout_Classe, tout_Groupe, tout_SousGroupe) ' mettre la plage voulue
            For y = LBound(CodesToClean) To UBound(CodesToClean)
                Rng.Replace Chr(CodesToClean(y)), ""
            Next
     
            With Rng
                .value = Evaluate("IF(ISTEXT(" & .Address & "),TRIM(" & .Address & "),REPT(" & .Address & ",1))")
            End With
        End With
        Set Rng = Nothing
     
     
     
    '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

  3. #23
    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
    Tu as des formules ?? pourrais je avoir un fichier exemple en xlsx avec fausses données du types de données à traiter (20 lignes) et une feuilles supp avec le résultat voulu ?
    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

  4. #24
    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
    Bonsoir Pijaku,


    J'ai écrit dans un post que je me suis trompé sur mon array ma boucle pointais sur un range et non sur mon array


    donc avec ceci

    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 ACorriger
     
     
    element.value = CleanTrim(CStr(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

    toujours l'erreur 13


    merci beaucouip pour votre aide

  5. #25
    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
    Tu as des formules ?? pourrais je avoir un fichier exemple en xlsx avec fausses données du types de données à traiter (20 lignes) et une feuilles supp avec le résultat voulu ?
    Voici donc l'exemple demandé ... je vous reparle demain, chers amis


    et encore merci pour votre aide !!!
    Fichiers attachés Fichiers attachés

  6. #26
    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,

    dans la feuille nommée "exemple" j'ai traité les données de N2:Q23 (c'est bien cela ? - PS : pas de liaison a un fichier externe, je ne sais quel sont les cellules concernées) :
    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 = 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("exemple") ' Mettre la feuille voulue
            Set Rng = .Range("N2:Q23") ' 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
    j'ai bien eu le même résultat que dans la feuille "résultat voulu" dans la colonne Z donné par la formule de concaténation (Tests fais sur Mac)

    Qu'en est il de ton coté ??
    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

  7. #27
    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
    Bonjour,

    Voici un exemple en passant par un 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
    Sub SupprimeEspace()
    Dim PlageAtraiter As Range, Rng As Range
    Dim MonArray As Variant, Resultat() As Variant
    Dim I As Long, J As Long
     
       With Sheets("exemple")
          'définition de la plage à traiter --- A ADAPTER ---
          Set PlageAtraiter = Union(.Range("B2:B1000"), .Range("D2:D1000"), .Range("J2:Y1000"))
       End With
       'Boucle sur chaque Areas de la plage discontigue
       For Each Rng In PlageAtraiter.Areas
          'Stocke les valeurs de cette "sous-plage" dans un Array
          MonArray = Rng.Value
          'Dimensionne l'Array des résultats
          ReDim Resultat(LBound(MonArray, 1) To UBound(MonArray, 1), LBound(MonArray, 2) To UBound(MonArray, 2))
          'Double boucle
          For I = LBound(Resultat, 1) To UBound(Resultat, 1)
             For J = LBound(Resultat, 2) To UBound(Resultat, 2)
                'évite les cellules éventuellement vides
                If MonArray(I, J) <> vbNullString Then
                   Resultat(I, J) = CleanTrim(MonArray(I, J))
                End If
             Next
          Next
          'restitue les valeurs dans les cellules
          Rng = Resultat
       Next
    End Sub
    Cordialement,
    Franck

  8. #28
    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 Bonjour a vous


    Pour
    Re,

    dans la feuille nommée "exemple" j'ai traité les données de N2:Q23 (c'est bien cela ? - PS : pas de liaison a un fichier externe, je ne sais quel sont les cellules concernées)
    Il s'agit de L2 à L23, N2 à Q23.

    J'ai essayé ton code Ryu et j'ai toujours l'affichage de #VALEUR!.

    J'essaye donc l code de Pijaku et vous reviens !!!

  9. #29
    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
    Pour le code de Pijaku,


    c'Est nickel !!!!



    J'ai également trouvé quelquechose de mon coté que je trouve étrange. Mon "erreur" en mettant un range au lieu d'un array dans mon For (poste discuté avec Pijaku)


    en remplacant le array j'arrive avec un résultant en mettant un union et les range voulue.


    J'arrive donc à ceci


    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 Union(tout_Classe, tout_Famille, tout_Format, tout_Groupe, tout_SousGroupe)
     
     
    element.value = CleanTrim(CStr(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


    merci sincèrement à vous qui avez participer au solution, votre aide est vraiment précieuse !!!


    amicalement JP

  10. #30
    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
    Bonsoir jpvba et au forum,

    Citation Envoyé par jpvba Voir le message
    Il s'agit de L2 à L23, N2 à Q23.

    J'ai essayé ton code Ryu et j'ai toujours l'affichage de #VALEUR!.
    j'ai réussi à me mettre sur PC pour faire encore qq tests, et j'ai trouvé grosso modo ce qui provoquait l'erreur #VALEUR :
    pour ma part j'avais fait le test sur une plage contiguë, et donc cela ne posait pas de problème pour le résultat.

    Cependant il apparait que lorsque l'on fait une Union de Range avec ma formule (comprenant Evaluate), l'évaluation ne passe pas,
    et on a alors comme résultat #VALEUR; donc la solution est de travailler sur les Areas, et là plus de problème.

    Avec le résultat OK sur une Union, on a bien un format pour les nombres directement (en automatique : "Standard" - le format texte ayant disparu)

    PS : Si une âme charitable, à l'explication exact du pourquoi et du comment le fait d'utiliser l'union et la formule avec Evaluate provoque ce résultat #VALEUR,
    cela serait top - en vous remerciant d'avance


    Mon code corrigé et revu :
    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
    Sub ExempleTestOK()
    Dim CodesToClean, x As Integer, Rng As Range, AR
     
        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("exemple") ' Mettre la feuille voulue
            Set Rng = Union(.Range("L2:L23"), .Range("N2:Q23")) ' mettre la plage voulue
            With Rng
                For x = LBound(CodesToClean) To UBound(CodesToClean)
                    .Replace Chr(CodesToClean(x)), ""
                Next
     
                For Each AR In .Areas
                    With AR
                        .Value = Evaluate("IF(ISTEXT(" & .Address & "),TRIM(" & .Address & "),REPT(" & .Address & ",1))")
                    End With
                Next
            End With
        End With
        Set Rng = Nothing
    End Sub
    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 2 sur 2 PremièrePremière 12

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