VBA vlookup compter et insérer extension

Fermé
lucieaup Messages postés 17 Date d'inscription jeudi 22 novembre 2012 Statut Membre Dernière intervention 8 avril 2020 - 9 août 2018 à 08:53
f894009 Messages postés 17222 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 8 janvier 2025 - 10 août 2018 à 10:06
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 :
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

Ensuite j'ai fait une macro qui supprime les lignes quand il y a des erreurs ( genre pas de lots précédents).

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


A voir également:

1 réponse

f894009 Messages postés 17222 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 8 janvier 2025 1 712
Modifié le 10 août 2018 à 10:08
Bonjour,

Probleme, chez moi, la procedure Finalbatch() met a jour Database pas au meme rang que vous et y a une erreur avec la formule en colonne C: #N/A, une valeur n'est pas dispo pour la formule !!!!!!

Une explication supplémentraire pour votre demande serait utile...
0