Bonjour à tous,
Je vous contacte car je bloque sur une de mes macros. j'ai déja bien avance je voudrais juste fair eune extension mais je n'y arrive pas.
Je vais essayer d'être explicite:
J'ai une feuille nommée "ZPOCL" sur laquelle j'ai une compilation de données. Dans la colonne X j'ai des numéros de lots et dans la colonne Ac j'ai les numéros précédent (plusieurs séparés par un tiret). J'ai réussi à aller chercher les batchs terminaux,, c'est à dire ceux qui ne sont pas dans la colonne précédents, à les mettre sur une feuille nommée "database" du même classeur et ensuite à aller chercher leur composants et ajouter le nombre de lignes correspondant au nombre de lots précédents avec ce code qui fonctionne :
Ensuite j'ai fait une macro qui supprime les lignes quand il y a des erreurs ( genre pas de lots précédents).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 Option Explicit Public Const FDB = "Database" Public Const lidebFDB = 4 Public Const coBatchFDB = "A" Public Const coPreviousBatchFDB = "B" Public Const FZP = "ZPOCL" Public Const lidebFZP = 2 Public Const coBatchFZP = "X" Public Const coPreviousBatchFZP = "AC" Public Const sep = "-" 'chercher les batchs terminaux Sub FinalBatch() Dim lifinFZP As Long, liFZP As Long, valeur Dim b, pb, tpb, k As Long, liFDB As Long Application.ScreenUpdating = False ' init ligne FDB liFDB = lidebFDB With Sheets(FZP) ' derniere ligne remplie col X lifinFZP = .Columns(coBatchFZP).Find("*", , , , xlByColumns, xlPrevious).Row ' boucle sur lignes depuis la 2eme jusqu'à la dernière For liFZP = lidebFZP To lifinFZP ' batch b = .Range("X" & liFZP) ' si valeur n'existe pas dans AC If Application.WorksheetFunction.CountIf(.Columns(coPreviousBatchFZP), b) = 0 Then ' previous batch correspondnat pb = .Range(coPreviousBatchFZP & liFZP) ' decoupage de b selon sep tpb = Split(pb, sep) ' boucle sur le nombre de pb dans tpb > affichage dans FDB de b et des pb For k = 0 To UBound(tpb) Sheets(FDB).Range(coBatchFDB & liFDB).Value = b Sheets(FDB).Range(coPreviousBatchFDB & liFDB) = tpb(k) liFDB = liFDB + 1 Next k End If Next liFZP End With End Sub
Maintenant je voudrais faire la même chose mais pour les lots que j'ai deja référencés. C'est à dire ceux que je viens de mettre dans la colonne B de mon onglet database. Aller chercher leur composants dans l'onglet "ZPOCL" en colonne AC et en mettre autant que necessaire dans la colonne D de mon onglet "database" en recopiant les valeurs du dessus dans les ligne sinsérées pour les colonnes A, B et C.
A priori c'est la même macro que plus haut sauf qu'au lieu d'aller chercher les composants dans la feuille ZPOCL elle prend ceux qui sont mentionnés dans la colonne B mais je n'y arrive pas ca bug qqpart.
Je met le fichier en pièce jointe si ca peut aider, j'ai supprimé les lignes parce que normalement j'en ai plus de 40 000 et ca fait un peu lourd c'est donc une version allégée, pas la peine de sortir les erreurs sur celle la.
Est ce que quelqu'un pourrait m'aider?
https://www.cjoint.com/c/HHjgX7aAjGq
merci
Partager