EXTRAIRE dans 2 colonnes des lignes

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour,
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

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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à

    0
    1. Utilisateur anonyme
       
      Bonsoir,
      Merci beaucoup mais j'ai une petite erreur 13


      que dois-je rectifier?
      encore merci pour ton aide

      A+
      Geoffroy
      0
    2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Déclare ta variable comme ceci:

      Dim nombre As String '2 caracteres à gauche


      ou

      Dim nombre As Variant '2 caracteres à gauche
      0
    3. Utilisateur anonyme
       
      Ok
      j'ai mis variant si non même erreur.
      Par contre pour voir les lignes extraites que dois-je modifier car là rien :)
      ça ne plante pas.
      si c'est possible de mettre les lignes extraites dans une autre feuille exemple "extraction"
      merci
      0
    4. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Voilà un classeur exemple à adapter:

      https://www.cjoint.com/c/IFlqpWIfopQ

      @+ Le Pivert
      0
    5. Utilisateur anonyme
       
      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
      0