inserer des lignes sous condition + NaN dans un fichier comportant 537549 lignes

KrokroExcel

XLDnaute Nouveau
Bonjour a tous,

J'ai un fichier avec 5 colonnes : (REFF_ID ORIG_FID Y_coord X_coord code) et 537549 lignes!
"code" a des valeurs egales a 0 ou 1 (voir fichier joint qui correspond aux 856 premieres lignes de mon fichier).

Ce que je souhaiterai c'est inserer une ligne lorsque code = 1 (i.e. inserer une ligne au dessus du 1). Si possible, je voudrais ensuite remplir les nouvelle ligne vides/inserees avec des NaN.

J'ai fouille sur le forum et essaye d'adapte des programmes en VBA pour deja inserer les lignes mais je suis debutante et cela ne marche pas!

Voila mon code:

Code:
Sub insert_ligne()
Dim i As Integer
Application.ScreenUpdating = False
For i = 1 To 537549
    If (Cells(i, 7) = 1) Then
    Cells(i, 1).Select
    EntireRow.Insert
    i = i + 1
    End If
Next
Application.ScreenUpdating = True
End Sub

Est ce que quelqu'un a une idee?
Merci d'avance!
 

Pièces jointes

  • essaiInsert.xlsx
    66.7 KB · Affichages: 49

VDAVID

XLDnaute Impliqué
Re : inserer des lignes sous condition + NaN dans un fichier comportant 537549 lignes

Bonjour KrokroExcel,

Peut-être avec ce code dans le module de ta feuille :

Code:
Sub Supprlign()
Application.ScreenUpdating = False

Dim i As Long
For i = 1 To Range("E65536").End(xlUp).Row

    If Range("E" & i).Value = 1 Then
    Rows(i + 1).Insert Shift:=xlDown
    Range("A" & i + 1 & ":E" & i + 1).Value = "NaN"
    End If

Next i

Application.ScreenUpdating = True
End Sub

Par contre je n'ai pas compris le "NaN", c'est une référence relative où c'est juste une valeur brute à rentrer dans la ligne ajoutée?

Bonne journée !
 

pierrejean

XLDnaute Barbatruc
Re : inserer des lignes sous condition + NaN dans un fichier comportant 537549 lignes

Bonjour Krokro

A tester:

Code:
Sub test()
Dim i As Integer
Application.ScreenUpdating = False
For i = 1 To 537549
    If Cells(i, 5) = 1 Then
    Rows(i).EntireRow.Insert
    Range("E" & i) = "NaN"
    i = i + 1
    End If
Next
Application.ScreenUpdating = True
End Sub

Edit: Salut VDAVID
 

KrokroExcel

XLDnaute Nouveau
Re : inserer des lignes sous condition + NaN dans un fichier comportant 537549 lignes

Bonjour VDAVID et Pierre-Jean et merci beaucoup pour votre aide.

En mixant vos 2 programmes j'obtient ce que je souhaite - i.e l'insertion de la ligne au dessus du "1" + le remplissage des nouvelles lignes avec des NaN:

Code:
Sub test()
Dim i As Integer
Application.ScreenUpdating = False
For i = 1 To 1000
    If Cells(i, 5) = 1 Then
    Rows(i).EntireRow.Insert
    Range("A" & i & ":E" & i).Value = "NaN"
    i = i + 1
    End If
Next
Application.ScreenUpdating = True
End Sub

J'ai cependant teste sur un petit echantillonage de mon fichier (1000 lignes) ... reste a voir si mon ordi tient le coup en lancant le programme sur les 537549 lignes! Je vais tester ca maintenant et vous tient au courant!

Merci beaucoup et bonne journee
 

VDAVID

XLDnaute Impliqué
Re : inserer des lignes sous condition + NaN dans un fichier comportant 537549 lignes

Bonjour Pierrejean, Re KrokroExcel

Je pense que la macro va planter si i est définit comme un Integer, la limite de cette variable étant de 32767, sachant que tu as 537 549 lignes.

Il faudrait mettre Long comme type de variable:

Code:
Dim i As Long
A la place de
Code:
Dim i As Integer

Bonne journée
 

KrokroExcel

XLDnaute Nouveau
Re : inserer des lignes sous condition + NaN dans un fichier comportant 537549 lignes

Rebonjour.

Donc effectivement il faut mettre Dim i as Long sinon vba bug.

Avec Dim i as Long le programme demarre mais en essayant de faire les 537 549 lignes d'un coup, cette fois ci c'est mon ordi qui a plante! Donc j'ai lance le programme 100000 lignes par 100000 lignes et j'obtient exactement ce que je voulais!

Merci beaucoup a tous les 2 vous venez de me sauvez une longue journee a faire des insertion de lignes et des copier-coller!
Cordialement
Krokro
 

Discussions similaires

Réponses
2
Affichages
156

Statistiques des forums

Discussions
312 348
Messages
2 087 510
Membres
103 572
dernier inscrit
hamzahaha