Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Selectionner une plage de cellule

10 réponses
Avatar
elli6258
Bonjour à tous,
je cherche une macro en vba excel qui me permet , dans une colonne de
trouver une cellule contenant un mot commençant par RSG, (exemple: A5) de
mémoriser cette ligne puis la prochaine cellule commençant également par
RSG( exemple A11) pour ensuite trier la plage de cellule entre ces 2
cellules ( A6:A10), recommencer la recherche depuis (A11) et ainsi de suite
jusqu' a la fin du tableau.
En fait je veux trier en ordre croissant toutes les cellules qui se trouvent
entres 2 cellules contenant le mot RSG.
Merci de votre contribution
Michel

10 réponses

Avatar
Jacky
Bonjour,

Ceci peut-être
'-------------------
Sub JJ()
col = 1 ' pour la colonne A (a définir)
Dim x As String, y As String, compte As Integer
For Each c In Range("a11:a" & [a36536].End(3).Row)
If UCase(Left(c, 3)) = "RSG" Then
compte = compte + 1
If compte = 2 Then
y = c.Row - 1
Range(Cells(x, col), Cells(y, col)).Sort Key1:=Columns("A"),
Order1:=xlAscending
compte = 0: x = "": y = ""
End If
x = c.Row + 1
End If
Next
End Sub
'------------------

--
Salutations
JJ


"elli6258" a écrit dans le message de news:

Bonjour à tous,
je cherche une macro en vba excel qui me permet , dans une colonne de
trouver une cellule contenant un mot commençant par RSG, (exemple: A5) de
mémoriser cette ligne puis la prochaine cellule commençant également par
RSG( exemple A11) pour ensuite trier la plage de cellule entre ces 2
cellules ( A6:A10), recommencer la recherche depuis (A11) et ainsi de
suite jusqu' a la fin du tableau.
En fait je veux trier en ordre croissant toutes les cellules qui se
trouvent entres 2 cellules contenant le mot RSG.
Merci de votre contribution
Michel



Avatar
Jacky
Re..
Il y a 2 chiffres qui ont sautés dans le code à mon insu. ;o)))

Il faudra certainement remplacer cette ligne
For Each c In Range("a11:a" & [a36536].End(3).Row)
par
For Each c In Range("a1:a" & [a65536].End(3).Row)

--
Salutations
JJ


"Jacky" a écrit dans le message de news:

Bonjour,

Ceci peut-être
'-------------------
Sub JJ()
col = 1 ' pour la colonne A (a définir)
Dim x As String, y As String, compte As Integer
For Each c In Range("a11:a" & [a36536].End(3).Row)
If UCase(Left(c, 3)) = "RSG" Then
compte = compte + 1
If compte = 2 Then
y = c.Row - 1
Range(Cells(x, col), Cells(y, col)).Sort Key1:=Columns("A"),
Order1:=xlAscending
compte = 0: x = "": y = ""
End If
x = c.Row + 1
End If
Next
End Sub
'------------------

--
Salutations
JJ


"elli6258" a écrit dans le message de news:

Bonjour à tous,
je cherche une macro en vba excel qui me permet , dans une colonne de
trouver une cellule contenant un mot commençant par RSG, (exemple: A5) de
mémoriser cette ligne puis la prochaine cellule commençant également par
RSG( exemple A11) pour ensuite trier la plage de cellule entre ces 2
cellules ( A6:A10), recommencer la recherche depuis (A11) et ainsi de
suite jusqu' a la fin du tableau.
En fait je veux trier en ordre croissant toutes les cellules qui se
trouvent entres 2 cellules contenant le mot RSG.
Merci de votre contribution
Michel







Avatar
Hervé
Bonjour à toutes et tous,
Une autre méthode, à adapter.

Sub Trier()
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range
Dim TblAdresse() As String
Dim Adresse As String
Dim I As Integer

