Microsoft 365 RESOLU Trie en VBA à partir d'une base

Bambi35

XLDnaute Occasionnel
Bonjour à tous
Je viens vers vous pour de l'aide.
Je cherche à partir des informations de la Feuille "Base" d'obtenir sur la feuille "Résultat "une liste dans l'ordre alphabétique en colonne "E" en passant par du VBA
Un premier trie sur la Feuille "Base" de la colonnes "N" pour enlever les "Appr"
Puis sur la colonne "B" enlever les ID commençant par "FH;HM;HA"
et transféré le résultat des colonnes "B;C;D;H;L;M;N;P" sur la feuille "Résultat" en colonnes "A;B;C;D;E;F;G;H"
avec un ordre alphabétique sur la colonne "E"
Je vous ai déjà demandé il y a quelque temps de l'aide sur d'autres sujets mais là je m'arrive pas.


Merci de votre aide


Bambi35
 

Pièces jointes

  • Trie.xlsx
    20.6 KB · Affichages: 7

Cousinhub

XLDnaute Barbatruc
Inactif
Bonjour,
Bonjour @vgendron
En complément...
Tu demandes à enlever les "HA" -> "Ha" ou "HA"?
Dans la colonne L (qui devient la colonne E ensuite), et qui doit faire l'objet du tri alphabétique, est-ce que les données sont toujours sous la forme V1, V12, V11, V2... -> et le tri, serait donc V1, V2, V11, V12?
PS, une requête power query serait tout aussi envisageable en lieu et place d'une macro, peut-être?
 

Bambi35

XLDnaute Occasionnel
Bonjour vgendron

1) Erreur de ma part c'est la feuille "Rapport" et non "Base"
2) Pour le bouton je n'ai pas de code associe car je n'arrive pas à créer le VBA
3) Pour le trie de la colonne "E" c'est sur la feuille "Résultat"
après le transféré des colonnes "B;C;D;H;L;M;N;P" de la feuille "Rapport" sur la feuille "Résultat" en colonnes "A;B;C;D;E;F;G;H"
Désolé d'avoir mal expliqué
Merci de ton retour

Bambi35
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Bambi, Vgendron, Bhbh, Chris,
Un essai avec ce que j'ai compris, et :
VB:
Sub Extraire()
    Application.ScreenUpdating = False
    Sheets("Résultat").[A:Z].Delete                                 ' Tout Résultat éffacé
    DL = Range("A65500").End(xlUp).Row                              ' Dernière ligne du tableau
    Range("A3:P" & DL).Copy                                         ' Copie tableau
    With Sheets("Résultat")
        .Select
        .[A1].Select
        ActiveSheet.Paste                                           ' Collage valeurs et formats
        f = "=SI(OU(GAUCHE(N2;4)=""Appr"";GAUCHE(B2;2)=""FH"";GAUCHE(B2;2)=""HM"";GAUCHE(B2;2)=""HA"");car(1);0)"                           ' Formule utilisée. Attention ajouter 1 aux colonnes pour compenser nouvelle colonne en A.
        With .Range("A2:A" & DL)                                    ' Plage où coller la formule en colonne A qui sera triée
            .FormulaLocal = f                                       ' Coller formule
            .EntireRow.Sort .Cells, xlDescending                    ' Tri pour regrouper et accélérer
            .SpecialCells(xlCellTypeFormulas, 2).EntireRow.Delete  ' Suppression des lignes concernées
        End With
        .[A:A].Delete Shift:=xlToLeft                               ' Effacement colonne formules
        Columns.AutoFit: Rows.AutoFit                               'Ajustement largeurs colonnes
        With ActiveSheet.UsedRange: End With                        'Ajustement barres de défilement
        .[A1].Select
    End With
End Sub
 

Pièces jointes

  • Trie.xlsm
    25.5 KB · Affichages: 4

Bambi35

