Debut & fin de plage pour une colonne

Noha-Diak Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, je sollicite votre aide, mon problème est le suivant : en VBA sur une feuille de calcul excel j'aimerais connaitre sur la colonne A la première cellule qui contient le nom "aaa" et la dernier cellule qui contient le nom "aaa" afin d'optimiser mon programme qui contient + de 7000 ligne, l'objectif est que lorsque le nom contenu dans la colonne A n'est plus identique on passe a suivant nom "bbb" qui correspond a la suivante plage, le fichier est trié de A à Z pour cette colonne.

la question est de savoir s'il exis
te une fonctionnalité permettant cela autre qu'une condition merci
A voir également:

4 réponses

ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   160
 
Bonjour Noha, bonjour le forum,

Double-clique sur n'importe quelle cellule de la colonne A, une message indique la première et la dernière ligne contenant la valeur double-cliquée. Code à placer dans le composant de l'onglet concerné :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim LD As Long 'déclare la variable LD (Ligne du Début)
Dim LF As Long 'déclare la variable LF (Ligne de Fin)

If Target.Column <> 1 Then Exit Sub 'si le boucle-clic a lieu ailleurs qu'en colonne A, sort de la procédure
If Target.Value = "" Then Exit Sub 'si le double-clic a lieur dans une celluel vide, sort de la procédure
Cancel = True 'annule le mode [édition] lié au double-clic
TV = Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs
    'si la donnée ligne I colonne 1 de TV est égale à la valeur de la cellule double-cliquée, définit la ligne de debut LD et sort de la boucle
    If TV(I, 1) = Target.Value Then LD = I: Exit For
Next I 'prochaine ligne de la boucle
For I = LD To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs (en partant de la ligne LD)
    If I = UBound(TV, 1) Then LF = I 'si I est la derniere ligne du tableau des valeur, définit la ligne  de fin LF
    'si la donnée ligne I colonne 1 de TV est différente de la valeur de la cellule double-cliquée, définit la ligne de fin LF (I-1) et sort de la boucle
    If TV(I, 1) <> Target.Value Then LF = I - 1: Exit For
Next I 'prochaine ligne de la boucle
MsgBox LD & " / " & LF 'message qui affiche la lgne de début et la ligne de fin
End Sub

0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Bonjour à tous les deux

Avec deux fonctions
Public Function premli(plage As Range, s As String) As Long
Dim obj As Object
premli = 0
Set obj = plage.Find(s, , , xlWhole, , xlNext)
If Not obj Is Nothing Then premli = obj.Row
End Function

Public Function dernli(plage As Range, s As String) As Long
Dim obj As Object
dernli = 0
Set obj = plage.Find(s, , , xlWhole, , xlPrevious)
If Not obj Is Nothing Then dernli = obj.Row
End Function

Cdlmnt
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Et si tu veux la liste des couples (première ligne, dernière ligne) pou un texte donné
https://www.cjoint.com/c/HJsoEe6jyfB

Cdlmnt
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Hello,
J'ai l'impression que ta fonction lpd ne marche pas correctement lorsque les données sont triées par ordre A->Z (comme indiqué dans la demande de l'utilisateur).
Il m'ajoute systématiquement une plage supplémentaire (la première ligne vide du tableau) pour les aaa et les bbb
et pour les ccc il retire 1 à la dernière ligne


0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Salut jordane45

C'était plus qu'une impression ;-)
https://www.cjoint.com/c/HJsqX6smyiB

Cdlmnt
0