Bonjour,
Je suis confrontée à un problème lors de l'extraction de lignes à partir d'un fichier Excel.
J'ai un fichier Excel composé de 4 colonnes intitulées xp, yp, xe, ye. Les données sont en mm, les x correspondent aux abscisses et les y aux ordonnées correspondantes. xp et yp ont N lignes et xe et ye ont M lignes.
Les valeurs initiales des x sont incrémentées de 0.01mm à chaque ligne.
Mon objectif est de récupérer les lignes tous les 0.1mm soit une valeur sur 10 à partir de la première.
Ma macro est la suivante :
Sub selection()
Dim i_ini As Integer
Dim j_ini As Integer
Dim m As Integer
Dim n As Integer
Dim i_calc As Integer
Dim j_calc As Integer
Dim pas_p As Double
Dim xp_ini As Double
Dim yp_ini As Double
Dim xe_ini As Double
Dim ye_ini As Double
Dim Val_ini As Worksheet
Dim Val_calc As Worksheet
Set Val_ini = Worksheets("Valeurs initiales" )
Set Val_calc = Worksheets("Valeurs pour calcul" )
'Données
i_calc = 2
j_calc = 2
pas_p = 0.1 'mm
xp_ini = 6.8 'mm
yp_ini = 2.0000659 'mm
pas_e = 0.1 'mm
xe_ini = 26.81 'mm
ye_ini = 20.542061 'mm
For i_ini = 2 To 6505 'numéro de la ligne
For m = 0 To 650 'incrément
xp_m = xp_ini + m * pas_p
If Val_ini.Cells(i_ini, 1).Value = xp_m Then
Val_ini.Cells(i_ini, 1).Copy Val_calc.Cells(i_calc, 1) 'récupération des xp
Val_ini.Cells(i_ini, 2).Copy Val_calc.Cells(i_calc, 2) 'récupération des yp
i_calc = i_calc + 1
End If
Next
Next
For j_ini = 2 To 4418
For n = 0 To 441 'incrément
If Val_ini.Cells(j_ini, 3).Value = (xe_ini + n * pas_e) Then
Val_ini.Cells(j_ini, 3).Copy Val_calc.Cells(j_calc, 3) 'récupération des xe
Val_ini.Cells(j_ini, 4).Copy Val_calc.Cells(j_calc, 4) 'récupération des ye
j_calc = j_calc + 1
End If
Next
Next
End Sub
Le code me ressort des données cohérentes cependant ils y a des "sauts" dans les données extraites, des lignes manquantes. Par exemple, les lignes extraites sont :
xp
8
8.1
8.2
8.3
8.5
8.6
8.8
9
Il manque les lignes 8.4, 8.7, 8.9.
(j'ai le même problème avec les xe)
et ceci se produit de manière irrégulière, je ne comprends pas pourquoi.
Auriez-vous une idée de l'origine du problème?
Merci