XLDnaute Occasionnel
Bonjour,
Bonjour @vgendron
En complément...
Tu demandes à enlever les "HA" -> "Ha" ou "HA"?
Dans la colonne L (qui devient la colonne E ensuite), et qui doit faire l'objet du tri alphabétique, est-ce que les données sont toujours sous la forme V1, V12, V11, V2... -> et le tri, serait donc V1, V2, V11, V12?
PS, une requête power query serait tout aussi envisageable en lieu et place d'une macro, peut-être?
Bonjour bhbh
Cela peut être des Majuscules comme des Minuscules
Le résultat de la colonne "L" de la feuille "Rapport" après avoir fait
premier trie de la colonnes "N" pour enlever les "Appr"
Puis sur la colonne "B" enlever les ID commençant par "FH;HM;HA"
passe en colonne "E" de la feuille "Résultat"
et dernier action à faire sur cette colonne est le tri alphabétique
Pour la forme de la colonne "E" c'est des noms par la suite.
Merci de ton retour

Bambi35
 

Bambi35

XLDnaute Occasionnel
Bonjour Bambi, Vgendron, Bhbh, Chris,
Un essai avec ce que j'ai compris, et :
VB:
Sub Extraire()
    Application.ScreenUpdating = False
    Sheets("Résultat").[A:Z].Delete                                 ' Tout Résultat éffacé
    DL = Range("A65500").End(xlUp).Row                              ' Dernière ligne du tableau
    Range("A3:P" & DL).Copy                                         ' Copie tableau
    With Sheets("Résultat")
        .Select
        .[A1].Select
        ActiveSheet.Paste                                           ' Collage valeurs et formats
        f = "=SI(OU(GAUCHE(N2;4)=""Appr"";GAUCHE(B2;2)=""FH"";GAUCHE(B2;2)=""HM"";GAUCHE(B2;2)=""HA"");car(1);0)"                           ' Formule utilisée. Attention ajouter 1 aux colonnes pour compenser nouvelle colonne en A.
        With .Range("A2:A" & DL)                                    ' Plage où coller la formule en colonne A qui sera triée
            .FormulaLocal = f                                       ' Coller formule
            .EntireRow.Sort .Cells, xlDescending                    ' Tri pour regrouper et accélérer
            .SpecialCells(xlCellTypeFormulas, 2).EntireRow.Delete  ' Suppression des lignes concernées
        End With
        .[A:A].Delete Shift:=xlToLeft                               ' Effacement colonne formules
        Columns.AutoFit: Rows.AutoFit                               'Ajustement largeurs colonnes
        With ActiveSheet.UsedRange: End With                        'Ajustement barres de défilement
        .[A1].Select
    End With
End Sub
Bonjour B
C'est bien cela mais sur la feuille "Résultat" il ne faut que les informations des colonnes
"B;C;D;H;L;M;N;P" de la feuille "Rapport"
Merci encore

Bambi35
 

patricktoulon

XLDnaute Barbatruc
Bonjour
VB:
Sub test1()
Dim tablo, r As Range, I&
    Feuil2.[A4].Resize(1000, 100).Clear
   Application.ScreenUpdating = False
   With Feuil1
    Set r = Union(.[B4:b10000], .[C4:C10000], .[D4:D10000], .[H4:H10000], .[L4:L10000], .[M4:M10000], .[N4:N10000], .[P4:P10000])
    End With
  
    r.Copy Feuil2.[A4]
    With Feuil2.Range("A4").Resize(Feuil2.UsedRange.Rows.Count, Feuil2.UsedRange.Columns.Count)
        For I = .Rows.Count To 1 Step -1
            If UCase(.Cells(I, 1).Value) Like "[FM|HA|FH]*" Then .Cells(I, 1).EntireRow.Delete
        Next

        For I = .Rows.Count To 1 Step -1
            If Cells(I, 7) = "Appr" Then Cells(I, 1).EntireRow.Delete T
        Next

        .Sort key1:=Range("E4"), order1:=xlAscending, Header:=xlNo
    End With

End Sub
 

Discussions similaires

Statistiques des forums

Discussions
314 626
Messages
2 111 294
Membres
111 093
dernier inscrit
Yvounet