Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Test de ligne vide ou de hauteur de sélection

15 réponses
Avatar
Franck Deschamps
Bonjour,

j'ai une macro qui me sélectionne automatiquement mes cases remplies via:
Selection.SpecialCells(xlCellTypeConstants, 23).Select

Mais je voudrais auparavant vérifier si j'ai des données sur ma ligne 1 de
ma feuille pour ce faire j'ai 2 solutions:
1- Code pour tester si ma première ligne est vide ?
2- suite à ma commande de sélection, m'indiquer combien de ligne (ma heuteur
de sélection) je viens de sélectionner.

Est ce que qqu'un aurait une idée de code pour la solution 1 et/ou 2?

Merci

Franc le débutant :-)

5 réponses

1 2
Avatar
Modeste
Bonsour® anonymousA avec ferveur ;o))) vous nous disiez :
pas si simple si les cellules de la selection ne sont pas contigues, tu ne
crois pas ?


;o))) pas si simple en effet ....
voici un code adapté d'une astuce de J.Walk
http://groups.google.fr/group/microsoft.public.excel.programming/msg/d2b284503bab5488?dmode=source&hl=fr

Sub AboutRangeSelection()
Set LaSelectionInitiale = Selection.SpecialCells(xlCellTypeConstants,
23)

' ----- selectionne les lignes concernées (geedee)
LaSelectionInitiale.EntireRow.Select
Dim NumCols As Integer
Dim NumRows As Long
Dim NumBlocks As Integer
Dim NumCells As Long
Dim NumAreas As Integer
Dim SelType As String
Dim FirstAreaType As String
Dim CurrentType As String
Dim WhatSelected As String
Dim UnionRange As Range
Dim Area As Range
Dim Msg As String

' Initialize counters
NumCols = 0
NumRows = 0
NumBlocks = 0
NumCells = 0

' Determine number of areas in selection
NumAreas = Selection.Areas.Count
If NumAreas = 1 Then
SelType = "Single Selection"
Else
SelType = "Multiple Selection"
End If

' Build the union of all areas to avoid double-counting
Set UnionRange = Selection.Areas(1)
For Each Area In Selection.Areas
Set UnionRange = Union(UnionRange, Area)
Next Area

' Loop through each area in the Union range
For Each Area In UnionRange.Areas
NumRows = NumRows + Area.Rows.Count
Next Area

'----- restitue la selection initiale (geedee)
LaSelectionInitiale.Select
Msg = Msg & "Nbr de zone(s) :" & vbTab & NumAreas & vbCrLf
Msg = Msg & "Ligne(s) concernées : " & vbTab & NumRows & vbCrLf
MsgBox Msg, vbInformation, SelType
End Sub


Private Function AreaType(RangeArea As Range) As String
' Returns the type of a range in an area
Select Case True
Case RangeArea.Cells.Count = 1
AreaType = "Cell"
Case RangeArea.Count = Cells.Count
AreaType = "Worksheet"
Case RangeArea.Rows.Count = Cells.Rows.Count
AreaType = "Column"
Case RangeArea.Columns.Count = Cells.Columns.Count
AreaType = "Row"
Case Else
AreaType = "Block"
End Select
End Function


--
;o)))
@+

Les news à la source !!!
news://news.microsoft.com/microsoft.public.fr.excel
et répondez OUI

n'oubliez pas les FAQ :http://www.excelabo.net
http://dj.joss.free.fr/faq.htm
http://www.faqoe.com http://faqword.free.fr

Avatar
anonymousA
Revenant sur ce code, je m'apercois qu'il faut remplacer
Else
ReDim Preserve tabl(1 To compteur + 1)
tabl(compteur) = c.Row
End If

par

Else
compteur = compteur + 1
ReDim Preserve tabl(1 To compteur)
tabl(compteur) = c.Row
End If

J'avais voulu faire une simplification trop rapide.

A+
Avatar
Franck DESCHAMPS
bonjour je vous confirme mes cellulles sont contigues, j'essaie ca ce WE
merci.

Franck
Avatar
Franck DESCHAMPS
Merci bonne idée aussi je prends
Avatar
Franck DESCHAMPS
Bonsoir à tous et un grand merci pour votre aide, j'ai de quoi essayer tout
cela ce WE !

en tut cas je vois que bcp de monde s'y sont intéressés !

Merci et bon we à tous

franck le débutant (un peu moins)
1 2