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 :

Macro s'exécute bien en "pas à pas" mais pas en exécution normale [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Points : 207
    Points
    207
    Par défaut Macro s'exécute bien en "pas à pas" mais pas en exécution normale
    Bonjour,

    Le code suivant s'exécute très bien en mode "pas à pas".
    Pourtant, lorsque le l'exécute normalement, c'est à dire sans mode pas à pas et via "Exécution"=>"Executer Sub" (raccourci F5), il écrit une formule étonnante :
    "=RECHERCHEV(A2;Context!$B:$C;6;FAUX)" (Qui est la mauvais formule) au lieu de "=RECHERCHEV(A2;Context!$B:$G;6;FAUX) (qui est la formule qui doit être écrite)
    Par ailleurs, le code ne filtre pas toute la "1ere feuille" mais seulement les 4 premières colonnes.

    C'est la première fois que je vois ça en VBA, je me demande bien à quoi c'est du !


    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
    Sub TEST()
    Application.ScreenUpdating = False
    If Worksheets.Count = 1 Then
        Sheets.Add After:=ActiveSheet
        ActiveSheet.Name = "5eme feuille"
        With Sheets("5eme feuille")
            .Range("A1").FormulaR1C1 = "Titre1"
            .Range("B1").FormulaR1C1 = "Titre2"
            .Range("C1").FormulaR1C1 = "Titre3"
            .Range("D1").FormulaR1C1 = "Titre4"
            .Range("E1").FormulaR1C1 = "Titre5"
            .Range("F1").FormulaR1C1 = "Titre6"
            .Range("G1").FormulaR1C1 = "Titre7"
            .Range("H1").FormulaR1C1 = "Titre8"
        End With
        Sheets("Report").Range(Sheets("Report").Range("B2"), Sheets("Report").Range("B2").End(xlDown)).Copy Destination:=Sheets("5eme feuille").Range("A2")
        Range("B2:B" & Range("A" & Rows.Count).End(xlUp).Row) = 2016
        Sheets("Report").Range(Sheets("Report").Range("C2"), Sheets("Report").Range("C2").End(xlDown)).Copy Destination:=Sheets("5eme feuille").Range("C2")
     
    Sheets.Add After:=Sheets("Report")
    ActiveSheet.Name = "4eme feuille"
    With Sheets("Report").Range("A1").CurrentRegion
        .AutoFilter Field:=5, Criteria1:="7"
        .Copy Destination:=Sheets("4eme feuille").Range("A1")
    End With
    Application.CutCopyMode = False
    With Sheets("4eme feuille").Columns("A:A")
        .FormatConditions.AddUniqueValues
        .FormatConditions(Sheets("4eme feuille").Columns("A:A").FormatConditions.Count).SetFirstPriority
        .FormatConditions(1).DupeUnique = xlDuplicate
    End With
    With Sheets("4eme feuille").Columns("A:A").FormatConditions(1).Font
        .Color = -16383844
        .TintAndShade = 0
    End With
    With Sheets("4eme feuille").Columns("A:A").FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13551615
        .TintAndShade = 0
    End With
    With Sheets("4eme feuille")
    .Columns("A:A").FormatConditions(1).StopIfTrue = False
    '.Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:=RGB(255, _
        199, 206), Operator:=xlFilterCellColor
    End With
     
        Sheets.Add After:=Sheets("Report")
        ActiveSheet.Name = "3eme feuille"
        With Sheets("Report").Range("A1").CurrentRegion
            .AutoFilter Field:=5, Criteria1:="9"
            .Copy Destination:=Sheets("3eme feuille").Range("A1")
        End With
        Application.CutCopyMode = False
        With Sheets("3eme feuille").Columns("A:A")
            .FormatConditions.AddUniqueValues
            .FormatConditions(Sheets("3eme feuille").Columns("A:A").FormatConditions.Count).SetFirstPriority
            .FormatConditions(1).DupeUnique = xlDuplicate
        End With
        With Sheets("3eme feuille").Columns("A:A").FormatConditions(1).Font
            .Color = -16383844
            .TintAndShade = 0
        End With
        With Sheets("3eme feuille").Columns("A:A").FormatConditions(1).Interior
            .PatternColorIndex = xlAutomatic
            .Color = 13551615
            .TintAndShade = 0
        End With
        With Sheets("3eme feuille")
        .Columns("A:A").FormatConditions(1).StopIfTrue = False
        '.Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:=RGB(255, _
            199, 206), Operator:=xlFilterCellColor
        End With
     
            Sheets.Add After:=Sheets("Report")
            ActiveSheet.Name = "2nd Feuille"
            With Sheets("Report").Range("A1").CurrentRegion
                .AutoFilter Field:=5, Criteria1:="14"
                .Copy Destination:=Sheets("2nd Feuille").Range("A1")
            End With
            Application.CutCopyMode = False
            With Sheets("2nd Feuille").Columns("A:A")
                .FormatConditions.AddUniqueValues
                .FormatConditions(Sheets("2nd Feuille").Columns("A:A").FormatConditions.Count).SetFirstPriority
                .FormatConditions(1).DupeUnique = xlDuplicate
            End With
            With Sheets("2nd Feuille").Columns("A:A").FormatConditions(1).Font
                .Color = -16383844
                .TintAndShade = 0
            End With
            With Sheets("2nd Feuille").Columns("A:A").FormatConditions(1).Interior
                .PatternColorIndex = xlAutomatic
                .Color = 13551615
                .TintAndShade = 0
            End With
            With Sheets("2nd Feuille")
            .Columns("A:A").FormatConditions(1).StopIfTrue = False
           ' .Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:=RGB(255, _
                199, 206), Operator:=xlFilterCellColor
            End With
     
                        Sheets.Add After:=Sheets("Report")
                         ActiveSheet.Name = "1ere feuille"
                         With Sheets("Report").Range("A1").CurrentRegion
                             .AutoFilter Field:=5, Criteria1:="23"
                             .Copy Destination:=Sheets("1ere feuille").Range("A1")
                         End With
                         Application.CutCopyMode = False
                         With Sheets("1ere feuille").Columns("A:A")
                             .FormatConditions.AddUniqueValues
                             .FormatConditions(Sheets("1ere feuille").Columns("A:A").FormatConditions.Count).SetFirstPriority
                             .FormatConditions(1).DupeUnique = xlDuplicate
                         End With
                         With Sheets("1ere feuille").Columns("A:A").FormatConditions(1).Font
                             .Color = -16383844
                             .TintAndShade = 0
                         End With
                         With Sheets("1ere feuille").Columns("A:A").FormatConditions(1).Interior
                             .PatternColorIndex = xlAutomatic
                             .Color = 13551615
                             .TintAndShade = 0
                         End With
                         With Sheets("1ere feuille")
                         .Columns("A:A").FormatConditions(1).StopIfTrue = False
                        ' .Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:=RGB(255, _
                             199, 206), Operator:=xlFilterCellColor
                         End With
     
          Sheets("1ere feuille").Range("A1").CurrentRegion.AutoFilter
        Sheets("1ere feuille").AutoFilter.Sort.SortFields.Clear
        Sheets("1ere feuille").AutoFilter.Sort.SortFields.Add(Range( _
            "A1"), xlSortOnCellColor, xlAscending, , xlSortTextAsNumbers).SortOnValue. _
            Color = RGB(255, 199, 206)
        With ActiveWorkbook.Worksheets("1ere feuille").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
            If Sheets("1ere feuille").Range("A2") = Sheets("1ere feuille").Range("A3") Then
                If Sheets("1ere feuille").Range("H2").Value < Sheets("1ere feuille").Range("H3").Value Then
                    Sheets("1ere feuille").Rows(2).EntireRow.Delete x1Up
                ElseIf Sheets("1ere feuille").Range("H2").Value > Sheets("1ere feuille").Range("H3").Value Then
                    Sheets("1ere feuille").Rows(3).EntireRow.Delete x1Up
                End If
                Else: Exit Sub
            End If
     
                Sheets("2nd Feuille").Range("A1").CurrentRegion.AutoFilter
                Sheets("2nd Feuille").AutoFilter.Sort.SortFields.Clear
                Sheets("2nd Feuille").AutoFilter.Sort.SortFields.Add(Range( _
                    "A1"), xlSortOnCellColor, xlAscending, , xlSortTextAsNumbers).SortOnValue. _
                    Color = RGB(255, 199, 206)
                With ActiveWorkbook.Worksheets("2nd Feuille").AutoFilter.Sort
                    .Header = xlYes
                    .MatchCase = False
                    .Orientation = xlTopToBottom
                    .SortMethod = xlPinYin
                    .Apply
                End With
                    If Sheets("2nd Feuille").Range("A2") = Sheets("2nd Feuille").Range("A3") Then
                        If Sheets("2nd Feuille").Range("H2").Value < Sheets("2nd Feuille").Range("H3").Value Then
                            Sheets("2nd Feuille").Rows(2).EntireRow.Delete x1Up
                        ElseIf Sheets("2nd Feuille").Range("H2").Value > Sheets("2nd Feuille").Range("H3").Value Then
                            Sheets("2nd Feuille").Rows(3).EntireRow.Delete x1Up
                        End If
                        Else: Exit Sub
                    End If
     
                        Sheets("3eme feuille").Range("A1").CurrentRegion.AutoFilter
                        Sheets("3eme feuille").AutoFilter.Sort.SortFields.Clear
                        Sheets("3eme feuille").AutoFilter.Sort.SortFields.Add(Range( _
                            "A1"), xlSortOnCellColor, xlAscending, , xlSortTextAsNumbers).SortOnValue. _
                            Color = RGB(255, 199, 206)
                        With ActiveWorkbook.Worksheets("3eme feuille").AutoFilter.Sort
                            .Header = xlYes
                            .MatchCase = False
                            .Orientation = xlTopToBottom
                            .SortMethod = xlPinYin
                            .Apply
                        End With
                            If Sheets("3eme feuille").Range("A2") = Sheets("3eme feuille").Range("A3") Then
                                If Sheets("3eme feuille").Range("H2").Value < Sheets("3eme feuille").Range("H3").Value Then
                                    Sheets("3eme feuille").Rows(2).EntireRow.Delete x1Up
                                ElseIf Sheets("3eme feuille").Range("H2").Value > Sheets("3eme feuille").Range("H3").Value Then
                                    Sheets("3eme feuille").Rows(3).EntireRow.Delete x1Up
                                End If
                                Else: Exit Sub
                            End If
     
                                Sheets("4eme feuille").Range("A1").CurrentRegion.AutoFilter
                                Sheets("4eme feuille").AutoFilter.Sort.SortFields.Clear
                                Sheets("4eme feuille").AutoFilter.Sort.SortFields.Add(Range( _
                                    "A1"), xlSortOnCellColor, xlAscending, , xlSortTextAsNumbers).SortOnValue. _
                                    Color = RGB(255, 199, 206)
                                With ActiveWorkbook.Worksheets("4eme feuille").AutoFilter.Sort
                                    .Header = xlYes
                                    .MatchCase = False
                                    .Orientation = xlTopToBottom
                                    .SortMethod = xlPinYin
                                    .Apply
                                End With
                                    If Sheets("4eme feuille").Range("A2") = Sheets("4eme feuille").Range("A3") Then
                                        If Sheets("4eme feuille").Range("H2").Value < Sheets("4eme feuille").Range("H3").Value Then
                                            Sheets("4eme feuille").Rows(2).EntireRow.Delete x1Up
                                        ElseIf Sheets("4eme feuille").Range("H2").Value > Sheets("4eme feuille").Range("H3").Value Then
                                            Sheets("4eme feuille").Rows(3).EntireRow.Delete x1Up
                                        End If
                                        Else: Exit Sub
                                    End If
     
        newHour = Hour(Now())
    newMinute = Minute(Now())
    newSecond = Second(Now()) + 10
    waitTime = TimeSerial(newHour, newMinute, newSecond)
    Application.Wait waitTime
     
    With Sheets("5eme feuille")
        .Range("D2").FormulaR1C1 = "=VLOOKUP(RC[-3],'3eme feuille'!C2:C7,6,FALSE)"
        .Range("D2").AutoFill Destination:=Sheets("5eme feuille").Range("D2:D" & Range("A1").End(xlDown).Row)
     
        .Range("E2").FormulaR1C1 = "=VLOOKUP(RC[-4],'4eme feuille'!C2:C7,6,FALSE)"
        .Range("E2").AutoFill Destination:=Sheets("5eme feuille").Range("E2:E" & Range("A1").End(xlDown).Row)
     
        .Range("G2").FormulaR1C1 = "=VLOOKUP(RC[-6],'2nd Feuille'!C2:C7,6,FALSE)"
        .Range("G2").AutoFill Destination:=Sheets("5eme feuille").Range("G2:G" & Range("A1").End(xlDown).Row)
     
        .Range("H2").FormulaR1C1 = "=VLOOKUP(RC[-7],1ere feuille!C2:C7,6,FALSE)"
        Sheets("5eme feuille").Range("H2").AutoFill Destination:=Sheets("5eme feuille").Range("H2:H" & Range("A1").End(xlDown).Row)
     
        Range(Range("I1:M1"), Range("I1:M1").End(xlDown)).Value = Range(Range("D1:H1"), Range("D1:H1").End(xlDown)).Value
        Columns("D:H").Delete Shift:=xlToLeft
    End With
     
        Sheets("5eme feuille").Select
     
    Else: MsgBox "Votre feuille 5eme feuille est déjà créée ! Pour la re-créer, supprimer celle existante et relancez la macro.", vbInformation + vbOKOnly, "Erreur feuille déjà créée"
    Exit Sub
    End If
    Application.ScreenUpdating = True
    End Sub
    Merci d'avance pour votre aide !

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").Formula = "=VLOOKUP(A2,Context!$B:$G,6,FALSE)"
    m'écrit bien : =RECHERCHEV(A2;Context!$B:$G;6;FAUX)
    en cellule B1

  3. #3
    Membre actif
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Points : 207
    Points
    207
    Par défaut
    Bonjour,

    Merci pour ton retour

    Utilises tu Office365 ?
    As tu lancé toute la procédure ou seulement la ligne que tu as cité ?

  4. #4
    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 176
    Points
    4 176
    Par défaut
    Bonjour,
    si tu veux éviter de passer par du R1C1 et écrire ta formule comme tu l'écris dans Excel, utilise FormulaLocal
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Formule()
        Range("A2:A10").FormulaLocal = "=RECHERCHEV(A2;Context!$B:$G;6;FAUX)"
    End Sub

  5. #5
    Membre actif
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Points : 207
    Points
    207
    Par défaut
    Bonjour,

    Pour la formule, il faut qu'elle puisse être écrite quelque soit la langue d'excel. C'est une macro qui va être exécutée dans d'autres langues que le français. :S

    C'est pour cette raison que j'ai opté pour le R1C1

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    L'utilisation de R1C1 et la langue de Office n'ont aucun rapport !
    Tu sembles confondre par contre Formula et FormulaLocal !
    - je n'ai pas à me préoccuper de ta version de Office (tu en parles maintenant !)
    - je n'ai pas non plus à lancer toute ta procédure. Je ne m'occupe que de la partie que tu dénonces et que tu es censé avoir isolée !
    Bonne chance.

  7. #7
    Membre actif
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par unparia Voir le message
    L'utilisation de R1C1 et la langue de Office n'ont aucun rapport !
    Tu sembles confondre par contre Formula et FormulaLocal !
    - je n'ai pas à me préoccuper de ta version de Office (tu en parles maintenant !)
    - je n'ai pas non plus à lancer toute ta procédure. Je ne m'occupe que de la partie que tu dénonces et que tu es censé avoir isolée !
    Bonne chance.
    Unparia,
    Il me semble qu'on ne se comprend pas bien.

    1) Je n'aime pas ta manière de me parler qui, sauf erreur de ma part, semble être condéscendante
    2) Je me suis référé à ce post pour la version d'excel : ici
    3) Je me suis référé à ce post de Fring pour la langue et la façon d'écrire une formule : ici
    4) Comme je l'ai déjà dis plus haut, la procédure s'exécute parfaitement bien en mode pas à pas, mais lorsque je lance la procédure en entier de façon "normale", avec la touche F5 par exemple, j'obtiens un résultat étonnant qui n'est pas celui obtenu en mode pas à pas.

    Si tu ne souhaites pas m'aider ou si tu ne peux pas, ce n'est pas grave, je vais trouver une autre solution.

    Bonne chance à toi aussi.

  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 176
    Points
    4 176
    Par défaut
    Re,
    Il y peut être une erreur dans la formule R1C1 même de rien du tout qui fausse le résultat de la formule => à voir
    sinon avec la nouvelle info que la macro sera utilisé dans plusieurs langue d'excel, la réponse d'unparia est la bonne,
    surtout qu'il est plus simple (quand on est pas habitué comme moi) d'utiliser la formule en langage VBA avec Formula que R1C1

    l'as tu testé pour voir ce qu'il en est ??

    Edit : un site de traduction de formule qui peut aider : http://fr.excel-translator.de/translator/

  9. #9
    Membre actif
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Points : 207
    Points
    207
    Par défaut
    Super ce site de traduction de formules ! Direct dans mes favoris !

    J'ai retapé plusieurs fois la formule en R1C1 avant de poster ce topic pour être sûr que ce n'était pas un problème de syntaxe.
    Pour le FormulaLocal, j'ai exactement le même problème qu'avant.

  10. #10
    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 176
    Points
    4 176
    Par défaut
    Re,
    Analyse cette capture traduite en R1C1 avec la même formule mais cellule différente, peut être une piste => à voir
    Nom : Capture d’écran 2016-09-12 à 15.45.17.png
