Plage nommée scindée et navigation dans une plage nommée
Bonjour à tous,
J'ai une question par rapport à mon fichier Test en pièce jointe. Ma plage nommée est scindée en deux, une plage de 11 lignes et une plage de 5 lignes, quand je fais un Lignes = [Plage].Rows.Count il me compte 5 lignes, soit le nombre de la première table cochée (Celle du bas). On ne peux pas travailler sur une plage scindée ? Il faut forcément passer par deux plages ?
Le but du fichier est de compter derrière le nombre de cellules non vides dans chaque colonne de la plage. Hors j'ai du mal à naviguer sur le tableau, habituellement je commence le tableau en A1 ce qui facilite le compte. Mais ici pas le choix.
Si je fais ce type de code:
For i = 1 To nbLignes
If Cells(i, j) = vbNullString Then ...Il va compter à partir de la ligne une, il faut que je bidouille en faisant For i = 10 To nbLignes + 10. Y-a-t'il une astuce pour naviguer dans une plage en réinitialisant les cordonnées de cette dernière ?
Merci à tous.
bonjour, il faut traiter les 2 sous-plages comme des "areas", attention, dans votre définition de "plage" de 2eme plage est la première.
Sub m_plage()
With Range("plage")
MsgBox .Address
For i = 1 To .Areas.Count
Set ar = .Areas(i) 'on traite les 2 séparémant
For j = 1 To ar.Rows.Count
MsgBox j & " " & ar.Cells(j, 1).Value & vbLf & ar.Cells(j, 1).Address & vbLf & ar.Address
Next
Next
End With
End SubRe
Super les aires, je ne connaissait pas mais c'est exactement la solution que je cherchais. J'ai implanté ton bout de code dans le miens et cette partie là fonctionne bien. Par contre j'ai encore du mal à situer mes recherches dans les aires, je pensais avoir bien fait mais il semble faire n'importe quoi (Enfin j'ai codé de façon à ce qu'il le fasse)
En gros, dans chaque aire je vérifie chaque ligne de la colonne B, et si elle n'est pas vide je fais un +1 sur un Integer. J'ai l'impression avec les MsgBox que mes données sont bonne et pourtant le compte tourne pas rond...
re, vous avez oublié le "Aire." en face, sans cela vous regardez sur la feuille et ne pas dans la plage, il faut penser relatif.
par exemple avec j=2 >>> cells(j,2) comme vous l'avez écrit, c'était la cellule B2 de la feuille
avec Aire = B10:D20 >>>> Aire.cells(j,2) sera C11
If Aire.Cells(j, 2).Value = "" Then 'Si colonne Non-conforme est videEn effet je l'ai vu il y a 2 minutes... Coder fatigué n'est pas une bonne solution... Un grand merci pour votre aide en tout cas
re, attention un "area" est toujours un rectangle. Donc si vous 2 sous-plages de votre "plage" sont plutôt irrégulier, excel le divisera en plusieurs "rectangles".
Donc jouer avec ceci ....Je pensais 6 aires, mais il dit 7 !!! Vous n'êtes pas toujours sûr comment il divise ses aires, donc dangeureux.
Sub Aires()
MsgBox Range("Plage").Areas.Count
End Sub
J'ai capté en allant sur internet en lire plus sur les aires mais merci pour le conseil. En tout cas c'est une fois de plus une belle découverte sur le forum