Set Fe = ActiveSheet
With Fe
'défini la plage de recherche
Set Plage = .Range(.[A1], .[A65536].End(xlUp))
'effectue la recherche dans la plage
Set Cel = Plage.Find("RSG*", , xlValues)
'si trouvé, mémorise l'adresse de la 1ère
'cellule afin de ne pas tourner en boucle
If Not Cel Is Nothing Then
Adresse = Cel.Address
'stocke dans un tableau l'adresse de
'chaque cellule où le mot est trouvé
Do
I = I + 1
ReDim Preserve TblAdresse(1 To I)
TblAdresse(I) = Cel.Address(0, 0)
Set Cel = Plage.FindNext(Cel)
Loop While Adresse <> Cel.Address
'tri croissant des plages entre cellules
For I = 1 To UBound(TblAdresse)
'gère l'erreur de fin de tableau pour trier
'les dernières cellules après la dernière
'contenant le mot recherché
On Error Resume Next
Set Plage = .Range(.Range(TblAdresse(I)).Offset(1, 0), _
.Range(TblAdresse(I + 1)).Offset(-1, 0))
If Err.Number <> 0 Then
Set Plage = .Range(.Range(TblAdresse(I)).Offset(1, 0), _
.Range(.[A65536].End(xlUp).Address))
End If
Plage.Sort [A1]
Next

Else
MsgBox "Mot non trouvé !"
End If
End With


Hervé.


End Sub
"elli6258" a écrit dans le message de news:

Bonjour à tous,
je cherche une macro en vba excel qui me permet , dans une colonne de
trouver une cellule contenant un mot commençant par RSG, (exemple: A5) de
mémoriser cette ligne puis la prochaine cellule commençant également par
RSG( exemple A11) pour ensuite trier la plage de cellule entre ces 2
cellules ( A6:A10), recommencer la recherche depuis (A11) et ainsi de
suite jusqu' a la fin du tableau.
En fait je veux trier en ordre croissant toutes les cellules qui se
trouvent entres 2 cellules contenant le mot RSG.
Merci de votre contribution
Michel



Avatar
elli6258
Bonsoir,
Je viens de prendre connaissance de vos macros, et je suis scotché ! je me
doutais que ce n'étais pas simple.
A la lecture des macros cela correspond à mes attentes, je vais testé ce
soir et je vous tiens informé. Merci encore





"Hervé" a écrit dans le message de news:

Bonjour à toutes et tous,
Une autre méthode, à adapter.

Sub Trier()
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range
Dim TblAdresse() As String
Dim Adresse As String
Dim I As Integer

Set Fe = ActiveSheet
With Fe
'défini la plage de recherche
Set Plage = .Range(.[A1], .[A65536].End(xlUp))
'effectue la recherche dans la plage
Set Cel = Plage.Find("RSG*", , xlValues)
'si trouvé, mémorise l'adresse de la 1ère
'cellule afin de ne pas tourner en boucle
If Not Cel Is Nothing Then
Adresse = Cel.Address
'stocke dans un tableau l'adresse de
'chaque cellule où le mot est trouvé
Do
I = I + 1
ReDim Preserve TblAdresse(1 To I)
TblAdresse(I) = Cel.Address(0, 0)
Set Cel = Plage.FindNext(Cel)
Loop While Adresse <> Cel.Address
'tri croissant des plages entre cellules
For I = 1 To UBound(TblAdresse)
'gère l'erreur de fin de tableau pour trier
'les dernières cellules après la dernière
'contenant le mot recherché
On Error Resume Next
Set Plage = .Range(.Range(TblAdresse(I)).Offset(1, 0), _
.Range(TblAdresse(I + 1)).Offset(-1, 0))
If Err.Number <> 0 Then
Set Plage = .Range(.Range(TblAdresse(I)).Offset(1, 0), _
.Range(.[A65536].End(xlUp).Address))
End If
Plage.Sort [A1]
Next

Else
MsgBox "Mot non trouvé !"
End If
End With


Hervé.


End Sub
"elli6258" a écrit dans le message de news:

