1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| Sub test2()
Dim TheNextcell As Range, plageblanche As Range, i As Long, nextligne As Long
With Sheets(1)
'on récupère la plage de cellule vide par le .SpecialCells(xlCellTypeBlanks)
'meme si on choisi toute les cellules de la colonne A par le .Range("a1:a" & Rows.Count)
'la fonction s'arrete a la derniere cellule (rempli ,ou colorée , ou les deux) c'est la faille dont je parlais vous pouvez le constater dans le debug
' j'ai préféré utiliser l'argument xlCellTypeBlanks car xlCellTypeLastCell donne la derniere ligne ecrite
'tandis que xlCellTypeBlanks donne la derniere ligne ecrite et/ou colorée
Set plageblanche = .Range("a1:a" & Rows.Count).SpecialCells(xlCellTypeBlanks)
Set plageconst = .Range("a1:a" & Rows.Count).SpecialCells(xlCellTypeConstants)
Set plagetotal = Union(plageblanche, plageconst)
Debug.Print plagetotal.Address ' voir l'adresse des areas discontigues de la plage dispo dans le debug
'maintenant on récupère la derniere ligne de cette plage discontigues
nbligne = Split(plagetotal.Address, "$") 'on coupe les adresse dicontigues par les symboles "$"
nextligne = Fix(nbligne(UBound(nbligne))) + 1 'la derniere ligne= le dernier chiffre +1
Debug.Print nextligne ' voir le Numero de ligne dans le debug
'maintenant que l'on a la derniere ligne ecrite et/ou avec une couleur de la colonne A on la teste si elle est colorée on ira pas plus loin (pas la boucle qui suit)
Debug.Print Cells(nextligne, 1).Interior.Color
If .Cells(nextligne, 1).Interior.Color <> 16777215 Then
Set TheNextcell = .Cells(nextligne, 1)
Debug.Print "la derniere cellule colorée de la colonne A est " & Cells(nextligne, 1).Address
Else
'si la derniere cellule de la plage dispo n'est pas colorée alors
'on fait une toute petite boucle pour remonter jusque a la premiere cellule colorée precedent la nextligne
'dans n'imorte quelle cas la boucle s'arretera a la premiere couleur en partant d'en bas DE LA PLAGE DISPO!!!!!
For i = nextligne To 1 Step -1
Debug.Print i & " " & Cells(nextligne, 1).Interior.Color
If .Cells(i, 1).Interior.Color <> 16777215 Then Set TheNextcell = .Cells(i, 1): Exit For
Next i
End If
End With
MsgBox TheNextcell.Address
End Sub |
Partager