EXTRAIRE dans 2 colonnes des lignes
RésoluUtilisateur anonyme -
Comment faire en vb dans Excel pour extraire des lignes en recherchant sur 2 colonnes?

En colonne C « N°Semaine/Lot » les 2 premiers chiffres correspondent à la semaine de fabrication.
Je voudrais extraire les Noix et ROSETTE ( colonneB"Produit") ayant 7 semaines de moins que la semaine actuelle :Nous sommes en sem 24
Donc 24-7=17 donc extraire toutes les semaines commençant par 17 et inférieur de la colonneC"N°Semaine/Lot"
Et aussi extraire les Bœufs(colonne B "Produit") ayant 11 semaines de moins que la semaine actuelle :
Donc 24-11=13 donc tous les bœufs commençant par 13 et inférieur toujours en colonne C"semaine"
Merci
Cordialement
Geoffroy
1 réponse
L’objectif est d’extraire des lignes dans Excel via VBA en se basant simultanément sur deux critères : la colonne N°Semaine/Lot pour les semaines et la colonne Produit pour les libellés. Des approches préconisent de déduire 7 semaines pour Noix et ROSETTE et 11 semaines pour les Bœufs, en comparant les deux premiers chiffres de N°Semaine/Lot à une valeur dérivée de la semaine actuelle. Certaines propositions basculent les résultats vers une feuille distincte et utilisent des variables simples (InputBox, Left(Var,2), vérifications If) pour filtrer et copier les lignes correspondantes. En pratique, des améliorations sont suggérées pour éviter les doublons, gérer les casse et sécuriser les noms de feuilles, tout en offrant une extraction même lorsque des colonnes restent vides.
-
Bonjour,
En vba on boucle sur la colonne C et l'on met les résultats colonne F (a adapter):
Option Explicit Private Sub CommandButton1_Click() For_X_to_Next_Ligne End Sub Sub For_X_to_Next_Ligne() Dim FL1 As Worksheet, NoCol As Integer Dim NoLig As Long, Var As Variant Dim ns As Integer 'numero semaine Dim nombre As Integer '2 caracteres à gauche Dim result As Integer ns = NoSem(Now) Set FL1 = Worksheets("Feuil1") 'adapter nom feuille NoCol = 3 'lecture de la colonne C For NoLig = 2 To Split(FL1.UsedRange.Address, "$")(4) Var = FL1.Cells(NoLig, NoCol) result = ns - 7 nombre = Left(Var, 2) If nombre <= result Then If FL1.Cells(NoLig, NoCol - 1) = "Rosette" Or FL1.Cells(NoLig, NoCol - 1) = "Noix" Then FL1.Cells(NoLig, NoCol + 3) = "extraction 7" 'adapter colonne résultat End If End If result = ns - 11 If nombre <= result Then If FL1.Cells(NoLig, NoCol - 1) = "Boeuf" Then FL1.Cells(NoLig, NoCol + 3) = "extraction 11" 'adapter colonne résultat End If End If Next Set FL1 = Nothing End Sub Public Function NoSem(UneDate As Date) As Integer On Error Resume Next NoSem = CInt(Format(UneDate, "ww", vbMonday, vbFirstFourDays)) 'Verification du bug, reconnu par MS, sur Oleaut32.dll If NoSem > 52 Then If CInt(Format(UneDate + 7, "ww", vbMonday, vbFirstFourDays)) = 2 Then NoSem = 1 End If End Function
Voilà
-
-
-
-
-
Bonsoir,
et merci beaucoup pour ton aide mais j'ai un petit souci avec ta macro.
ci-joint le fichier
https://www.cjoint.com/c/IFnrj5zhMZs
j'ai ajouté une petite explication en espérant d'être clair
@+
Geoffroy
-