Bonjour à tous,
je cherche une macro en vba excel qui me permet , dans une colonne de
trouver une cellule contenant un mot commençant par RSG, (exemple: A5) de
mémoriser cette ligne puis la prochaine cellule commençant également par
RSG( exemple A11) pour ensuite trier la plage de cellule entre ces 2
cellules ( A6:A10), recommencer la recherche depuis (A11) et ainsi de
suite jusqu' a la fin du tableau.
En fait je veux trier en ordre croissant toutes les cellules qui se
trouvent entres 2 cellules contenant le mot RSG.
Merci de votre contribution
Michel







Avatar
elli6258
Re bonsoir, je viens de tester les 2 macros,
Cela fonctionne mais il y a un problème, dans la macro de jacky, certaines
cellules ne sont pas reconnues, j'ai fait un copier coller de celles qui
l'étaient, mais sans changement.

Dans la macro de Hervé, tout se passe bien, mais quand la commande
"plage.sort " est traité, c'est tout le document qui est trié.

Je me suis mal exprimé dans le descriptif de ce que je veux faire, et je me
suis focaliser sur la colonne A à trier, mais mon tableau comporte une
dizaine de colonne et il faut étendre le trie à toutes les colonnes.
Cordialement

"elli6258" a écrit dans le message de news:
u8LYQ$
Bonsoir,
Je viens de prendre connaissance de vos macros, et je suis scotché ! je me
doutais que ce n'étais pas simple.
A la lecture des macros cela correspond à mes attentes, je vais testé ce
soir et je vous tiens informé. Merci encore





"Hervé" a écrit dans le message de news:

Bonjour à toutes et tous,
Une autre méthode, à adapter.

Sub Trier()
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range
Dim TblAdresse() As String
Dim Adresse As String
Dim I As Integer

Set Fe = ActiveSheet
With Fe
'défini la plage de recherche
Set Plage = .Range(.[A1], .[A65536].End(xlUp))
'effectue la recherche dans la plage
Set Cel = Plage.Find("RSG*", , xlValues)
'si trouvé, mémorise l'adresse de la 1ère
'cellule afin de ne pas tourner en boucle
If Not Cel Is Nothing Then
Adresse = Cel.Address
'stocke dans un tableau l'adresse de
'chaque cellule où le mot est trouvé
Do
I = I + 1
ReDim Preserve TblAdresse(1 To I)
TblAdresse(I) = Cel.Address(0, 0)
Set Cel = Plage.FindNext(Cel)
Loop While Adresse <> Cel.Address
'tri croissant des plages entre cellules
For I = 1 To UBound(TblAdresse)
'gère l'erreur de fin de tableau pour trier
'les dernières cellules après la dernière
'contenant le mot recherché
On Error Resume Next
Set Plage = .Range(.Range(TblAdresse(I)).Offset(1, 0), _
.Range(TblAdresse(I + 1)).Offset(-1, 0))
If Err.Number <> 0 Then
Set Plage = .Range(.Range(TblAdresse(I)).Offset(1, 0), _
.Range(.[A65536].End(xlUp).Address))
End If
Plage.Sort [A1]
Next

Else
MsgBox "Mot non trouvé !"
End If
End With


Hervé.


End Sub
"elli6258" a écrit dans le message de news:

Bonjour à tous,
je cherche une macro en vba excel qui me permet , dans une colonne de
trouver une cellule contenant un mot commençant par RSG, (exemple: A5)
de mémoriser cette ligne puis la prochaine cellule commençant également
par RSG( exemple A11) pour ensuite trier la plage de cellule entre ces 2
cellules ( A6:A10), recommencer la recherche depuis (A11) et ainsi de
suite jusqu' a la fin du tableau.
En fait je veux trier en ordre croissant toutes les cellules qui se
trouvent entres 2 cellules contenant le mot RSG.
Merci de votre contribution
Michel











Avatar
Jacky
Re...
Et ceci:
http://cjoint.com/?izkGp3pXKz

Sinon une copie du fichier sur:
http://www.cjoint.com

