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 :

Erreur 1004 avec With [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2013
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2013
    Messages : 155
    Par défaut Erreur 1004 avec With
    Bonjour,

    je suis entrain de réordonner une base de données simple. Pour cela, j'ai développé un petit programme VBA pour automatiser tout ca !

    Cependant, j'ai une erreur 1004 "Erreur définie par l'application ou l'objet" à ma ligne "With Cells( i-1-k,2)" .

    Je ne comprend pas d'où elle vient. Voici mon programme:

    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
    Sub CopiéCollé()
        ' macro à utiliser sur les données traitée (marque et code séparés)
        Windows("URC2562.xlsx").Activate
     
        Dim i As Integer 'On définit les variables
        Dim j As Integer
        Dim marque As String
        Dim marque1 As String
        Dim k As Integer
        Dim p As Integer
        Dim code As String
     
     
        For i = 1 To 300 'On parcourt toutes les lignes
        Sheets("Feuil3").Activate 'On définit la feuille de données de bas
        If IsEmpty(Cells(i, 1)) Then
        p = 0
        While (IsEmpty(Cells(p + i, 1)))
            code = Cells(i + p, 2).Value
            Sheets("Feuil1").Activate
            With Cells(i - 1 - p, 2)
                .Value = .Value & code
            End With
            p = p + 1
        Wend
     
        Else 'Si la ligne a une marque
            If IsEmpty(Cells(i, 2)) Then 'Si la ligne n'a pas de code, on mémorise la marque pour l'ajouter après
            marque = Cells(i, 1).Value
            k = 1
            Else
                If k = 1 Then
                Cells(i, 2).Select
                Selection.Copy
                marque1 = Cells(i, 1).Value
                Sheets("Feuil1").Activate
                Cells(i, 2).Select
                ActiveSheet.Paste
                With Cells(i, 1)
                    .Value = marque & marque1
                End With
     
                k = 0
                Else 'Si tout va bien
                    For j = 1 To 2
                    Sheets("Feuil3").Activate
                    Cells(i, j).Select
                    Selection.Copy
                    Sheets("Feuil1").Activate
                    Cells(i, j).Select
                    ActiveSheet.Paste
                    Next j
                End If
     
            End If
        End If
        Next i
     
    End Sub
    Quelqu'un pourrait il déceler mon erreur?

    merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Je ne suis pas sur mais si tu commences à 1 et que tu rentres dans la boucle contenant le code 'With Cells(i - 1 - p, 2)' alors tu fais références à la cellule 'Cells(0, 2)' qui n'existe pas.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2013
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2013
    Messages : 155
    Par défaut
    Je me suis aussi posé la question.
    Mais lorsque que je met (i - p) au lieu de (i - 1 - p) j'ai la même erreur...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Oui parce que c'est une boucle 'While' et que tu incrémentes p.
    Du coup il est possible que la cellule référencée n'existe pas auquel cas ta boucle n'est pas bonne.

    Ajoute un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print (i - 1 - p)
    pour voir les valeurs prises pour le numéro de ligne de la cellule.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2013
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2013
    Messages : 155
    Par défaut
    D'accord, je viens d'ajouter la ligne que tu m'as proposé comme 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
    Sub CopiéCollé()
        ' macro à utiliser sur les données traitée (marque et code séparés)
        Windows("URC2562.xlsx").Activate
     
        Dim i As Integer 'On définit les variables
        Dim j As Integer
        Dim marque As String
        Dim marque1 As String
        Dim k As Integer
        Dim p As Integer
        Dim code As String
     
     
        For i = 1 To 300 'On parcourt toutes les lignes
        Sheets("Feuil3").Activate 'On définit la feuille de données de bas
        If IsEmpty(Cells(i, 1)) Then
        p = 0
        While (IsEmpty(Cells(p + i, 1)))
            Debug.Print (i - 1 - p)
            p = p + 1
        Wend
     
        Else 'Si la ligne a une marque
            If IsEmpty(Cells(i, 2)) Then 'Si la ligne n'a pas de code, on mémorise la marque pour l'ajouter après
            marque = Cells(i, 1).Value
            k = 1
            Else
                If k = 1 Then
                Cells(i, 2).Select
                Selection.Copy
                marque1 = Cells(i, 1).Value
                Sheets("Feuil1").Activate
                Cells(i, 2).Select
                ActiveSheet.Paste
                With Cells(i, 1)
                    .Value = marque & marque1
                End With
     
                k = 0
                Else 'Si tout va bien
                    For j = 1 To 2
                    Sheets("Feuil3").Activate
                    Cells(i, j).Select
                    Selection.Copy
                    Sheets("Feuil1").Activate
                    Cells(i, j).Select
                    ActiveSheet.Paste
                    Next j
                End If
     
            End If
        End If
        Next i
     
    End Sub
    Cependant, je ne sais pas comment me servir du debug.print . Ou est ce que je vois les valeurs prises?

    Edit: j'avais pas ma fenetre d'execution ouverte^^

    j'obtiens ça :
    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
    221 
     220 
     224 
     223 
     222 
     225 
     224 
     226 
     228 
     227 
     229 
     231 
     230 
     232 
     236 
     235 
     234 
     237 
     236 
     238 
     240 
     242 
     241 
     243 
     246 
     249 
     251 
     253 
     252 
     251 
     254 
     253 
     255 
     260 
     263 
     265 
     264 
     266 
     268 
     267 
     269 
     274 
     273 
     275 
     277 
     279 
     278 
     277 
     280 
     279 
     281 
     283 
     282 
     281 
     284 
     283 
     285 
     287 
     291 
     293 
     292 
     294 
     297 
     296 
     298 
     
     283 
     282 
     281 
     284 
     283 
     285 
     287 
     291 
     293 
     292 
     294 
     297 
     296 
     298 
     2 
     7 
     6 
     8 
     11 
     10 
     9 
     12 
     11 
     13 
     15 
     17 
     16 
     18 
     20 
     19 
     18 
     21 
     20 
     22 
     28 
     27 
     29 
     32 
     34 
     33 
     32 
     35 
     34 
     36 
     38 
     43 
     46 
     48 
     51 
     50 
     52 
     56 
     59 
     63 
     66 
     65 
     67 
     78 
     77 
     79 
     81 
     87 
     86 
     88 
     96 
     95 
     94 
     97 
     96 
     98 
     106 
     105 
     107 
     111 
     110 
     112 
     116 
     115 
     117 
     119 
     122 
     121 
     123 
     127 
     129 
     135 
     141 
     148 
     151 
     154 
     153 
     152 
     155 
     154 
     156 
     158 
     161 
     166 
     172 
     174 
     178 
     177 
     179 
     183 
     182 
     181 
     184 
     183 
     185 
     187 
     186 
     188 
     190 
     189 
     188 
     191 
     190 
     192 
     196 
     200 
     206 
     205 
     207 
     215 
     214 
     216 
     218 
     217 
     219 
     223 
     222 
     221 
     220 
     224
    Du coup j'ai l'impression qu'il ne prend jamais de valeur inférieure ou égale à zero.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Comme la boucle est assez longue remplace le plutôt par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If i - 1 - p <= 0 Then Debug.Print ("Erreur !")
    pour voir s'il y a effectivement des erreurs.

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

Discussions similaires

  1. Erreur 1004 avec Range().Locked
    Par alain8225 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/09/2010, 21h21
  2. [XL-2002] Erreur 1004 avec pastespecial sur macro très simple
    Par arou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/06/2009, 11h00
  3. j'ai une erreur 1004 avec mon vba ?
    Par isodoro dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/03/2009, 10h13
  4. [VBA][EXCEL]Erreur '1004' avec "Application.Run"
    Par Ania dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/01/2006, 10h50
  5. [Excel] Erreur 1004 avec un search
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/12/2005, 13h54

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