Trop de ligne pour bouclé

Bonjour à tous et à toutes, voilà mon problème : j'ai un tableau excel de plus de 46 000 lignes, qui est un nombre trop important pour faire une boucle dessus. Ainsi manuellement je veux appliqué un filtre pour diminuer le nombre de ligne, une grande partie des lignes seront alors caché. je veux ensuite que ma macro analyse en faisant une boucle à chaque fois sur les ligne visible et me renvoie notamment des informations par rapport aux colonnes de ses lignes. mais évidemment si je suis ici c'est que ça ne marche pas ... pourtant ma macro marche pour des tableau de 2000 lignes par exemple, je pense que je dois mal formuler mon compteur m. voici mon programme, merci de votre aide

Sub code2()

Dim a As Integer

Dim m As Integer

Dim b As Integer

Sheets("Feuil1").Range("D4:JD11").Clear

m = Sheets("Feuil3").Range("A2").CurrentRegion.SpecialCells(xlCellTypeVisible).Rows.Count

a = 2

For a = 2 To m

If Sheets("Feuil3").Cells(a, 4) Like "*PEB190*" Then

'MsgBox (Sheets("Feuil2").Cells(a, 25).Value)

'MsgBox ("ok")

For b = 4 To 280 Step 5

If Sheets("Feuil3").Cells(a, 25).Value = Sheets("Feuil1").Cells(2, b).Value Then

MsgBox (Sheets("Feuil1").Cells(2, b).Address)

Sheets("Feuil1").Cells(6, b).Value = Sheets("Feuil1").Cells(6, b).Value + 1

End If

Next

End If

Next

End Sub

Essaie d'indenter un peu ton code dans ton post avec l'option "</>" dispo sur le site, ce sera plus facilement lisible, surtout pour une boucle for :')

Sinon, à faire en sorte que ton programme cache une partie des cellules, puis analyses les visibles à chaque fois, tu fais que bouffer de la ram. Ce qui me semble bizarre c'est que le for est une limite, dans la spécification sur le site de Windows ils n'en parlent pas.. Du coup je te conseil de prendre le nombre de ligne, de prendre sa racine carré et de faire un For dans un For pour boucler par parties, ce sera moins casse-gueule et plus efficace.

Bonjour à tous,

Dim m As Integer > Integer est limité à 32768 ...

Pour aller au delà, il faut utilise Long > donc Dim m As Long

Idem pour les autres variables concernées.

ric

Salut à tous, je reviens vers vous après ce petit labs de temps pour vous dire que ca ne marche pas .. j'essaie de trouver la bonne combinaison mais je récolte toujours des erreurs 6 et 1004 qui me disent qu'en gros il y a toujours trop de lignes à traiter. Merci ric et Gydhia mais ça ne veut pas, je reste un peu persuadé qu'un solution qui traite juste les lignes filtré peut fonctionné mais je ne trouve rien ... et je ne peux pas mettre le fichier ici

si quelqu'un passe par là et à une solution ..

bonne journée

lab

Bonjour à tous,

Sans fichier test, il est plus difficile de trouver ce qui pose problème.

Un essai...

Sub code2()

Dim a As Long
Dim m As Long
Dim b As Long

Sheets("Feuil1").Range("D4:JD11").Clear

    Sheets("Feuil3").Activate
    'm = Sheets("Feuil3").Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Rows.Count

    Set Rng = ActiveSheet.AutoFilter.Range
    m = Rng.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1    ' - 1 pour ne pas compter l'entête

    a = 2
    For a = 2 To m
        If Sheets("Feuil3").Cells(a, 4) Like "*PEB190*" Then
            'MsgBox (Sheets("Feuil2").Cells(a, 25).Value)
            'MsgBox ("ok")
            For b = 4 To 280 Step 5

                If Sheets("Feuil3").Cells(a, 25).Value = Sheets("Feuil1").Cells(2, b).Value Then
                    MsgBox (Sheets("Feuil1").Cells(2, b).Address)
                    Sheets("Feuil1").Cells(6, b).Value = Sheets("Feuil1").Cells(6, b).Value + 1
                End If
            Next
        End If
    Next
End Sub

ric

Salut ric,

merci de ta réponse mais ça ne fonctionne pas, je pense que c'est le m qui pose problème car c'est un chiffre, donc même si là il est matérialisé à partir des ligne visible, disons 100 lignes après la filtration, après quand on le réutilise avec la boucle for a =2 to m, je pense qu'il va juste traiter les 100 premières lignes du tableau et non les 100 lignes visibles. j'ai fait un excel test qui reprend mon code et les deux tableau ( feuill1 c'est Feuillecalcul2 et feuill3 c'est Affairess ) avec l'ensemble de mon programme. Quand je le lance avec ton code ric, on voit bien dans le tableau quantité qu'il est allé chercher les deux premiers PEB au semaine 4 et 5 mais pas les autres ... donc le m a fonctionner mais juste pour les premier comme je l'ai expliqué avant ... La ou ca bug c'est dans le code1 ( qui est apres le 2 ) avec toujours ce fichu m...

merci de votre réponse

lab

dsl voila le fichier

4test.xlsm (551.98 Ko)

Bonjour,

si tu veux que ce soit (très) rapide il faut copier tes données dans une variable tableau et travailler avec celui-ci.

dim tabl1
tabl1=Sheets("Feuil3").Range("A2").CurrentRegion.SpecialCells(xlCellTypeVisible).Value
msgbox tabl1(1,1) ' exemple lecture valeur

idem pour le 2nd tableau, ne pas oublier le .Value.

Lire les cellules une par une est très chronophage.

eric

Bonjour à tous,

désolé de mon erreur ...

ric

Bonjour à tous,

Voici une version "chronophage" comme dit eriiic.

Je vais tenter de convertir le traitement avec des "variables tableaux".

Il faut que je finisse par apprendre leur utilisation un jour.

Un essai ... macro : " Sub code1() " ...

ric

3labzox-test-v4.xlsm (550.06 Ko)
Rechercher des sujets similaires à "trop ligne boucle"