--
Salutations
JJ


"elli6258" a écrit dans le message de news:

Re bonsoir, je viens de tester les 2 macros,
Cela fonctionne mais il y a un problème, dans la macro de jacky,
certaines
cellules ne sont pas reconnues, j'ai fait un copier coller de celles qui
l'étaient, mais sans changement.

Dans la macro de Hervé, tout se passe bien, mais quand la commande
"plage.sort " est traité, c'est tout le document qui est trié.

Je me suis mal exprimé dans le descriptif de ce que je veux faire, et je
me suis focaliser sur la colonne A à trier, mais mon tableau comporte une
dizaine de colonne et il faut étendre le trie à toutes les colonnes.
Cordialement

"elli6258" a écrit dans le message de news:
u8LYQ$
Bonsoir,
Je viens de prendre connaissance de vos macros, et je suis scotché ! je
me
doutais que ce n'étais pas simple.
A la lecture des macros cela correspond à mes attentes, je vais testé ce
soir et je vous tiens informé. Merci encore





"Hervé" a écrit dans le message de news:

Bonjour à toutes et tous,
Une autre méthode, à adapter.

Sub Trier()
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range
Dim TblAdresse() As String
Dim Adresse As String
Dim I As Integer

Set Fe = ActiveSheet
With Fe
'défini la plage de recherche
Set Plage = .Range(.[A1], .[A65536].End(xlUp))
'effectue la recherche dans la plage
Set Cel = Plage.Find("RSG*", , xlValues)
'si trouvé, mémorise l'adresse de la 1ère
'cellule afin de ne pas tourner en boucle
If Not Cel Is Nothing Then
Adresse = Cel.Address
'stocke dans un tableau l'adresse de
'chaque cellule où le mot est trouvé
Do
I = I + 1
ReDim Preserve TblAdresse(1 To I)
TblAdresse(I) = Cel.Address(0, 0)
Set Cel = Plage.FindNext(Cel)
Loop While Adresse <> Cel.Address
'tri croissant des plages entre cellules
For I = 1 To UBound(TblAdresse)
'gère l'erreur de fin de tableau pour trier
'les dernières cellules après la dernière
'contenant le mot recherché
On Error Resume Next
Set Plage = .Range(.Range(TblAdresse(I)).Offset(1, 0), _
.Range(TblAdresse(I + 1)).Offset(-1, 0))
If Err.Number <> 0 Then
Set Plage = .Range(.Range(TblAdresse(I)).Offset(1, 0), _
.Range(.[A65536].End(xlUp).Address))
End If
Plage.Sort [A1]
Next

Else
MsgBox "Mot non trouvé !"
End If
End With


Hervé.


End Sub
"elli6258" a écrit dans le message de news:

Bonjour à tous,
je cherche une macro en vba excel qui me permet , dans une colonne de
trouver une cellule contenant un mot commençant par RSG, (exemple: A5)
de mémoriser cette ligne puis la prochaine cellule commençant également
par RSG( exemple A11) pour ensuite trier la plage de cellule entre ces
2
cellules ( A6:A10), recommencer la recherche depuis (A11) et ainsi de
suite jusqu' a la fin du tableau.
En fait je veux trier en ordre croissant toutes les cellules qui se
trouvent entres 2 cellules contenant le mot RSG.
Merci de votre contribution
Michel
















Avatar
elli6258
Bonjour,
J'ai mis une copie du fichier
:http://cjoint.com/?iznhoJpbPW
Merci
Michel

"Jacky" a écrit dans le message de news:
%
Re...
Et ceci:
http://cjoint.com/?izkGp3pXKz

Sinon une copie du fichier sur:
http://www.cjoint.com

--
Salutations
JJ


"elli6258" a écrit dans le message de news:

Re bonsoir, je viens de tester les 2 macros,
Cela fonctionne mais il y a un problème, dans la macro de jacky,
certaines
cellules ne sont pas reconnues, j'ai fait un copier coller de celles qui
l'étaient, mais sans changement.

