XL 2019 Recherche

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

  • Fichier Test.xlsx
    30.5 KB · Affichages: 16

youky(BJ)

XLDnaute Barbatruc
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

  • Fichier Test (2).xlsm
    37.8 KB · Affichages: 14

famu

XLDnaute Occasionnel
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:

youky(BJ)

XLDnaute Barbatruc
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
 

famu

XLDnaute Occasionnel
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
 

famu

XLDnaute Occasionnel
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

  • Fichier Test (2).xlsm
    36.2 KB · Affichages: 2

youky(BJ)

XLDnaute Barbatruc
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
 

Discussions similaires

Réponses
9
Affichages
381
Réponses
13
Affichages
652
Réponses
16
Affichages
455

Statistiques des forums

Discussions
312 074
Messages
2 085 066
Membres
102 770
dernier inscrit
mathieu.lemaitre