XL 2016 automatiser l’extraction de valeurs selon critere.

Mokhtar

XLDnaute Nouveau
Bonjour,

Vous serez-t-il possible de venir à mon aide à la résolution de mon problème.
Actuellement j’actualise la feuille ’’ SC’’ et sélectionne lignes, copies collés, transfère, trie supprime (lignes colonnes) .... certaines données sur la
feuille’’ A COMMANDER’’.
Je souhaiterai automatiser ces manipes par un seul bouton.
  • Ne seront concernées que les ligne ayant le critère « A COMMANDER » indiqué dans la colonne ‘’Suite à donner’’
  • Reporter les valeurs comme indiquées sur la feuille ‘’A COMMANDER’’ soit :
  • Désignation
  • Référence
  • Conditionnement
  • Qté à commander
  • Observations
  • Trie par ordre alphabétique des Désignations
  • Ignorer les lignes vides
Vous remercions par avance

Au plaisir de vous lire,
 

Fichiers joints

Roblochon

XLDnaute Occasionnel
Bonjour,

Avec la macro ci-dessous à coller dans un module VBA.
Si 'ignorer les lignes vides' voulais dire ignorer les lignes dont la colonne 'Qté à commander' est vide alors je vous laisse adapter la macro.
(Il suffit de modifier légèrement le test)

Pour le bouton, je vous laisse également le mettre en place.

VB:
Sub ACommander()
    Dim plage As Range
    Dim cDest As Range
    Dim tbl() As Variant
    Dim cpt As Integer
    Dim lig As Long, col As Long
    '
    ' Faire référence à ce classeur
    With ThisWorkbook
        '
        ' Détermination de la destination des données
        With .Sheets("A COMMANDER")
            Set cDest = .Range("A" & .Rows.Count).End(xlUp).Offset(1)
        End With
        '
        ' Détermination de la plage source des données
        With .Sheets("S.C")
            Set plage = .Range("A" & .Rows.Count).End(xlUp)
            Set plage = .Range(.Range("A8"), plage).Resize(, 11)
        End With
    End With
    '
    'Numéros des colonnes de données
    '       Désignation 1,Référence 2, Conditionnement 3, Qté à commander 10, Observations 11
    With plage
        '
        '   Extraction des données
        For lig = 1 To .Rows.Count
            If .Cells(lig, 9).Text = "A COMMANDER" Then
                cpt = cpt + 1
                ReDim Preserve tbl(1 To 5, 1 To cpt)
                tbl(1, cpt) = .Cells(lig, 1).Value
                tbl(2, cpt) = .Cells(lig, 2).Value
                tbl(3, cpt) = .Cells(lig, 3).Value
                tbl(4, cpt) = .Cells(lig, 10).Value
                tbl(5, cpt) = .Cells(lig, 11).Value
            End If
        Next
    End With
    '
    ' Transfert et tri des données dans la destination.
    ' Seules les nouvelles lignes seront triées.
    With cDest.Resize(cpt, 5)
        .Value = Application.Transpose(tbl)
        .Sort Key1:=.Cells(1, 1), Header:=xlNo
    End With

End Sub
Bonne soirée
 
Dernière édition:

Mokhtar

XLDnaute Nouveau
Merciiiii énormément Roblochon,
Vous m'enlevez un tres lourd soucis
Je l'ai installé. ça fonction très bien. Les lignes dans la colonne ne mentionnant pas 'A COMMANDER' sont ignorées.
Si la légère modif devrait avoir lieu, à quel niveau doit on intervenir?
Dans tous les cas recevez mes remerciements et bravo pour ce travail. Bravo!

Bien à vous,
 

Discussions similaires


Haut Bas