Dans la macro de Hervé, tout se passe bien, mais quand la commande
"plage.sort " est traité, c'est tout le document qui est trié.

Je me suis mal exprimé dans le descriptif de ce que je veux faire, et je
me suis focaliser sur la colonne A à trier, mais mon tableau comporte une
dizaine de colonne et il faut étendre le trie à toutes les colonnes.
Cordialement

"elli6258" a écrit dans le message de news:
u8LYQ$
Bonsoir,
Je viens de prendre connaissance de vos macros, et je suis scotché ! je
me
doutais que ce n'étais pas simple.
A la lecture des macros cela correspond à mes attentes, je vais testé ce
soir et je vous tiens informé. Merci encore





"Hervé" a écrit dans le message de news:

Bonjour à toutes et tous,
Une autre méthode, à adapter.

Sub Trier()
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range
Dim TblAdresse() As String
Dim Adresse As String
Dim I As Integer

Set Fe = ActiveSheet
With Fe
'défini la plage de recherche
Set Plage = .Range(.[A1], .[A65536].End(xlUp))
'effectue la recherche dans la plage
Set Cel = Plage.Find("RSG*", , xlValues)
'si trouvé, mémorise l'adresse de la 1ère
'cellule afin de ne pas tourner en boucle
If Not Cel Is Nothing Then
Adresse = Cel.Address
'stocke dans un tableau l'adresse de
'chaque cellule où le mot est trouvé
Do
I = I + 1
ReDim Preserve TblAdresse(1 To I)
TblAdresse(I) = Cel.Address(0, 0)
Set Cel = Plage.FindNext(Cel)
Loop While Adresse <> Cel.Address
'tri croissant des plages entre cellules
For I = 1 To UBound(TblAdresse)
'gère l'erreur de fin de tableau pour trier
'les dernières cellules après la dernière
'contenant le mot recherché
On Error Resume Next
Set Plage = .Range(.Range(TblAdresse(I)).Offset(1, 0), _
.Range(TblAdresse(I + 1)).Offset(-1, 0))
If Err.Number <> 0 Then
Set Plage = .Range(.Range(TblAdresse(I)).Offset(1, 0), _
.Range(.[A65536].End(xlUp).Address))
End If
Plage.Sort [A1]
Next

Else
MsgBox "Mot non trouvé !"
End If
End With


Hervé.


End Sub
"elli6258" a écrit dans le message de news:

Bonjour à tous,
je cherche une macro en vba excel qui me permet , dans une colonne de
trouver une cellule contenant un mot commençant par RSG, (exemple: A5)
de mémoriser cette ligne puis la prochaine cellule commençant
également
par RSG( exemple A11) pour ensuite trier la plage de cellule entre ces
2
cellules ( A6:A10), recommencer la recherche depuis (A11) et ainsi de
suite jusqu' a la fin du tableau.
En fait je veux trier en ordre croissant toutes les cellules qui se
trouvent entres 2 cellules contenant le mot RSG.
Merci de votre contribution
Michel





















Avatar
elli6258
"elli6258" a écrit dans le message de news:

Bonjour,
J'ai mis une copie du fichier
:http://cjoint.com/?iznhoJpbPW


http://cjoint.com/?izrCoN5ReC
Merci
Michel

"Jacky" a écrit dans le message de news:
%
Re...
Et ceci:
http://cjoint.com/?izkGp3pXKz

Sinon une copie du fichier sur:
http://www.cjoint.com

--
Salutations
JJ


"elli6258" a écrit dans le message de news:

Re bonsoir, je viens de tester les 2 macros,
Cela fonctionne mais il y a un problème, dans la macro de jacky,
certaines
cellules ne sont pas reconnues, j'ai fait un copier coller de celles qui
l'étaient, mais sans changement.

Dans la macro de Hervé, tout se passe bien, mais quand la commande
"plage.sort " est traité, c'est tout le document qui est trié.

