Debut & fin de plage pour une colonne

Fermé
Noha-Diak Messages postés 20 Date d'inscription samedi 8 septembre 2018 Statut Membre Dernière intervention 26 février 2019 - 18 oct. 2018 à 06:59
ccm81 Messages postés 10856 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 10 mai 2024 - 18 oct. 2018 à 18:51
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

4 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
18 oct. 2018 à 09:18
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 10856 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 10 mai 2024 2 404
18 oct. 2018 à 14:58
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 10856 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 10 mai 2024 2 404
18 oct. 2018 à 16:31
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 38173 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 10 mai 2024 4 665
18 oct. 2018 à 17:07
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 10856 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 10 mai 2024 2 404
18 oct. 2018 à 18:51
Salut jordane45

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

Cdlmnt
0