Erreur 1004

Bonjour à tous,
Je sais que le sujet à déjà été traité dans plusieurs forum mais je n'arrive pas a trouvé la bonne solution
J'ai rédigé une fonction VBA pour échanger 2 lignes sous une condition, pourtant le programme fonctionne pas tres bien suite à l'erreur 1004:"Erreur définie par l'application ou par l'objet"

Je vous montre mon programme ci-dessous:

[/contents/446-fichier-sub Sub] SwapRows(lRow1 As Long, lRow2 As Long)
Dim aTemp() As Variant
        aTemp() = ActiveSheet.Rows(lRow1).Value
        ActiveSheet.Rows(lRow1).Value = ActiveSheet.Rows(lRow2).Value
        ActiveSheet.Rows(lRow2).Value = aTemp
End Sub

Sub classeom()
Dim i As Long
Dim counter As Long
counter = 3
col = ActiveSheet.UsedRange.Columns.Count
Row = ActiveSheet.UsedRange.Rows.Count
For i = 3 To Row
    If Cells(i, 3) <> "<empty>" And Cells(i, 3) <> "" Then
        Call SwapRows(i, counter)
        counter = counter + 1
    End If
Next i
End Sub


Le programme est buggé à la ligne "Activesheet.rows(lRow2).value=aTemp", il est clairement que la ligne lRow1 est bien copié des valeurs dans lRow2 mais ça se passe pas pour le lRow2
En espérant de vos aides
Bonne journée

3 réponses

  1. Contributeur
    Bonjour

    dans ta déclaration de "atemp" enlève "() as variant"

    SwapRows(lRow1 As Long, lRow2 As Long)
    Dim aTemp
    aTemp = ActiveSheet.Rows(lRow1).Value


    Ton tableau comporte plus 65236 lignes ?

     Michel
    2
    1. Salut Michel,
      merci pour ta réponse et la rapidité
      tu peux m'expliquer l'intérêt d'ajouter le variable Col as integer? car mon objectif est de échanger entièrement 2 lignes en fait :(
      j'ai modifié la déclaration de "atemp" mais il tombe tjs sur le même l'erreur.
      si il y a qqchose n'est pas très claire dans ma question, pardonne-moi pour le français, je suis en train de pratiquer :)
      0
    2. Contributeur
      oui, je viens d'enlever Col dans post1
      mais tu travailles sur 16384 données ?
      0
    3. Oui, le nombre de données est tellement grand, environ 300,000
      0
    4. Contributeur
      OK :o)

      voici une photo de ma maquette essayée avec succès
      Option Explicit
      '----------------------------------------------------------------
      Sub SwapRows(lRow1 As Long, lRow2 As Long)
      Dim aTemp
      
      Application.screenupdating=False 'confort des yeux, rapidité
      With ActiveSheet
          aTemp = .Rows(lRow1).Value
          .Rows(lRow1).Value = .Rows(lRow2).Value
          .Rows(lRow2).Value = aTemp
      End With
      End Sub
      
      
      Sub ccmm()
          Call SwapRows(3, 8)
      End Sub


      Pourquoi avoir mis Col dans ta macro classom ?
      0
    5. Michel,
      merci bien pour ta correction!
      Malheureusement, même si j'ai essayé de réduire le nombre de données, à partir d'un moment, l'erreur 1004 revient tjs, je te montre par les images ci dessous
      (j'avais mis le variable "col" pour traiter une partie de donnés avant, comme dans ce cas j'en ai plus besoin, je l'enleverai)
      0
  2. Bonsoir Michel,

    Malgré ce qu'on a discute', jai finalement trouve' une solution, jai décidé de supprimer une partie de données et l'erreur revient plus, je comprends pas très bien mais clairement il y a un lien avec le nombre de données comme tu m'avais indiqué. merci beaucoup pour ton aide et bonne soirée :)
    1
    1. Contributeur
      JE T'AI DEMANDE LA FEUILLE DU CLASSEUR FORMAT EXCEL ET NON UNE PHOTO QUI ME SERT A RIEN, PHOTO EN PLUS SANS LES LETTRES DES COLONNES...
      0
      1. Michel,
        ce n'est pas un photo, c'est un fichier Excel, tu peux meme le télécharger...
        0