Je me suis mal exprimé dans le descriptif de ce que je veux faire, et je
me suis focaliser sur la colonne A à trier, mais mon tableau comporte
une
dizaine de colonne et il faut étendre le trie à toutes les colonnes.
Cordialement

"elli6258" a écrit dans le message de news:
u8LYQ$
Bonsoir,
Je viens de prendre connaissance de vos macros, et je suis scotché ! je
me
doutais que ce n'étais pas simple.
A la lecture des macros cela correspond à mes attentes, je vais testé
ce
soir et je vous tiens informé. Merci encore





"Hervé" a écrit dans le message de news:

Bonjour à toutes et tous,
Une autre méthode, à adapter.

Sub Trier()
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range
Dim TblAdresse() As String
Dim Adresse As String
Dim I As Integer

Set Fe = ActiveSheet
With Fe
'défini la plage de recherche
Set Plage = .Range(.[A1], .[A65536].End(xlUp))
'effectue la recherche dans la plage
Set Cel = Plage.Find("RSG*", , xlValues)
'si trouvé, mémorise l'adresse de la 1ère
'cellule afin de ne pas tourner en boucle
If Not Cel Is Nothing Then
Adresse = Cel.Address
'stocke dans un tableau l'adresse de
'chaque cellule où le mot est trouvé
Do
I = I + 1
ReDim Preserve TblAdresse(1 To I)
TblAdresse(I) = Cel.Address(0, 0)
Set Cel = Plage.FindNext(Cel)
Loop While Adresse <> Cel.Address
'tri croissant des plages entre cellules
For I = 1 To UBound(TblAdresse)
'gère l'erreur de fin de tableau pour trier
'les dernières cellules après la dernière
'contenant le mot recherché
On Error Resume Next
Set Plage = .Range(.Range(TblAdresse(I)).Offset(1, 0), _
.Range(TblAdresse(I + 1)).Offset(-1, 0))
If Err.Number <> 0 Then
Set Plage = .Range(.Range(TblAdresse(I)).Offset(1, 0),
_
.Range(.[A65536].End(xlUp).Address))
End If
Plage.Sort [A1]
Next

Else
MsgBox "Mot non trouvé !"
End If
End With


Hervé.


End Sub
"elli6258" a écrit dans le message de news:

Bonjour à tous,
je cherche une macro en vba excel qui me permet , dans une colonne de
trouver une cellule contenant un mot commençant par RSG, (exemple:
A5)
de mémoriser cette ligne puis la prochaine cellule commençant
également
par RSG( exemple A11) pour ensuite trier la plage de cellule entre
ces
2
cellules ( A6:A10), recommencer la recherche depuis (A11) et ainsi de
suite jusqu' a la fin du tableau.
En fait je veux trier en ordre croissant toutes les cellules qui se
trouvent entres 2 cellules contenant le mot RSG.
Merci de votre contribution
Michel

























Avatar
Jacky
Re...
Si j'ai bien compris
'---------
Sub jj()
Application.ScreenUpdating = False
Dim x As Integer, y As Integer, compte As Integer
For Each c In Range("a1:a" & [A65536].End(3).Row)
If UCase(Left(c, 3)) = "RSG" Then
compte = compte + 1
x = y + 2
y = c.Row - 1
If compte = 2 Then
' MsgBox "Tri de ligne " & x & " à ligne " & y
Rows(x & ":" & y).Sort Key1:=Columns("A"), Order1:=xlAscending
compte = 1
End If
End If
Next
End Sub
'--------------
Ton fichier modifié
http://cjoint.com/?izrDDfGS6a

--
Salutations
JJ


"elli6258" a écrit dans le message de news:

Bonjour,
J'ai mis une copie du fichier
:http://cjoint.com/?iznhoJpbPW
Merci
Michel

"Jacky" a écrit dans le message de news:
%
Re...
Et ceci:
http://cjoint.com/?izkGp3pXKz

Sinon une copie du fichier sur:
http://www.cjoint.com

--
Salutations
JJ


"elli6258" a écrit dans le message de news:

