OVH Cloud OVH Cloud

Trouver cellule dans plage

4 réponses
Avatar
bragal
Bonjour,

Je voudrais cr=E9er une macro qui, sur une plage de cellule=20
donn=E9e, trouve la premi=E8re cellule dont la bordure=20
inf=E9rieure soit de type =E9paisse. Puis enregistrer le=20
num=E9ro de la ligne de cette cellule dans une variable (c=20
par exemple) et aussi afficher ce num=E9ro dans la cellule=20
A1.

En fait je dispose d'un grand tableau (dont la longeur=20
peut varier) dont le pourtour est en bordure =E9paisse, et=20
je voudrais savoir =E0 quel num=E9ro de colonne se situe la=20
derni=E8re case de ce tableau. Cette derni=E8re case peut =EAtre=20
vide ou avoir n'importe quelle valeur, c'est pour =E7a que=20
seule la m=E9thode avec les types de bordure est possible.

Je sais qu'il existe la fonction =AB Range
("B14:B800").Borders(xlEdgeBottom).Weight =3D xlMedium =BB=20
mais je n'arrive pas =E0 faire qu'il recherche la bonne=20
cellule sur la plage donn=E9e et qu'il stocke le num=E9ro de=20
la ligne trouv=E9e dans une variable .

Merci d'avance

4 réponses

Avatar
Ellimac
Bonjour,

Dans une boucle initailiser une variable qui teste si la
bordure basse est épaisse. Si c'est le cas réupérer le n°
de la ligne.
For each c in range("a1:a5000")
a = c.Borders(xlEdgeBottom).Weight = xlThick
if a ="vrai" then
b=c.row
range("a1")=b
end if
next

Camille

-----Message d'origine-----

Bonjour,

Je voudrais créer une macro qui, sur une plage de cellule
donnée, trouve la première cellule dont la bordure
inférieure soit de type épaisse. Puis enregistrer le
numéro de la ligne de cette cellule dans une variable (c
par exemple) et aussi afficher ce numéro dans la cellule
A1.

En fait je dispose d'un grand tableau (dont la longeur
peut varier) dont le pourtour est en bordure épaisse, et
je voudrais savoir à quel numéro de colonne se situe la
dernière case de ce tableau. Cette dernière case peut
être

vide ou avoir n'importe quelle valeur, c'est pour ça que
seule la méthode avec les types de bordure est possible.

Je sais qu'il existe la fonction « Range
("B14:B800").Borders(xlEdgeBottom).Weight = xlMedium »
mais je n'arrive pas à faire qu'il recherche la bonne
cellule sur la plage donnée et qu'il stocke le numéro de
la ligne trouvée dans une variable .

Merci d'avance

.



Avatar
essaye cette sub:

Sub getendline()

Dim ligne, col As Long

ligne = 1

ligne = ActiveCell.Row
col = ActiveCell.Column

Do While ligne < 65534 And Cells(ligne, col).Borders
(xlEdgeBottom).Weight <> xlMedium
ligne = ligne + 1
Loop

[A1] = ligne

End Sub

précision: il faut que tu cliques sur une des cases de ton
tableau avant de lancer la macro.

J'avais essayer la fonction d'abord:

Function getlastline(ByVal cellule_du_tableau As Range) As
Long

Dim ligne, col As Long

ligne = 1


ligne = cellule_du_tableau.Row
col = cellule_du_tableau.Column

Do While ligne < 65534 And Cells(ligne, col).Borders
(xlEdgeBottom).Weight <> xlMedium
ligne = ligne + 1
Loop

getlastline = ligne

End Function

elle marche mais elle ne s'actualise pas quand on change
le tableau.Si quelqu'un sait pourquoi, ça m'intéresse.


-----Message d'origine-----

Bonjour,

Je voudrais créer une macro qui, sur une plage de cellule
donnée, trouve la première cellule dont la bordure
inférieure soit de type épaisse. Puis enregistrer le
numéro de la ligne de cette cellule dans une variable (c
par exemple) et aussi afficher ce numéro dans la cellule
A1.

En fait je dispose d'un grand tableau (dont la longeur
peut varier) dont le pourtour est en bordure épaisse, et
je voudrais savoir à quel numéro de colonne se situe la
dernière case de ce tableau. Cette dernière case peut
être