Affichages : 454
Taille : 56,3 Ko

  11. #11
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Je suis désolé de constater que tu laisses de la place à des états d'âme et non à la "moelle".
    Je t'ai répondu, me semble-t-il (et ma réponse n'a rien à voir - comme dit - avec ta version de Office).
    Je te quitte en te demandant de réfléchir à tes lignes du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("A1").FormulaR1C1 = "Titre1"
    Il me semble que tu abuses de l'utilisation de FormulaR1C1 (en comprends-tu la portée ?) là où la propriété Value est celle qui suffit et est à utiliser.
    Re bonne chance

  12. #12
    Membre actif
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par unparia Voir le message
    Je suis désolé de constater que tu laisses de la place à des états d'âme et non à la "moelle".
    Je t'ai répondu, me semble-t-il (et ma réponse n'a rien à voir - comme dit - avec ta version de Office).
    Je te quitte en te demandant de réfléchir à tes lignes du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("A1").FormulaR1C1 = "Titre1"
    Il me semble que tu abuses de l'utilisation de FormulaR1C1 (en comprends-tu la portée ?) là où la propriété Value est celle qui suffit et est à utiliser.
    Re bonne chance
    Unparia,

    Ce n'est pas une question d'état d'âme ou de moelle. C'est une simple question de respect que l'on doit à tout être humain. Je suis désolé de constater que ce concept te paraît si étrange que tu n'y as même pas pensé.

    Maintenant, la "moelle"...

    En effet, il vaut mieux mettre ".value" et pas ".formulaR1C1" pour un simple texte. C'est corrigé, grâce à toi. Merci de ton aide .

    RyuAutodidacte,

    C'est très cohérent aussi de mon côté, avec une parfaite exécution lorsque je fais des tests, mais avec cette procédure, il semble y avoir un bug indescriptible.
    Je préfère repartir sur une autre façon de coder ce que je souhaite. Ce sera moins long, je mettrais mon résultat ici, au cas où ça serve à quelqu'un d'autre.

    Merci de ton aide en tout cas !


    Edit :


    Après avoir tout refait en ne repartant pas de zéro non plus puisque j'ai recyclé certains bouts du code ci dessus, voici le code final :

    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
    Sub TEST()
    Dim Cell As Range
    Dim fl As Worksheet
    If Worksheets.Count > 1 Then Exit Sub
        Sheets.Add After:=Feuil1
        ActiveSheet.Name = "FeuiFinal"
        With Sheets("FeuiFinal")
            .Range("A1").Value = "Titre1"
            .Range("B1").Value = "Titre2"
            .Range("C1").Value = "Titre3"
            .Range("D1").Value = "Titre4"
            .Range("E1").Value = "Titre5"
            .Range("F1").Value = "Titre6"
            .Range("G1").Value = "Titre7"
            .Range("H1").Value = "Titre8"
        End With
        Sheets("Report").Range(Sheets("Report").Range("B2"), Sheets("Report").Range("B2").End(xlDown)).Copy Destination:=Sheets("FeuiFinal").Range("A2")
        Range("B2:B" & Range("A" & Rows.Count).End(xlUp).Row) = 2016
        Sheets("Report").Range(Sheets("Report").Range("C2"), Sheets("Report").Range("C2").End(xlDown)).Copy Destination:=Sheets("FeuiFinal").Range("C2")
        Sheets.Add
            ActiveSheet.Name = "Feuil4"
        Sheets.Add
            ActiveSheet.Name = "Feuil3"
        Sheets.Add
            ActiveSheet.Name = "Feuil2"
        Sheets.Add
            ActiveSheet.Name = "Feuil1"
            For Each Cell In Sheets("Report").Range("E:E")
                If Cell.Value = "26" Then Cell.Value = "23"
            Next Cell
        Set Cell = Nothing
    With Sheets("Report")
        If Not .AutoFilterMode Then .Range("A1").AutoFilter
    End With
        Sheets("Report").Range("A1").AutoFilter Field:=5, Criteria1:="7"
        Sheets("Report").Range("A1").CurrentRegion.Copy Destination:=Sheets("Feuil4").Range("A1")
        Sheets("Report").Range("A1").AutoFilter Field:=5, Criteria1:="9"
        Sheets("Report").Range("A1").CurrentRegion.Copy Destination:=Sheets("Feuil3").Range("A1")
        Sheets("Report").Range("A1").AutoFilter Field:=5, Criteria1:="14"
        Sheets("Report").Range("A1").CurrentRegion.Copy Destination:=Sheets("Feuil2").Range("A1")
        Sheets("Report").Range("A1").AutoFilter Field:=5, Criteria1:="23"
        Sheets("Report").Range("A1").CurrentRegion.Copy Destination:=Sheets("Feuil1").Range("A1")
    Sheets("Report").AutoFilterMode = False
    For Each fl In Worksheets
        If fl.Name <> "Report" And fl.Name <> "FeuiFinal" Then 'attention aux noms de feuilles avec accent
            ActiveSheet.Sort.SortFields.Clear
            ActiveSheet.Range("A1").CurrentRegion.Sort Key1:=[I2], Order1:=xlAscending, Header:=xlYes, _
                OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
        End If
    Next fl
    Worksheets("Feuil1").Range("A1").CurrentRegion.RemoveDuplicates _
        Columns:=Array(1, 2, 3, 5, 6, 7, 8), Header:=xlYes
    Worksheets("Feuil2").Range("A1").CurrentRegion.RemoveDuplicates _
        Columns:=Array(1, 2, 3, 5, 6, 7, 8), Header:=xlYes
    Worksheets("Feuil4").Range("A1").CurrentRegion.RemoveDuplicates _
        Columns:=Array(1, 2, 3, 5, 6, 7, 8), Header:=xlYes
    Worksheets("Feuil4").Range("A1").CurrentRegion.RemoveDuplicates _
        Columns:=Array(1, 2, 3, 5, 6, 7, 8), Header:=xlYes
        Sheets("FeuiFinal").Range("D2").FormulaR1C1 = "=VLOOKUP(RC[-3],'Feuil4'!C2:C7,6,FALSE)"
        Sheets("FeuiFinal").Range("D2").AutoFill Destination:=Sheets("FeuiFinal").Range("D2:D" & Range("A1").End(xlDown).Row)
        Sheets("FeuiFinal").Range("E2").FormulaR1C1 = "=VLOOKUP(RC[-4],'Feuil4'!C2:C7,6,FALSE)"
        Sheets("FeuiFinal").Range("E2").AutoFill Destination:=Sheets("FeuiFinal").Range("E2:E" & Range("A1").End(xlDown).Row)
        Sheets("FeuiFinal").Range("G2").FormulaR1C1 = "=VLOOKUP(RC[-6],'Feuil2'!C2:C7,6,FALSE)"
        Sheets("FeuiFinal").Range("G2").AutoFill Destination:=Sheets("FeuiFinal").Range("G2:G" & Range("A1").End(xlDown).Row)
        Sheets("FeuiFinal").Range("H2").FormulaR1C1 = "=VLOOKUP(RC[-7],Feuil1!C2:C7,6,FALSE)"
        Sheets("FeuiFinal").Range("H2").AutoFill Destination:=Sheets("FeuiFinal").Range("H2:H" & Range("A1").End(xlDown).Row)
        Sheets("FeuiFinal").Columns("D:H").Copy
        Sheets("FeuiFinal").Range("I1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Sheets("FeuiFinal").Columns("D:H").Delete Shift:=xlToLeft
        Application.CutCopyMode = False
    End Sub
    Il fait ce que je veux, me fait gagner assez de temps pour me faire couler un café.
    J'espère que ça pourra aider quelqu'un d'autre

  13. #13
    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 176
    Points
    4 176
    Par défaut
    c'est déjà mieux que les 200++ lignes.
    N'oublie pas de mettre

    PS : cette partie là tu peux aussi l'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        With Sheets("FeuiFinal")
            .Range("A1").Value = "Titre1"
            .Range("B1").Value = "Titre2"
            .Range("C1").Value = "Titre3"
            .Range("D1").Value = "Titre4"
            .Range("E1").Value = "Titre5"
            .Range("F1").Value = "Titre6"
            .Range("G1").Value = "Titre7"
            .Range("H1").Value = "Titre8"
        End With
    en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        With Sheets("FeuiFinal")
            For i& = 1 To 8
                .Cells(1, i).Value = "Titre" & i
            Next
        End With

  14. #14
    Membre actif
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Points : 207
    Points
    207
    Par défaut
    Passé en résolu

    Exact, mais le titre est différent dans mon code

    Par contre j'ai utilisé des With pour alléger un peu tout ça et rendre la lecture plus agréable

  15. #15
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Bonjour,

    tu as aussi cette possibilité pour alléger la partie titres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1:C1").Value = Array("Titre1", "Titre2", "Titre3")
    eric

  16. #16
    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 176
    Points
    4 176
    Par défaut
    Super eriiic,
    je cherchais justement un truc de ce genre, javais pris la mauvaise direction avec TextColumns
    Petite variante si il y a beaucoup de titre et qu'on ne veut pas se prendre la tête avec la plage, ou que l'on a besoin de rajouter des titres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        T = Array("Titre1", "Titre2", "Titre3", "Titre4", "Titre5", "Titre6", "Titre7", "Titre8", "Titre9", "Titre10")
        Range("A1").Resize(, UBound(T) + 1) = T

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 12/03/2011, 16h18
  2. Réponses: 3
    Dernier message: 12/06/2010, 10h16
  3. [SSIS 2K5] Pas d'erreur mais pas de données
    Par tornade69 dans le forum SSIS
    Réponses: 2
    Dernier message: 14/07/2009, 15h03
  4. Pas d'erreur, mais pas d'affichage
    Par FotoXe33 dans le forum Langage
    Réponses: 7
    Dernier message: 21/06/2009, 12h54

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