Re bonsoir, je viens de tester les 2 macros,
Cela fonctionne mais il y a un problème, dans la macro de jacky,
certaines
cellules ne sont pas reconnues, j'ai fait un copier coller de celles qui
l'étaient, mais sans changement.

Dans la macro de Hervé, tout se passe bien, mais quand la commande
"plage.sort " est traité, c'est tout le document qui est trié.

Je me suis mal exprimé dans le descriptif de ce que je veux faire, et je
me suis focaliser sur la colonne A à trier, mais mon tableau comporte
une
dizaine de colonne et il faut étendre le trie à toutes les colonnes.
Cordialement

"elli6258" a écrit dans le message de news:
u8LYQ$
Bonsoir,
Je viens de prendre connaissance de vos macros, et je suis scotché ! je
me
doutais que ce n'étais pas simple.
A la lecture des macros cela correspond à mes attentes, je vais testé
ce
soir et je vous tiens informé. Merci encore





"Hervé" a écrit dans le message de news:

Bonjour à toutes et tous,
Une autre méthode, à adapter.

Sub Trier()
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range
Dim TblAdresse() As String
Dim Adresse As String
Dim I As Integer

Set Fe = ActiveSheet
With Fe
'défini la plage de recherche
Set Plage = .Range(.[A1], .[A65536].End(xlUp))
'effectue la recherche dans la plage
Set Cel = Plage.Find("RSG*", , xlValues)
'si trouvé, mémorise l'adresse de la 1ère
'cellule afin de ne pas tourner en boucle
If Not Cel Is Nothing Then
Adresse = Cel.Address
'stocke dans un tableau l'adresse de
'chaque cellule où le mot est trouvé
Do
I = I + 1
ReDim Preserve TblAdresse(1 To I)
TblAdresse(I) = Cel.Address(0, 0)
Set Cel = Plage.FindNext(Cel)
Loop While Adresse <> Cel.Address
'tri croissant des plages entre cellules
For I = 1 To UBound(TblAdresse)
'gère l'erreur de fin de tableau pour trier
'les dernières cellules après la dernière
'contenant le mot recherché
On Error Resume Next
Set Plage = .Range(.Range(TblAdresse(I)).Offset(1, 0), _
.Range(TblAdresse(I + 1)).Offset(-1, 0))
If Err.Number <> 0 Then
Set Plage = .Range(.Range(TblAdresse(I)).Offset(1, 0),
_
.Range(.[A65536].End(xlUp).Address))
End If
Plage.Sort [A1]
Next

Else
MsgBox "Mot non trouvé !"
End If
End With


Hervé.


End Sub
"elli6258" a écrit dans le message de news:

Bonjour à tous,
je cherche une macro en vba excel qui me permet , dans une colonne de
trouver une cellule contenant un mot commençant par RSG, (exemple:
A5)
de mémoriser cette ligne puis la prochaine cellule commençant
également
par RSG( exemple A11) pour ensuite trier la plage de cellule entre
ces
2
cellules ( A6:A10), recommencer la recherche depuis (A11) et ainsi de
suite jusqu' a la fin du tableau.
En fait je veux trier en ordre croissant toutes les cellules qui se
trouvent entres 2 cellules contenant le mot RSG.
Merci de votre contribution
Michel

























Avatar
elli6258
Bonsoir,
Génial cela fonctionne. Je te remercie vivement pour ta macro. je vais
pouvoir continuer la mise en forme de mon tableau.
Longue vie à ce forum
Cordialement

Michel



"Jacky" a écrit dans le message de news:

Re...
Si j'ai bien compris
'---------
Sub jj()
Application.ScreenUpdating = False
Dim x As Integer, y As Integer, compte As Integer
For Each c In Range("a1:a" & [A65536].End(3).Row)
If UCase(Left(c, 3)) = "RSG" Then
compte = compte + 1
x = y + 2
y = c.Row - 1
If compte = 2 Then
' MsgBox "Tri de ligne " & x & " à ligne " & y
Rows(x & ":" & y).Sort Key1:=Columns("A"), Order1:=xlAscending
compte = 1
End If
End If
Next
End Sub
'--------------
Ton fichier modifié
http://cjoint.com/?izrDDfGS6a

