Boucle 80000 lignes

Bonjour,

je dois traiter tous les jours un fichier avec entre 30000 et 80000 lignes et plusieurs feuilles.

Je viens de me mettre à la VBA Excel et je cherche à écrire dans la colonne Q de la feuille "FITC" la division de la colonne C par la colonne D, bien sur tant qu'il y a des informations dans les cellules et à partir de la ligne 2.

J'ai cherché mais il y a toujours un problème de longueur de variable ou de mauvais positionnement dans les feuilles.

J'aimerais idéalement intégrer ce bout de code dans une boucle with existante.

J'ai essayé mais ça ne marche pas

Merci beaucoup

Rorotado

Bonjour,

Un max de gens ici vont te demander de déposer un fichier identique et anonymisé pour mieux voir ce dont tu parles et avec quelques lignes pour tester (50-100 lignes suffisent).

Mets alors le AVANT et APRES pour faire une demande claire

P.

Ok ca marche tu as raison c'est plus simple à comprendre^^

Merci

je viens de l'ajouter

re

voilà ce qui devrait aller vite si beaucoup de lignes

P.

22rorotada-xlp.xlsm (32.63 Ko)

Un très grand merci c'est parfait

Juste un petit souci ça ne marche pas quand je l'insert ça me marque l'indice n’appartient pas à la sélection.

Je mets à jours le fichier avec toutes les feuilles et ma macro pour que tu puisse voir l'ensemble de mon projet

Quand on demande un fichier exemple, il doit être anonymisé mais SURTOUT être pareil à celui sur lequel la macro travaillera

Ici on a pas le même nombre de colonnes et tu dis quelles colonnes seront prises pour la division.

Je dois quitter mais tu dois revoir ton exemple pour être + clair et proche de la structure de ton fichier réel !!

P.

Bonjour,

je te conseille de coller la formule dans la colonne (même en vba) sur le nombre de lignes nécessaires.

Ca sera plus rapide. Excel utilise tous les threads, vba un seul.

Tu finis avec .value=.value sur la plage si tu ne veux que le résultat.

eric

Bonjour à tous,

Sur les conseils d'eriiic

Sub test()
    With Sheets("FITC").[a1].CurrentRegion
        With .Offset(, .Columns.Count).Columns(1)
            .Formula = "=c" & .Row & "/d" & .Row
            '.Value = .Value
        End With
    End With
End Sub

ou ceci :

.Formula = "=rc[-13]/rc[-12]"

c'est mieux ainsi

.Formula = "=if(rc[-12]<>0,rc[-13]/rc[-12],"""")"

le code réajusté au 2ème fichier

Option Explicit
Sub test()
    With Sheets("avant").[a1].CurrentRegion
        With .Offset(1, .Columns.Count + 1).Columns(1).Resize(.Rows.Count - 1)
            .Formula = "=if(rc[-13]<>0,rc[-14]/rc[-13],"""")"
            '.Value = .Value
        End With
    End With
End Sub

klin89

Merci beaucoup pour vos réponses, je vais essayer et je vous dis.

Super ça marche très bien.

Sub test()

With Sheets("FITC").[a1].CurrentRegion

With .Offset(, .Columns.Count).Columns(1)

.Formula = "=c" & .Row & "/d" & .Row

'.Value = .Value

End With

End With

End Sub

Je n'arrive pas par contre à choisir la colonne ou je veux mes résultats

Je souhaite ensuite copier les valeurs de la colonne résultats dans une autre feuille, j'ai essayé avec ça

Sheets("FITC").Columns("P").copy Sheets("Data").Columns(1)

Mais ça ne colle que les formules et pas les valeurs

Bonjour,

En se basant sur la colonne A :

    With Sheets("FITC").[Q2].Resize(Cells(Rows.Count, "A").End(xlUp).Row - 1)
            .Formula = "=C2/D2"
            .Value = .Value
    End With

eric

Super merci, par contre ça ajoute les résultats toujours une colonne après par exemple si je choisi la colonne O les résultats seront dans P.

Autre question, si je veux choisir une autre feuille pour coller les valeurs je fais comment?

par contre ça ajoute les résultats toujours une colonne après par exemple si je choisi la colonne O les résultats seront dans P.

Pas possible. Tu as dû (mal) modifier ce que je t'ai mis.

Autre question, si je veux choisir une autre feuille pour coller les valeurs je fais comment?

Bah, tu mets directement tes formules dans l'autre feuille en utilisant les ref de la 1ère feuille.

Pareil que si tu le faisais à la main.

J'ai fait un copier coller et il y a toujours un décalage.

En fait je voudrais copier les valeurs pas les formules sinon ça ne marche pas dans une autre feuille;

Merci

Ah oui ?

Je suis curieux de voir ton fichier avec cette anomalie bizarre (avec ton code)

Je peux te l'envoyer par message?

Pas bonjour non plus,

non.

En plus ça fait 10 jours, j'avais plus de temps dispo.

Redémarre un nouveau sujet et tâche de le suivre de manière plus rigoureuse.

eric

Bonjour rorotada, eriiic,

Dans ton message du 8 avril à 15:00, tu as écrit : « Super merci, par contre ça ajoute les résultats toujours une colonne après par exemple si je choisi la colonne O les résultats seront dans P. »

Dans son message du 8 avril à 17:09, eriiic t'a répondu : « Pas possible. Tu as dû (mal) modifier ce que je t'ai mis. » ; je suis d'accord avec lui : tu as dû mal taper le code VBA !

En fait, je pense que tu as sûrement dû mettre une virgule au lieu du signe moins !

ce n'est pas ça : .[Q2].Resize(Cells(Rows.Count, "A").End(xlUp).Row, 1)

mais ça : .[Q2].Resize(Cells(Rows.Count, "A").End(xlUp).Row - 1)

(car seul un « virgule 1 » peut expliquer que ça mette les résultats une colonne à droite)

dhany

Bonjour,

[quote]tu as sûrement dû mettre une virgule au lieu du signe moins

ce n'est pas ça : .[Q2].Resize(Cells(Rows.Count, "A").End(xlUp).Row, 1)[/quote]

Bah non.

Là ça copierait juste une ligne en trop, sans décaler d'une colonne. C'est un .Resize(), pas un .Offset()

eric

Rechercher des sujets similaires à "boucle 80000 lignes"