Besoin d'aide pour sélectionner des lignes répondant à une condition
bih36
Messages postés3Date d'inscriptionjeudi 10 novembre 2005StatutMembreDernière intervention22 novembre 2005
-
18 nov. 2005 à 15:44
bih36
Messages postés3Date d'inscriptionjeudi 10 novembre 2005StatutMembreDernière intervention22 novembre 2005
-
22 nov. 2005 à 14:09
Bonjour,
Je suis débutant en vba et j'aurais vraiment besoin d'un coup de main.
Voilà, je cherche à séparer des lignes d'un fichier si elles répondent à une condition afin de les coller dans une autre feuille pour traitement. Tout marche très bien sauf si le nombre de lignes est supérieur à 40.
Voici le code :
For z = 10 To 1000
Worksheets("un").Select
Range("B:B").Activate
For Each cll In Selection If cll.Value z Then plg plg & cll.Row() & ":" & cll.Row() & ","
Next cll
If Len(plg) > 0 Then Range(Left(plg, Len(plg) - 1)).Select
l'erreur qui se produit quand le nombre de lignes est supérieur à 40 est une erreur d'éxécution 1009 (la méthode range de l'objet global a echoué).
Pouvez vous svp m'aider sur la résolution de cette erreur ou m'aider à trouver un moyen de récupérer le N° de la première et de la dernière ligne répondant à la condition afin de faire un range beaucoup plus court ?
Merci d'avance.
A voir également:
Besoin d'aide pour sélectionner des lignes répondant à une condition
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 18 nov. 2005 à 23:53
Lut,
Je présume que tu veux faire une sélection de plage multiple d'aprés ton code.
Je pense que tu as une limitation interne à excel mais pas sur ......(ta chaine string envoyer en paramètre)
Utilises plutôt des plages et la méthode Union comme décris ci-dessous
Dim xlRange As Range
Dim xlTempR As Range
Dim cll As Range: Dim LastRow As Long
'*** Juste pour éviter de faire un calcul sur toutes les lignes
bih36
Messages postés3Date d'inscriptionjeudi 10 novembre 2005StatutMembreDernière intervention22 novembre 2005 21 nov. 2005 à 10:01
Salut,
Merci bcp d'avoir pris le temps de répondre. J'ai modifié mon code comme tu me l'as dis :
Sub lignes()
Dim xlrange As Range
Dim xltempR As Range
Dim cll As Range: Dim lastRow As Long
For z = 1 To 3000
lastRow = Cells(Cells.Rows.Count, "B").End(xlUp).Row
With Worksheets("un")
For Each cll In .Range("B1:B" & lastRow)
If cll.Value = z Then
If xlrange Is Nothing Then
Set xlrange = cll
Else
If xlrange.Areas.Count > 0 Then
Set xlrange = Union(xlrange, cll)
End If
En fait, j'ai une autre macro au niveau des *** qui permet de traiter mes données avant de les envoyer dans une autre feuille. Chaque valeur z est donc traitée séparement.
Cependant j'ai deux petits problèmes : - j'aimerais sélectionner les lignes entières et il ne sélectionne que les cellules. J'ai essayé de modifier le code mais sans succès.
- Il garde en mémoire la sélection précédente quand il passe au z suivant. Je ne sais pas comment effacer la valeur de xlrange.
Peux tu stp me dire quelles modifs je dois faire pour arriver à faire cela.
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 21 nov. 2005 à 23:45
Oups,
If xlrange Is Nothing Then
Set xlrange = cll.EntireRow
Else
If xlrange.Areas.Count > 0 Then
Set xlrange = Union(xlrange, cll.EntireRow)
End If
tu peux même te passer de la condition If xlRange.Areas.count ........ car en fait si elle n'est pas égale a nothing elle comporte au moins une plage donc c'est redondant. Mais bon qui peu le plus peu le moins.