Excès d'ActiveCell + Loop peut nuire à la santé

Bonjour,

J'ai créé un programme qui me donne le résultat que je souhaite, càd trouver une valeur (proche de la rechercheV et equiv en formules exceliennes) dans un 2e onglet en partant d'une valeur a et d'une valeur b. L'une de ces valeurs (a) est une chaine de 4 caractères format texte et la seconde (b) est une date, ce qui ne me permet pas de travailler sur une concaténation, surtout que je travail sur des intervalles et que la date que je chercherais serait toujours avant ou après celle dans le 2e onglet. La concaténation écartée je me déplace dans une colonne puis une fois la première valeur trouvée je me déplace d'un cran à droite et je continue de descendre jusqu'à trouver la bonne date. Tout çà en cellules actives... hummm

Mon problème est lié au temps de calcul extrêmement long. En effet je me déplace dans le 2n onglet de cellule en cellule active ce qui est bien moins instantané qu'une rechercheV.

L'autre soucis est plus d'ordre sanitaire, en effet, voir l'écran passer d'un onglet à l'autre et défiler sur toutes les cellules actives sur +16000 lignes finis par me donner la nausée (il faut dire que j'aime colorer mes feuilles excel). Est-il possible de travailler sans changer les Onglets et Cellules actives et ainsi rester sur le premier onglet de départ ?

Je vous remercie

Cordialement

Sheets("ONGLET 1").Select
Range("C2").Select

'Récupération des données qui vont servir à la recherche dans le 2nd onglet
Do While ActiveCell.Value <> ""
a = Left(ActiveCell, 4)
b = ActiveCell.Offset(0, -1)

    Sheets("ONGLET 2").Select
    Range("A2").Select

'Recherche de la valeur a dans la première colonne
    Do While ActiveCell.Value <> a
        ActiveCell.Offset(1, 0).Select
    Loop

'Une fois la valeur a trouvée je cherche la valeur b qui lui correspond, une valeur a pouvant avoir plusieurs valeurs b
    Do While ActiveCell.Offset(0, 1).Value > b
        ActiveCell.Offset(1, 0).Select
    Loop

 'Une fois les valeurs a et b trouvées je récupère la valeur dans la 3e colonne et je la repose délicatement dans le premier onglet et je recommence parce que j'aime çà
    c = ActiveCell.Offset(0, 2).Value

    Sheets("ONGLET 1").Select
    ActiveCell.Offset(0, 1).Value = c
    ActiveCell.Offset(1, 0).Select
Loop

End Sub
11orbis-m12-n-1.xlsm (40.26 Ko)

Bonjour

A vérifier si c'est le bon résultat

J'ai téléchargé le fichier, ouvert, exécuté la macro et voici ce qui m'est venu à la bouche :

"Oh mon dieu !"

Superbe boulot, merci beaucoup.

Je vais éplucher le code afin qu'il puisse me resservir. Merci Banzaiiii

Bonjour

Ginga999 a écrit :

"Oh mon dieu !"

Non appelez moi simplement Banzai64

Rechercher des sujets similaires à "exces activecell loop nuire sante"