VBA - recherche avec plusieurs conditions
Bonjour,
Je fais appel à votre savoir. Après plusieurs recherches je n'ai pas réussi à trouver de quoi faire une macro.
J'ai un fichier avec une feuilles des données (commande, montant, ....), un autre onglet contenant une fiche.
Je souhaiterai une macro pour que la fiche soit remplie avec les infos nécessaires (montant, quantité, numéro spé).
Une fiche est lié à un numéro de commande. Un numéro de commande peut contenir plusieurs numéro spé. Si pas de numéro spé, alors il n'y a rien à reporter dans la fiche.
Il faudrait que pour chaque ligne parcourue par la macro qu'il y est marqué "fait" dans une colonne.
Ainsi à chaque fois que l'on lance la macro pour recherche la commande suivant, elle repart à la prochaine ligne sans marqué "Fait".
Je mets un fichier bricolé pour mieux expliquer le besoin.
Cela fait plusieurs jours que je me creuse la tête et je bloque vraiment. Si vous pouvez m'aider ce serait vraiment super.
Merci.
bonjour
c'est faisable avec une matricielle qui ira chercher en fonction d'une reference, ou alors en vba
mais pour mettre au point ,il faut imperativement joindre une piece jointe bien representative de ton fichier
bon....... en attendant(la pj) tu peux toujours filtrer ou un TCD en prenant comme critere le n° de client
cordialement
tulipe_4 a écrit :bonjour
c'est faisable avec une matricielle qui ira chercher en fonction d'une reference, ou alors en vba
mais pour mettre au point ,il faut imperativement joindre une piece jointe bien representative de ton fichier
bon....... en attendant(la pj) tu peux toujours filtrer ou un TCD en prenant comme critere le n° de client
cordialement
Bonjour Tulipe,
Merci de t'intéresser à mon blocage. Le fichier que j'ai mis en pièce jointe est représentatif de mon fichier. L'onglet CRA contient les données que je veux récupérer pour alimenter l'onglet 'Modèle'. Dans ma tête je voulais faire deux macro. Une qui recherche un numéro de commande non traité pour récupérer toutes les infos avec les numéros spé liés à ce numéro de commande. Une fois les infos (j'ai essayé de précisé dans les fichiers quelles infos étaient nécessaires) récupérées, une deuxième macro pour transformer la fiche en PDF.
Sur le fichier que j'ai mis en pièce jointe, onglet 'Modèle' j'ai détaillé les besoins.
Si cela ne te semble pas clair je détaillerai plus.
D'avance merci.
Cordialement.
Bonjour,
J'ai essayé d'avancer sur mon code, qui marche à peu près mais par moment on n'a l'impression qu'il perd pied.
cependant que je fais du pas à pas cela semble ok.
Pouvez vous m'aider à le fiabiliser ?
pou rappel le besoin est de relever des données pour remplir une fiche (un numéro de commande par fiche), puis d'en faire un PDF, puis de passer au prochain numéro de commande en marquant chaque ligne. Chaque numéro de commande identique doit être contenu dans la même fiche. Ce que j'appelle fiche et juste un pseudo tableau sur excel que je souhaite editer en PDF à chaque numéro de commande.
Option Explicit
' l'ojectif de cette macro est de récupérer pour un même numéro de commande tous les numéros spé qui y sont liés. Le mois est défini par une liste
' de choix dans l'onglet 'Modèle'
Sub Suivant()
Dim cmois As Date
Dim i As Integer
Application.ScreenUpdating = False
' tri croissant colonne K
ActiveWorkbook.Worksheets("CRA").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("CRA").AutoFilter.Sort.SortFields.Add Key:=Range( _
"K2:K33335"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("CRA").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A3").Select
' delete donnés dans la fiche de l'onglet 'modèle'
Sheets("Modèle").Select
Range("S13:AI15").Select
Selection.ClearContents
Range("J22:R25").Select
Selection.ClearContents
Range("A36:AI49").Select
Selection.ClearContents
'choix du mois
cmois = Range("AT3").Value
If "42464" = cmois Then
GoTo avr
Else
Range("AR3").Select
Exit Sub
' code à faire pour chaque mois
avr:
Dim derln As Long
Dim stat As String
Dim lncom As Long
'repère 1er ligne de la fiche onglet 'Modèle
lncom = 36
'repère 1er ligne vide onglet 'CRA' et statut de la ligne
Sheets("CRA").Activate
Suite:
If Range("AX3") = "" Then
derln = 3
Else
derln = Range("AX2").End(xlDown).Row + 1
End If
If Range("K" & derln) <> "" Then
Range("AX" & derln) = "Vu"
Else
'mesage si toutes le lignes (avec numéro de commande) ont été vues
MsgBox "fin du cra"
Exit Sub
End If
If Range("K" & derln) = Sheets("Modèle").Range("J22") Then
If Range("AU" & derln) <> "" Then
GoTo SAP
Else: GoTo Suite
End If
End If
SAP:
If Range("AU" & derln) = "" Or Range("A" & derln) = "N" Then
GoTo Suite
Else
RE:
Sheets("CRA").Range("K" & derln).Copy
Sheets("Modèle").Range("J22").PasteSpecial
Sheets("CRA").Range("F" & derln).Copy
Sheets("Modèle").Range("S13").PasteSpecial
Sheets("CRA").Range("AU" & derln).Copy
Sheets("Modèle").Range("AD" & lncom).PasteSpecial
Sheets("CRA").Range("L" & derln).Copy
Sheets("Modèle").Range("P" & lncom).PasteSpecial
Sheets("CRA").Range("AT" & derln).Copy
Sheets("Modèle").Range("T" & lncom).PasteSpecial
Sheets("CRA").Range("AW" & derln).Copy
Sheets("Modèle").Range("X" & lncom).PasteSpecial
Sheets("CRA").Range("AX" & derln) = "Créé"
derln = derln + 1
lncom = lncom + 1
If Sheets("Modèle").Range("J22") = Sheets("CRA").Range("K" & derln) And Sheets("CRA").Range("AU" & derln) <> "" Then
GoTo RE
Else
If Sheets("Modèle").Range("J22") = Sheets("CRA").Range("K" & derln) Then
GoTo Suite
Else
MsgBox "Fiche navette prête"
End If
End If
End If
End If
End SubD'avance merci.
Cordialement.
avec le fichier c'est mieux