Comment utiliser les collections ou dictionnaire vba Excel

Bonjour
Voici mon code qui extraire une date d’une chaine de caractère
le code fonctionne très bien mais le problème que ma plage contient beaucoup de lignes (plus de 400000 lignes).

Option Explicit
Sub test()
Dim Derlig As Long
Dim i As Long

Derlig = Sheets("Grand Livre").Cells(Application.Rows.Count, 1).End(xlUp).Row

For i = 3 To Derlig
        
        If Left(Range("F" & i), 21) = "Piece Encaissement / " Then
            Range("K" & i).Value = Format(Left(Right(Range("F" & i), 12), 10), "mm/dd/yyyy")
        End If
        If Left(Range("F" & i), 21) = "PIECE Synthese GTR-SI" Then
            Range("K" & i).Value = Format(Mid(Range("F" & i), 44, 10), "mm/dd/yyyy")
        End If
        
        If Left(Range("F" & i), 21) = "Piece journée encaiss" Then
            Range("K" & i).Value = CDate(Replace(Right(Range("F" & i), 10), ".", "/"))
        End If
       
Next i

End Sub

je souhaite augmenter et améliorer le temps d’exécution
j’ai lu que collections ou dictionnaire ou les tableau augmenter et améliorer le temps d’exécution mais je ne sais pas les utiliser
svp aidez moi.

Bonjour

Testes ma proposition

en colonne A l’ensemble des données objet de ces modifications (21601 lignes)
colonne B à D données fictives

L’objet de mon traitement et d’abord de trier toutes ces données (colonne A à D) en ordre de la colonne A à traiter

Ainsi de regrouper les données en fonction de leur nom pour les traiter dans une seule partie de l’ensemble et donc au lieu de balayer les 21601 lignes de n’avoir que quelques milliers qui correspondent au critère recherché

Une fois le tri effectuer une simple ligne de commande pour trouver la première ligne colonne A correspondant au critère ("Piece Encaissement / " ou « PIECE Synthese GTR-SI » ou « Piece journée encaiss ») et de traiter toutes les lignes qui suivent tant que celles-ci répondent au même critère la boucle cessant dés que celui-ci n’est plus trouvé

Ainsi ce traitement pour ces trois critères pour 21601 lignes est exécuté en moins d’1 minute

Testes mon exemple ci-joint en cliquant onglet « Grand Livre » sur le bouton « Traitement »
Toutes les données en colonne A répondant au critère "Piece Encaissement / " auront leur donnée colonne B associé en fin à « OK »
Toutes les données en colonne A répondant au critère « PIECE Synthese GTR-SI » auront leur donnée colonne D associé en fin à « OK »
Toutes les données en colonne A répondant au critère « Piece journée encaiss » auront leur donnée colonne C associé en fin à « OK »

En H2 l’heure du début du traitement en I2 celle de la fin du traitement
Moins d’1 minute en ce qui me concerne

Dans l’onglet « Feuil2 » l’ensemble des données pour effectuer plusieurs essais à recopier en onglet « Grand Livre »

Fais des tests et dis moi

Le code sera bien sur à adapter à ton contexte

A ta disposition pour des précisions ou explications supplémentaires

Test.xlsm (1,1 Mo)

1 J'aime

Bonjour FFO
Tu t’es cassé la tête pour rien,
La même question a été posé au même moment sur deux autres forums
(c’est d’ailleurs pour cela que je ne répond pas)


Bonjour à toi Mimimathy
Cassé la tête un bien grand mot me me suis occupé ainsi le confinement est mieux digéré
Avant de répondre je suppose que tu fais le tour des popotes pour voir ce qu’il en ai de la demande et de son sérieux
Pas très évident de gendarmer et de tendre une main secourable
C’est pas trop mon truc
Je tomberai très certainement dans ce genre de déconvenue hélas
Je me console en ayant malgré tout la satisfaction d’avoir proposé une solution

Merci quand même pour ton observation

Re,
Disons qu’il y a des habitués :wink:

Oui mais je n’ai pas tout ton vécu loin de là sur ce type d’échange et donc ton expérience en ce domaine fais la différence
Tu es un vieux routier moi un jeune débutant
Merci pour ton aide

Bonjour FFO
mille merci pour votre réponse et votre temps pour m’expliquer et aidez a trouver une solution de ma question.

Mr @Mimimathy
oui j’ai publié cette question sur plusieurs sites Web et ceci pour les raisons suivantes.
1- La possibilité de lire ma question par le plus grand nombre possible.
2- Obtenez de nombreuses réponses pour élever mon niveau VBA Excel.
Si vous voulez répondre à ma question, bienvenue et Merci. Si non, ne m’espionnez pas.

Bonjour,
Je n’espionne personne, mais si vous aviez déjà au moins lu une fois la Charte du forum d’Exel Pratique

### LES AUTRES RÈGLES À RESPECTER

** Ne postez aucune information personnelle et/ou confidentielle sur le forum (en particulier dans les fichiers joints) et rappelez-vous que vous êtes responsable de tout ce que vous postez sur le forum.*
** Un minimum de politesse est de rigueur (bonjour, SVP, merci, …), sans cela vous aurez peu de chance d’obtenir une réponse et vous risquez de voir votre message supprimé par un modérateur.*
** N’envoyez pas votre question en privé directement à un membre, postez-la sur le forum. N’envoyez pas non plus de message privé à un membre pour lui demander d’aller voir votre demande sur le forum.*
** Ne postez pas la même question sur un autre forum pour éviter de faire perdre bêtement du temps aux membres sur un problème qui peut être déjà résolu sur l’autre forum. L’inverse est également valable, si vous avez déjà posé votre question sur un autre forum, ne créez pas un doublon sur ce forum (à moins d’avoir clôturé le sujet sur l’autre forum).*
** Ne demandez rien d’illégal ou d’éthiquement discutable (comme par exemple le retrait d’un mot de passe VBA, l’extraction de données d’un site qui ne l’autorise pas, etc).*
** Les liens considérés comme publicitaires sont interdits dans les messages (notez que vous pouvez faire un lien vers votre site par le biais du champ « Site Web » de votre profil si votre participation sur le forum est suffisante pour compléter ce champ).*

et pour se former au VBA, il y a des centaines de vidéo de formation sur YouTube ou d’autres . Google est votre ami :stuck_out_tongue_winking_eye:

Bonjour Mr
Désolé j’ai pas lu la charte et effectivement vous êtes raison.
Je m’excuse et sa ce ne répète pas

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.