Optimisation code VBA + boucle While

Bonjour à tous,

j'hésitais à repartir d'un ancien poste qui concerne le même fichier excel avec son code. Mais pour plus de visibilité et plus de clarter pour tout le monde je pense qu'un nouveau sujet est préférable.

Voici le lien de mon premier poste.... (qui était en soi, inutile ^^)

https://forum.excel-pratique.com/excel/regular-expression-condition-if-vba-t78562.html

Je reviens vers vous, mon code en soit est déjà bien aboutit, et j'en suis content au vue de mon expérience en codage VBA.

Mais ici, je me heurte à deux soucis qui sont au delà de mes compétences.

Je vous joindre mon fichier, qui est incomplet. mais j'ai retirer de nombreuses informations par soucis de confidentialité.

1) Mon premier problème est le suivant:

Comme vous pouvez le constater je rempli mon tableau de la feuille "data" avec les infos de la deuxième feuille. Mon soucis réside au niveau de la colonne G de la feuil1 et la colonne C de la feuil2. Vous voyez des références les premières sont pour Whey Cream et les deuxièmes pour Sweet Cream. Je souhaiterai que mon tableau en feuil1 remplisse automatiquement ça. Mais niveau code, je suis un peu perdu.

A chaque fois je reprennais une info sur la ligne et a une colonne donnée. Mais ici, je devrais lui dire que pour les X premiers nombre c'est Whey Cream et pour le reste c'est Sweet. De plus, l'info n'est pas a aller rechercher dans la même ligne que mes infos, mais dans le "titre".

Ici, je suis perdu, je ne vois pas du tout. Je n'ai même pas une idée de code qui pourrais résoudre mon problème....

2) Je réalise une boucle While dans la Feuil2. Dans mon cas, je la fait 30 fois parce que ça sera théoriquement suffisant. Mais de semaine en semaine ça change parfois, il est suffisant de faire 10 tour, parfois 20, ou 15.

Mon souhait, serait de stopper ma boucle directement après le dernier nombre à 6 chiffre.

Je pensais couper après une espace vide. Mais entre les premiers nombre et deuxième nombre, ça ne va pas parce qu'il y'a déjà un espace vide.

Toutes idées est bonne à prendre.

3) Je pense avoir ma réponse pour cette question, mais avoir un avis d'experts est bon à prendre.

Je souhaite rendre mon code plus rapide et plus robuste.

Dans le cas de ma boucle While, je vais chercher une valeur dans la feuil2 et va la copier dans la feuil1. Je répète l'opération pour toutes les données.

Je suppose que c'est beaucoup plus rapide, d'aller chercher toutes les valeurs dans la feuil2, les enregistrer dans les variables. Aller sur la feuil1 et inscrire toutes les variables ou elles doivent se situer.

Ça parait évident, et je trouve inutile de vous poser la question.

Mais si vous avez aussi d'autres infos à partager. Si vous voyez à certains endroit des incohérence de code je suis preneur pour m'améliorer.

Voila, c'est un long poste. Je n'attend pas forcément des réponses toutes faites, ou il suffit que je copie-colle. Mais des idées, des propositions et surtout des explications que je puisse comprendre ce que je fais et puisse m'améliorer.

En vous remerciant d'avance pour votre lecture et vos réponses.

Maxime

bonjour,

Ton fichier corrigé en pièce jointe.

Si pas assez explicite tu demandes...

A+

76gerday-vg.xlsm (37.91 Ko)

Bonjour,

Un tout grand merci, super. Ça marche même mieux qu'espéré ^^.

J'ai juste corriger une de mes erreurs dans les variables. Je répétais tous Tank_Clean et Tank_time. Mais bon ça c'était ma faute

Deux trois questions (plus par info et compréhension):

1) Pourquoi :

   Set WsS = Worksheets("Macro BallyRagget") 'Feuille Source
   Set WsC = Worksheets("Data") 'Feuille Cible

Ça permet d'augmenter la rapidité du code, plutôt que de répéter à chaque fois feuil.Activate?

2) J'ai du mal à saisir comment fonctionne:

AmfType = IIf(Left(.Cells(J - 1, 2), 3) = "ORD", RTrim(Left(.Cells(J - 1, 3), 11)), AmfType)

Je ne connais déjà pas le "IIF".....

et aussi le "ORD"

et pour les "Left", je pensais au trois premières lettres en partant de la gauche et pour l'autre les 11. mais ça correspond pas non plus. La longueur "Whey Cream" ou "Sweet Cream" on a 10 et 11 avec l'espace.....

Mais sinon le reste oui c'est très clair.

Je verrai à l'utilisation, si je vois des problèmes qui surviennent mais là, comme ça , ça à l'air TOP

Bonjour,

Oui les Set c'est pour naviguer avec VBA sans avoir à sélectionner à chaque fois les différentes feuilles.

pour le reste du code tu as l'aide de VBA quand même... iif c'est l'équivalent de if then...else...

Je regarde à la ligne J-1 Si ça commence par "ORD" (ORDER NUMBER), c'est qu'on est sur une ligne d'entête donc je récupère la colonne d'a coté (les 11 premiers caractères) : coup de pot une fois sur 2 il peut y avoir un espace de trop à la fin. RTrim se charge d'éliminer cet espace en trop dans le cas de Whey Cream.

Ok ?

A+

Bonjour,

Oui super merci pour les explications.

Le code avec les Sweet et Whey cream était plus difficile, je comprenais pas pourquoi je le faire pour chaque valeur de J. Mais ça va j'ai pigé!!! Il prend la valeur de Sweet une fois au début, et puis après comme il est dans la condition "else" la valeur ne change pas et il l'a remet. jusqu'à arriver à celle pour Whey, ou il change la valeur AmfType et ainsi de suite. (Bon je me comprend .... )

Ouai nickel, c'était surtout la partie de code qui me posais problème, ou je ne voyais pas comment faire. Mais je retiens bien pour ré-appliquer peut-être pour un prochain code!!

Ouai nickel, franchement merci!!! A force d'utiliser le code, je verrai si c'est nickel ou si il reste des bugs, mais là tant que maintenant ça à l'air d'aller.

Merci beaucoup!!

Je peux passer à la suite maintenant!!!

Rechercher des sujets similaires à "optimisation code vba boucle while"