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 :

Copier des lignes avec une condition


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Février 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Copier des lignes avec une condition
    Bonjour à toutes et tous,

    Voici quel est mon problème : Je cherche à copier des informations contenues dans une ligne dans une autre feuille si une condition est vérifiée. Le collage se fait à la première ligne vide de l'autre feuille, qui est déterminée par un compteur. J'ai en tout 5 feuilles à analyser successivement afin d'incorporer les données dans une unique feuille. Or j'ai un bug dans ma macro car les données sont issues de collages avec liaison et donc je ne parvient pas à coller les valeurs mais les formules.


    Conclusion : les lignes collées ne sont pas les bonnes ; il semble y avoir conflit entre la valeur de la première ligne vide et l'adresse dans la formule de la ligne à copier.

    Voici ce que j'ai déjà fait. Merci de m'aider à solutionner ce problème
    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
    Sub Macro2()
    '
    ' Macro2 Macro
    ' Macro enregistrée le 17/02/2009 par remi.morlot
    '
    Dim i1 As Integer
    Dim i2 As Integer
    Dim i3 As Integer
    Dim i4 As Integer
    Dim i5 As Integer
    Dim i6 As Integer
    Dim i11 As Integer
    Dim i22 As Integer
    Dim i33 As Integer
    Dim i44 As Integer
    Dim i55 As Integer
     
    Dim NBligne1 As Integer
    Dim NBligne2 As Integer
    Dim compteur1 As Integer
    Dim compteur2 As Integer
    Dim compteur3 As Integer
    Dim compteur4 As Integer
    Dim compteur5 As Integer
    NBligne1 = 2
    NBligne2 = 2
    compteur1 = 1
    compteur2 = 1
    compteur3 = 1
    compteur4 = 1
    compteur5 = 1
    ' Repérage du nombre de lignes déjà remplies dans fichier attente
        ActiveWorkbook.Worksheets("fichier attente").Activate
         For i6 = 2 To 1000
     
         If Range(Cells(i6, 3), Cells(i6, 3)).Value <> "" Then
     
         NBligne2 = NBligne2 + 1
     
         End If
     
         Next i6
        Range("I1").Value = NBligne2
     
    ' Repérage du nombre de lignes dans entrées dijon à traiter
        ActiveWorkbook.Worksheets("récupération entrée dijon").Activate
         For i1 = 2 To 1000
     
         If Range(Cells(i1, 3), Cells(i1, 3)).Value <> "0" Then
     
         compteur1 = compteur1 + 1
     
         End If
     
         Next i1
        Range("I1").Value = compteur1
     
    ' Copie dans fichier AS400 des lignes validées
     
         For i11 = 2 To compteur1
         If Range(Cells(i11, 8), Cells(i11, 8)).Value = "OK" Then
         Range(Cells(i11, 1), Cells(i11, 7)).Select
         Selection.Copy
         ActiveWorkbook.Worksheets("fichier AS400").Select
         'Sheets("fichier AS400").Select
     
         Cells(NBligne1, 1).Select
         Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
     
     
         NBligne1 = NBligne1 + 1
     
    ' Copie dans fichier attente des lignes non validées
     
         Else
     
         Range(Cells(i11, 1), Cells(i11, 7)).Select
         Selection.Copy
         ActiveWorkbook.Worksheets("fichier attente").Select
         'Sheets("fichier AS400").Select
         Cells(NBligne2, 1).Select
         Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
     
     
         NBligne2 = NBligne2 + 1
     
         End If
     
         Next i11
         Range("K1").Value = NBligne1
         Range("J1").Value = NBligne2
     
    ' Repérage du nombre de lignes dans entrées Est à traiter
        ActiveWorkbook.Worksheets("Zone Est barre asco").Activate
         For i2 = 2 To 1000
     
         If Range(Cells(i2, 3), Cells(i2, 3)).Value = "0" Then
     
         Else
     
         compteur2 = compteur2 + 1
     
         End If
     
         Next i2
         Range("I1").Value = compteur2
     
    ' Copie dans fichier AS400 des lignes validées
     
     
         For i22 = 2 To compteur2
         If Range(Cells(i22, 8), Cells(i22, 8)).Value = "OK" Then
         Range(Cells(i22, 1), Cells(i22, 7)).Copy ActiveWorkbook.Worksheets("fichier AS400").Cells(NBligne1, 1)
     
         NBligne1 = NBligne1 + 1
     
     
    ' Copie dans fichier attente des lignes non validées
     
         Else
     
         Range(Cells(i22, 1), Cells(i22, 7)).Copy ActiveWorkbook.Worksheets("fichier attente").Cells(NBligne2, 1)
     
         NBligne2 = NBligne2 + 1
     
         End If
     
     
     
         Next i22
         Range("K1").Value = NBligne1
         Range("J1").Value = NBligne2
     
    ' Repérage du nombre de lignes dans PF zone est à traiter
        ActiveWorkbook.Worksheets("Zone Est Produit fini").Activate
         For i3 = 2 To 1000
     
         If Range(Cells(i3, 3), Cells(i3, 3)).Value = "0" Then
     
         Else
     
         compteur3 = compteur3 + 1
     
         End If
     
         Next i3
         Range("I1").Value = compteur3
     
    ' Copie dans fichier AS400 des lignes validées
     
     
         For i33 = 2 To compteur3
         If Range(Cells(i33, 8), Cells(i33, 8)).Value = "OK" Then
         Range(Cells(i33, 1), Cells(i33, 7)).Copy ActiveWorkbook.Worksheets("fichier AS400").Cells(NBligne1, 1)
     
         NBligne1 = NBligne1 + 1
     
     
    ' Copie dans fichier attente des lignes non validées
     
         Else
     
         Range(Cells(i33, 1), Cells(i33, 7)).Copy ActiveWorkbook.Worksheets("fichier attente").Cells(NBligne2, 1)
     
         NBligne2 = NBligne2 + 1
     
         End If
     
         Next i33
         Range("K1").Value = NBligne1
         Range("J1").Value = NBligne2
     
    ' Repérage du nombre de lignes dans André Ville à traiter
        ActiveWorkbook.Worksheets("André ville").Activate
         For i4 = 2 To 1000
     
         If Range(Cells(i4, 3), Cells(i4, 3)).Value = "0" Then
     
         Else
     
         compteur4 = compteur4 + 1
     
         End If
     
         Next i4
         Range("I1").Value = compteur4
    ' Copie dans fichier AS400 des lignes validées
     
     
         For i44 = 2 To compteur4
         If Range(Cells(i44, 8), Cells(i44, 8)).Value = "OK" Then
         Range(Cells(i44, 1), Cells(i44, 7)).Copy ActiveWorkbook.Worksheets("fichier AS400").Cells(NBligne1, 1)
     
         NBligne1 = NBligne1 + 1
     
     
    ' Copie dans fichier attente des lignes non validées
     
         Else
     
         Range(Cells(i44, 1), Cells(i44, 7)).Copy ActiveWorkbook.Worksheets("fichier attente").Cells(NBligne2, 1)
     
         NBligne2 = NBligne2 + 1
     
         End If
     
         Next i44
         Range("K1").Value = NBligne1
         Range("J1").Value = NBligne2
     
    ' Repérage du nombre de lignes dans transfert dijon/villechaud à traiter
        ActiveWorkbook.Worksheets("transfert dijon villechaud").Activate
         For i5 = 2 To 1000
     
         If Range(Cells(i5, 3), Cells(i5, 3)).Value = "0" Then
     
         Else
     
         compteur5 = compteur5 + 1
     
         End If
     
         Next i5
         Range("I1").Value = compteur5
     
    ' Copie dans fichier AS400 des lignes validées
     
     
         For i55 = 2 To compteur5
         If Range(Cells(i55, 8), Cells(i55, 8)).Value = "OK" Then
         Range(Cells(i55, 1), Cells(i55, 7)).Copy ActiveWorkbook.Worksheets("fichier AS400").Cells(NBligne1, 1)
     
         NBligne1 = NBligne1 + 1
     
     
    ' Copie dans fichier attente des lignes non validées
     
         Else
     
         Range(Cells(i55, 1), Cells(i55, 7)).Copy ActiveWorkbook.Worksheets("fichier attente").Cells(NBligne2, 1)
     
         NBligne2 = NBligne2 + 1
     
         End If
     
         Next i55
         Range("K1").Value = NBligne1
         Range("J1").Value = NBligne2
     
     
     
    End Sub

  2. #2
    Membre averti Avatar de Dinytro
    Profil pro
    Inscrit en
    Août 2003
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 392
    Points : 395
    Points
    395
    Par défaut
    La macro est un peu trop conséquente pour y travailler à l'aveugle.
    de plus ton problème n'est pas clairement exprimé
    e cherche à copier des informations contenues dans une ligne dans une autre feuille si une condition est vérifiée. Le collage se fait à la première ligne vide de l'autre feuille
    Peux-tu être plus précis et plus concret surtout.
    Sur la feuille1 ...
    Sur la feuille2..
    Que mettre depuis la feuille1 vers la feuille2 ?
    il semble y avoir conflit entre la valeur de la première ligne vide et l'adresse dans la formule de la ligne à copier
    Quel est le résultat constaté ? Qu'est ce qui cloche ?
    Peux-tu joindre le fichier excel histoire que nous puissions le lancer et nous rendre compte de nous même (c'est souvent facile à voir mais pas facile à expliquer)

Discussions similaires

  1. Masquer des lignes avec une condition
    Par mjp06 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/03/2019, 19h23
  2. Copier des lignes dans une autre feuille sous condition
    Par Maya06 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/05/2014, 20h57
  3. [XL-2007] copier des lignes d'une feuille à une autre et appliquer des filtres avec VBA
    Par Malek713 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/11/2010, 19h46
  4. Copier des lignes si une condition se realise
    Par abalboul dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/01/2008, 06h49
  5. Copier des lignes d'une table
    Par thomas_strass dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 01/07/2005, 15h42

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