Problème macro extraction colonnes

Bonjour,

J'ai un fichier excel pour lequel je ne veux extraire que les lignes B,C,D,J,K et L.

Voici la macro que j'ai déjà crée :

Sub extract()
Application.ScreenUpdating = False
' ws1= reference à la feuille des clients
Set ws1 = Worksheets("Feuil1")
' i pointeur de ligne dans la feuille clients
i = 2
' nplc client en cours de traitement
nplc = ""
' on parcourt la feuille des clients
While ws1.Cells(i, "B") <> 0

 ' si le numéro de client sur la ligne i est différent du client en cours
If ws1.Cells(i, "B") <> nplc Then
    ' si client en cours est non blanc
   If nplc <> "" Then
      ' on ajoute des formule et M2 et N2 sur l'extrait client
     ws2.Range("M2").FormulaR1C1 = "=SUM(C[-2])"
      ws2.Range("N2").FormulaR1C1 = "=SUM(C[-2])"
      ' on sauve le classeur de ce client
     wb.SaveAs ws2.Name & ".xlsx"
      wb.Close
    End If
    ' on crée un nouveau classeur extrait client
   ' wb classeur extrait client
   Set wb = Workbooks.Add
    ' ws2 feuille extrait client
   Set ws2 = wb.Worksheets(1)
    ' nplc = client en cours
   nplc = ws1.Cells(i, "B")
    Application.StatusBar = "client " & nplc & " en cours de création"
    ws2.Name = "client " & nplc
    ' on y copie la ligne titre
   ws1.Range("A1:L1").Copy ws2.Range("A1")
    ' j pointeur de ligne dans le classeur extrait client
   j = 1

  End If
  ' si on n'a pas (A<2 ET B<4) sur cette ligne
 If Not (ws1.Range("K" & i) < 2 And ws1.Range("L" & i) < 4) Then
    ' incrémente pointeur de ligne
   j = j + 1
    'on copie la ligne
   ws1.Rows(i).Copy ws2.Range("B:D,J:L")
End If
' on passe à la ligne client suivante
i = i + 1
Wend
' on ferme le dernier classeur
wb.SaveAs ws2.Name & ".xlsx"
wb.Close
Application.ScreenUpdating = True
Set ws1 = Nothing
Set ws2 = Nothing
Application.StatusBar = "traitement terminé"
End Sub

Je n'arrive pas à comprendre ce qu'il y a de faux...

On me donne l'erreur à la ligne :

ws1.Rows(i).Copy ws2.Range("B:D,J:L")

Bonjour,

En attendant une meilleure solution, remplace la ligne suivante :

ws1.Rows(i).Copy ws2.Range("B:D,J:L")

par ces deux lignes et teste :

ws1.Range("B" & i & ":D" & i).Copy ws2.Range("B" & i)
ws1.Range("J" & i & ":L" & i).Copy ws2.Range("J" & i)

Pour le plantage, c'est normal tu essayes de copier une ligne entière (alors qu'il faut copier deux blocs de 3 cellules dans cette ligne, (mais le plantage ne se fait pas ici) et coller dans une plage de 6 colonnes non contigues(c'est ici que ça se plante). Car pour coller un bloc ou plusieurs blocs de cellules, il faut indiquer la premiière cellule de destination.

Remarque : Tu n'est pas obligé de copier ta macro dans le corps du message. Ton fichier avec macro nous serait plus utile pour le test.

Merci beaucoup ça fonctionne !


Merci beaucoup ça fonctionne !

Rechercher des sujets similaires à "probleme macro extraction colonnes"