--
Salutations
JJ


"elli6258" a écrit dans le message de news:

Bonjour,
J'ai mis une copie du fichier
:http://cjoint.com/?iznhoJpbPW
Merci
Michel

"Jacky" a écrit dans le message de news:
%
Re...
Et ceci:
http://cjoint.com/?izkGp3pXKz

Sinon une copie du fichier sur:
http://www.cjoint.com

--
Salutations
JJ


"elli6258" a écrit dans le message de news:

Re bonsoir, je viens de tester les 2 macros,
Cela fonctionne mais il y a un problème, dans la macro de jacky,
certaines
cellules ne sont pas reconnues, j'ai fait un copier coller de celles
qui
l'étaient, mais sans changement.

Dans la macro de Hervé, tout se passe bien, mais quand la commande
"plage.sort " est traité, c'est tout le document qui est trié.

Je me suis mal exprimé dans le descriptif de ce que je veux faire, et
je
me suis focaliser sur la colonne A à trier, mais mon tableau comporte
une
dizaine de colonne et il faut étendre le trie à toutes les colonnes.
Cordialement

"elli6258" a écrit dans le message de news:
u8LYQ$
Bonsoir,
Je viens de prendre connaissance de vos macros, et je suis scotché !
je
me
doutais que ce n'étais pas simple.
A la lecture des macros cela correspond à mes attentes, je vais testé
ce
soir et je vous tiens informé. Merci encore





"Hervé" a écrit dans le message de news:

Bonjour à toutes et tous,
Une autre méthode, à adapter.

Sub Trier()
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range
Dim TblAdresse() As String
Dim Adresse As String
Dim I As Integer

Set Fe = ActiveSheet
With Fe
'défini la plage de recherche
Set Plage = .Range(.[A1], .[A65536].End(xlUp))
'effectue la recherche dans la plage
Set Cel = Plage.Find("RSG*", , xlValues)
'si trouvé, mémorise l'adresse de la 1ère
'cellule afin de ne pas tourner en boucle
If Not Cel Is Nothing Then
Adresse = Cel.Address
'stocke dans un tableau l'adresse de
'chaque cellule où le mot est trouvé
Do
I = I + 1
ReDim Preserve TblAdresse(1 To I)
TblAdresse(I) = Cel.Address(0, 0)
Set Cel = Plage.FindNext(Cel)
Loop While Adresse <> Cel.Address
'tri croissant des plages entre cellules
For I = 1 To UBound(TblAdresse)
'gère l'erreur de fin de tableau pour trier
'les dernières cellules après la dernière
'contenant le mot recherché
On Error Resume Next
Set Plage = .Range(.Range(TblAdresse(I)).Offset(1, 0), _
.Range(TblAdresse(I + 1)).Offset(-1, 0))
If Err.Number <> 0 Then
Set Plage = .Range(.Range(TblAdresse(I)).Offset(1, 0),
_
.Range(.[A65536].End(xlUp).Address))
End If
Plage.Sort [A1]
Next

Else
MsgBox "Mot non trouvé !"
End If
End With


Hervé.


End Sub
"elli6258" a écrit dans le message de news:

Bonjour à tous,
je cherche une macro en vba excel qui me permet , dans une colonne
de
trouver une cellule contenant un mot commençant par RSG, (exemple:
A5)
de mémoriser cette ligne puis la prochaine cellule commençant
également
par RSG( exemple A11) pour ensuite trier la plage de cellule entre
ces
2
cellules ( A6:A10), recommencer la recherche depuis (A11) et ainsi
de
suite jusqu' a la fin du tableau.
En fait je veux trier en ordre croissant toutes les cellules qui se
trouvent entres 2 cellules contenant le mot RSG.
Merci de votre contribution
Michel