Supprimer un bloc avec VBA - VB/VBA/VBS - Programmation
MarshPosté le 26-08-2010 à 14:52:51
Bonjour à Tous,
Je galère en ce moment avec VBA ( débutante )
Je vous explique mon problème :
j'ai une feuille excel avec 4400 lignes et 44 colonnes divisé par bloc (100 blocs), chaque bloc à 43 lignes et 44 colonnes, les blocs sont séparés par des lignes de 0. Ce que je vais faire c'est un programme qui calcule la distance euclidienne pour chaque ligne, ensuite supprimer le bloc qui contient la ligne qui la plus petite distance.
Voilà mon programme :
For b = 1 To 100 iStartRow(b) = (b - 1) * 44 + 1 'définir les blocs iEndRow(b) = (b - 1) * 44 + 44
For i = iStartRow(b) To iEndRow(b) l = 0 'calculer la distance For j = 1 To 44 l = l + Cells(i, j) * Cells(i,j) Next j
d(i) = Sqr(l)
a = d(1)
If d(i) < a Then a = d(i) 'trouver la distance minimale End If
Next i
Next b
mbs=100
For b = 1 To mbs For i = iStartRow(b) To iEndRow(b) For j = 1 To 44 If d(i) = a Then Range(Cells(iStartRow(b), 1), Cells(iEndRow(b), 43)).Select 'supprimer le bloc ( c'est ce qui ne marche pas en fait, il supprime tous les blocs) Selection.Delete Shift:=xlToLeft
Marsh Posté le 26-08-2010 à 14:52:51
Bonjour à Tous,
Je galère en ce moment avec VBA ( débutante )
Je vous explique mon problème :
j'ai une feuille excel avec 4400 lignes et 44 colonnes divisé par bloc (100 blocs), chaque bloc à 43 lignes et 44 colonnes, les blocs sont séparés par des lignes de 0.
Ce que je vais faire c'est un programme qui calcule la distance euclidienne pour chaque ligne, ensuite supprimer le bloc qui contient la ligne qui la plus petite distance.
Voilà mon programme :
For b = 1 To 100
iStartRow(b) = (b - 1) * 44 + 1 'définir les blocs
iEndRow(b) = (b - 1) * 44 + 44
For i = iStartRow(b) To iEndRow(b)
l = 0 'calculer la distance
For j = 1 To 44
l = l + Cells(i, j) * Cells(i,j)
Next j
d(i) = Sqr(l)
a = d(1)
If d(i) < a Then
a = d(i) 'trouver la distance minimale
End If
Next i
Next b
mbs=100
For b = 1 To mbs
For i = iStartRow(b) To iEndRow(b)
For j = 1 To 44
If d(i) = a Then
Range(Cells(iStartRow(b), 1), Cells(iEndRow(b), 43)).Select 'supprimer le bloc ( c'est ce qui ne marche pas en fait, il supprime tous les blocs)
Selection.Delete Shift:=xlToLeft
End If
Next j
Next i
mbs = mbs - 1
Next b
Merci pour votre aise