• Initiateur de la discussion Initiateur de la discussion famu
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

famu

XLDnaute Occasionnel
Bonjour à tous,
j'ai besoin de votre aide...
Je dois renseigner les quantités produites pour chaque code, chaque jour et à chaque pause.
J'ai, dans le fichier joint, fait une formule avec "RechercheV" qui fonctionne mais qui sera beaucoup trop lourd car le nombre d'articles à rechercher est trop important (le fichier joint est un extrait).
Pouvez-vous m'aider ?
J'ai essayé avec une boucle For i et For j Next i Next j mais... 🙁
Merci,
Famu
 

Pièces jointes

Bonsoir Famu,
J'ai fait cette macro qui je pense répond aux besoins.
Cette macro est à mettre dans un Module (insertion Module) et coller la macro
Bon finalement je mets le fichier aussi , on vois le résultat de la macro
Bruno
VB:
Sub RECAPsemaine()
With Feuil4
bas = .[C65000].End(3).Row
For lig = 2 To [A65000].End(3).Row Step 2
If Cells(lig, 1) = "" Then lig = lig + 2
code = Cells(lig, 1)
For col = 5 To 23 Step 3
dd = Cells(1, col)
vu = 0
For lg = 2 To bas
If .Cells(lg, 3) = dd And .Cells(lg, 5) = code Then
If vu = 0 Then Cells(lig + 1, col) = .Cells(lg, 9)
If vu = 1 Then Cells(lig + 1, col + 1) = .Cells(lg, 10)
If vu = 2 Then Cells(lig + 1, col + 2) = .Cells(lg, 11): Exit For
vu = vu + 1
End If
Next
Next
Next
End With
End Sub
 

Pièces jointes

Re-bonsoir Bruno,
J'ai ouvert votre fichier avec mon téléphone (pas de PC avec moi pour le moment). Ça a l'air de répondre à mon besoin. Franchement, je ne vois pas comment j'aurais pu faire un code pareil ! Je vais l'étudier pour le comprendre. À bientôt.
 
Dernière édition:
Voici le code documenté au max
VB:
Sub RECAPsemaine()
'3 boucles imbriquées
'1ère boucle on prend le N°article
'2ème boucle on passe 7 fois sur les dates pour l'article
'3ème boucle on cherche en Programme
'les boucles 2 et 3 sont répétées autant de fois qu'il y a de code
With Feuil4 'c'est la Base un . avant indique c'est avec Base
'voir en fenêtre vba projet   Feuil4(Base)  si on renomme l'onglet on plante pas la macro
bas = .[C65000].End(3).Row ' trouve derniere ligne de Base col C
For lig = 2 To [A65000].End(3).Row Step 2 'boucle sur programme de 2 à derlig de col A de 2 en 2
'c'est le 1er For qui va lire jusqu'à Next lig et répété autant qu'il y a d'articles
If Cells(lig, 1) = "" Then lig = lig + 2 'si pas de N°code on saute de 2
code = Cells(lig, 1) 'code est le N°article
For col = 5 To 23 Step 3 ' boucle sur les dates de col 5 à 23 de 3 en 3
dd = Cells(1, col) 'dd est la date "date" est un mot clé VBA ne pas utiliser en variable
vu = 0 'on remets la variable à 0 avant de passer à la boucle lg
For lg = 2 To bas ' on boucle sur Programme
If .Cells(lg, 3) = dd And .Cells(lg, 5) = code Then 'test si bonne date et bon code (fin du If à End If)
'si on passe ici c'est que dd et code sont trouvé
If vu = 0 Then Cells(lig + 1, col) = .Cells(lg, 9) 'pause1   (tout sur même ligne pas de End If)
If vu = 1 Then Cells(lig + 1, col + 1) = .Cells(lg, 10) 'pause2
If vu = 2 Then Cells(lig + 1, col + 2) = .Cells(lg, 11): Exit For 'pause3
vu = vu + 1 'on incrémente vu
'dans la boucle quand il trouve 1ere fois vu=0   2ème fois vu=1 3ème=2
'3ème fois je fais quitter la boucle'on a les 3 pauses
End If 'fin du If
Next lg
Next col
Next lig
End With 'fin du with
End Sub
Bruno
 
Bonjour Bruno,
Un grand grand merci pour la documentation du code. Je m'y retrouve un peu mieux.
Je ne l'ai pas encore testé mais difficilement de faire plus court je pense. Je suis certain qu'il ne va pas alourdi mon fichier et c'était super important.
Lundi je teste !
À bientôt,
Francis
 
Bonsoir Bruno,
J'ai testé le fichier Test et il manque des quantités. Par exemple, pour l'article 77190224 il manque 26,99 Qtx.
J'ai essayé de trouver le problème mais je bloque.
Par contre, j'ai addapté votre code dans mon fichier origine et cela fonctionne mais avec la même erreur.
Bien à vous,
Francis
 

Pièces jointes

Hello,
Trouvé . . .
Ce code n'a pas de pause1 cela me décalait tout vu=0 n'était pas en pause1 mais en pause2 puisque je le trouve 1ere fois en pause2 et suis plus en bonne colonne
Bon je procède autrement je teste si la valeur est en col 9 ou 10 ou 11 c'est m^me plus facile.
Bruno
VB:
Sub RECAPsemaine()
With Feuil4
bas = .[C65000].End(3).Row
For lig = 2 To [A65000].End(3).Row Step 2
If Cells(lig, 1) = "" Then lig = lig + 2
code = Cells(lig, 1)
For col = 5 To 23 Step 3
dd = Cells(1, col)
For lg = 2 To bas
If .Cells(lg, 3) = dd And .Cells(lg, 5) = code Then
If .Cells(lg, 9) <> "" Then Cells(lig + 1, col) = .Cells(lg, 9)
If .Cells(lg, 10) <> "" Then Cells(lig + 1, col + 1) = .Cells(lg, 10)
If .Cells(lg, 11) <> "" Then Cells(lig + 1, col + 2) = .Cells(lg, 11): Exit For
End If
Next
Next
Next
End With
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
269
Réponses
3
Affichages
125
Réponses
4
Affichages
579
Réponses
5
Affichages
477
Réponses
7
Affichages
432
Réponses
2
Affichages
104
Retour