Selectionner une plage de cellule

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacky
Le #16612201
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"
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



Jacky
Le #16612261
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"
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"
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







Hervé
Le #16612881
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"
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



elli6258
Le #16614691
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é"
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"
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







elli6258
Le #16616931
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" 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é"
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"
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











Jacky
Le #16618051
Re...
Et ceci:
http://cjoint.com/?izkGp3pXKz

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

--
Salutations
JJ


"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" 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é"
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"
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
















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

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

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

--
Salutations
JJ


"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" 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é"
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"
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





















elli6258
Le #16622251
"elli6258"
Bonjour,
J'ai mis une copie du fichier
:http://cjoint.com/?iznhoJpbPW


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

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

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

--
Salutations
JJ


"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" 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é"
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"
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

























Jacky
Le #16622071
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"
Bonjour,
J'ai mis une copie du fichier
:http://cjoint.com/?iznhoJpbPW
Merci
Michel

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

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

--
Salutations
JJ


"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" 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é"
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"
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

























elli6258
Le #16623021
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"
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"
Bonjour,
J'ai mis une copie du fichier
:http://cjoint.com/?iznhoJpbPW
Merci
Michel

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

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

--
Salutations
JJ


"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" 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é"
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"
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






























Publicité
Poster une réponse
Anonyme