vide ou avoir n'importe quelle valeur, c'est pour ça que
seule la méthode avec les types de bordure est possible.

Je sais qu'il existe la fonction « Range
("B14:B800").Borders(xlEdgeBottom).Weight = xlMedium »
mais je n'arrive pas à faire qu'il recherche la bonne
cellule sur la plage donnée et qu'il stocke le numéro de
la ligne trouvée dans une variable .

Merci d'avance

.



Avatar
Chris MICHEL
Si cette solution apparait en double, désolé mais j'avais
oublié de donner mon nom la première et je n'étais pas sûr
que le message passe.

Essaie cette sub:

Sub getendline()

Dim ligne, col As Long

ligne = 1

ligne = ActiveCell.Row
col = ActiveCell.Column

Do While ligne < 65534 And Cells(ligne, col).Borders
(xlEdgeBottom).Weight <> xlMedium
ligne = ligne + 1
Loop

[A1] = ligne

End Sub

Précision: il faut cliquer sur une des cases du tableau
avant de lancer la macro.

J'avais d'abord essayé sous forme de fonction:

Function getlastline(ByVal cellule_du_tableau As Range) As
Long

Dim ligne, col As Long

ligne = 1


ligne = cellule_du_tableau.Row
col = cellule_du_tableau.Column

Do While ligne < 65534 And Cells(ligne, col).Borders
(xlEdgeBottom).Weight <> xlMedium
ligne = ligne + 1
Loop

getlastline = ligne

End Function

La fonction marche mais elle ne s'actualise pas quand on
change le tableau. Si qelqu'un sait pourquoi, ça
m'intéresse.
-----Message d'origine-----

Bonjour,

Je voudrais créer une macro qui, sur une plage de cellule
donnée, trouve la première cellule dont la bordure
inférieure soit de type épaisse. Puis enregistrer le
numéro de la ligne de cette cellule dans une variable (c
par exemple) et aussi afficher ce numéro dans la cellule
A1.

En fait je dispose d'un grand tableau (dont la longeur
peut varier) dont le pourtour est en bordure épaisse, et
je voudrais savoir à quel numéro de colonne se situe la
dernière case de ce tableau. Cette dernière case peut
être

vide ou avoir n'importe quelle valeur, c'est pour ça que
seule la méthode avec les types de bordure est possible.

Je sais qu'il existe la fonction « Range
("B14:B800").Borders(xlEdgeBottom).Weight = xlMedium »
mais je n'arrive pas à faire qu'il recherche la bonne
cellule sur la plage donnée et qu'il stocke le numéro de
la ligne trouvée dans une variable .

Merci d'avance

.



Avatar
Ellimac
Re,

Autre solution plus rapide :

Sub Toto()
Selection.SpecialCells(xlCellTypeLastCell).Select
der = Selection.Row
For cpt = der To 1 Step -1
a = ActiveCell.Borders(xlEdgeBottom).Weight = xlThick
If a = True Then
b = ActiveCell.Row
Range("a1") = b
Exit Sub
End If
ActiveCell.Offset(-1).Select
Next
End Sub

Camille
-----Message d'origine-----

Bonjour,

Je voudrais créer une macro qui, sur une plage de cellule
donnée, trouve la première cellule dont la bordure
inférieure soit de type épaisse. Puis enregistrer le
numéro de la ligne de cette cellule dans une variable (c
par exemple) et aussi afficher ce numéro dans la cellule
A1.

En fait je dispose d'un grand tableau (dont la longeur
peut varier) dont le pourtour est en bordure épaisse, et
je voudrais savoir à quel numéro de colonne se situe la
dernière case de ce tableau. Cette dernière case peut
être

vide ou avoir n'importe quelle valeur, c'est pour ça que
seule la méthode avec les types de bordure est possible.

Je sais qu'il existe la fonction « Range
("B14:B800").Borders(xlEdgeBottom).Weight = xlMedium »
mais je n'arrive pas à faire qu'il recherche la bonne
cellule sur la plage donnée et qu'il stocke le numéro de
la ligne trouvée dans une variable .

Merci d'avance

.