Autres déterminer le rows.count pas si facile que ça

patricktoulon

XLDnaute Barbatruc
bonjour à tous
je n'arrive pas à déterminer le rows.count d'une plage non contiguë afin de déterminer une variable
quand j'utilise une methode j'ai une sur deux et quand j'utilise la variable range j'ai aussi une sur deux mais pas le bon resultat
VB:
Sub testX()
    Dim examen$, rng As Range
    Set rng = [A1,E1,J1]
    'With Range(rng.Cells(1), rng.Cells(rng.Cells.Count))
   ' With Range(rng.Cells(1), rng.SpecialCells(xlLastCell))
     With rng
        If .Rows.Count = 1 Then examen = "par le top"
        If .Rows.Count > 1 Then examen = "par le coté":
        MsgBox .Address(0, 0) & "--->" & examen
    End With
End Sub
Sub testy()
    Dim examen$, rng As Range
    Set rng = [H6,H12,H18]
    'With Range(rng.Cells(1), rng.Cells(rng.Cells.Count))
    ' With Range(rng.Cells(1), rng.SpecialCells(xlLastCell))
    With rng
      If .Rows.Count = 1 Then examen = "par le top"
        If .Rows.Count > 1 Then examen = "par le coté":
        MsgBox .Address(0, 0) & "--->" & examen
    End With
End Sub
 
Dernière édition:
Solution
Bonjour patricktoulon, Efgé,

Compter les cellules d'une colonne :
VB:
Sub CompteLignes()
Dim plage As Range, n&
Set plage = [A1:C1,D3:F3,G5:J5,7:7] 'pour tester
n = Intersect(plage.EntireRow, [A:A]).Count
MsgBox "Nombre de lignes : " & n
End Sub
A+

patricktoulon

XLDnaute Barbatruc
re
bon ben je crois que j'ai trouvé finalement
VB:
Sub testX()
    Dim examen$, rng As Range
    Set rng = [A1,E1,J1]
       With Range(rng.Areas(1).Cells(1), rng.Areas(rng.Areas.Count).Cells(rng.Areas(rng.Areas.Count).Cells.Count))
            If .Rows.Count = 1 Then examen = "par le top"
        If .Rows.Count > 1 Then examen = "par le coté":
        MsgBox .Address(0, 0) & "--->" & examen
    End With
End Sub
Sub testy()
    Dim examen$, rng As Range
    Set rng = [H6,H12,H18]
       With Range(rng.Areas(1).Cells(1), rng.Areas(rng.Areas.Count).Cells(rng.Areas(rng.Areas.Count).Cells.Count))
       If .Rows.Count = 1 Then examen = "par le top"
        If .Rows.Count > 1 Then examen = "par le coté":
        MsgBox .Address(0, 0) & "--->" & examen
    End With
End Sub

Sub testz()
    Dim examen$, rng As Range
    Set rng = [a6:A10]
        With Range(rng.Areas(1).Cells(1), rng.Areas(rng.Areas.Count).Cells(rng.Areas(rng.Areas.Count).Cells.Count))
     If .Rows.Count = 1 Then examen = "par le top"
        If .Rows.Count > 1 Then examen = "par le coté":
        MsgBox .Address(0, 0) & "--->" & examen
    End With
End Sub
 

Efgé

XLDnaute Barbatruc
Bonjour @patricktoulon
Pas sûr que ce soit dans la ligne de tes recherches, mais nous avions avec @Pierrot93 fait un petit truc la dessus.
VB:
Dim x As Range, y As Range
Set x = Cells.Find("*", Cells(Rows.Count, Columns.Count), xlValues, , 1, 2, 0)
Set y = Cells.Find("*", Cells(Rows.Count, Columns.Count), xlValues, , 2, 2, 0)
If Not x Is Nothing Then MsgBox Cells(x.Row, y.Column).Address

Cordialement
 

patricktoulon

XLDnaute Barbatruc
bonjour @Efgé
ah c'est pas mal mais il me faut dans tout les sens et il me faut quand même bien déterminer la cells(1) et la dernière
c'est pour faire un placement intelligent de l'userform en fonction de la cellule que je rightclick
afin que la plage injectée contigue ou pas n'ai pas une seule cellule caché par le userform
cette nouvelle fonction va être injecté dans la futur version du calendar pour le mode multicell
voir dans cette discussion le fichier en exemple
 

Efgé

XLDnaute Barbatruc
Re, Bonjour @job75
Pour la première cellule, sans connaitre les plages utilisées, on pourrais voir quelque chose comme ça (A affiner) :
VB:
Sub premiere()
Dim x As Range, y As Range
Set x = Cells.Find("*", Cells(1, 1), xlValues, , 1, 1, 0)
Set y = Cells.Find("*", Cells(1, 1), xlValues, , 1, 1, 0)
If Cells(1, 1) = "" Then
    If Not x Is Nothing Then MsgBox Cells(x.Row, y.Column).Address
    Else
    MsgBox "$A$1"
End If
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
@job75
a h!...déjà ça ressemble beaucoup plus a ce que je souhaite mais en plus propre
c'est vrai finalement tester
le intersect de la plage a la colonne entiere de la cells(1) de la plage
et
le intersect de la plage a la ligne entière de la cells(1) de la plage
fait la même chose en plus clair
j'approuve je change ça des que je rentre je suis obligé de partir en inter là
surtout que là je peux même faire le multi rows et multi columns

je me suis vraiment pas bien levé ce matin ,c’était si simple
y a des jours comme ça 😂🤣
 

patricktoulon

XLDnaute Barbatruc
@Efgé l'adresse de la plage est connue et le sera toujours c'est le but de la manœuvre

testez le userform pour comprendre ce que je veux faire
 

Discussions similaires

Réponses
7
Affichages
292

Statistiques des forums

Discussions
311 720
Messages
2 081 926
Membres
101 841
dernier inscrit
ferid87