Traitement export fichier VBA

cheyenne63

XLDnaute Occasionnel
Bonjour
J’ai un export d’un logiciel que je n’arrive pas à traiter automatiquement.
Dans la feuille « DEPART », l’export proprement dit. Le nombre de lignes est bien sûr variable. Les couleurs, c’est moi qui les ai rajouté afin de visualiser mon souhait.
Dans la feuille « SOUHAIT », ce que je souhaiterai svp (en VBA svp)
Je résume :
Suppression des lignes jaunes
Suppression des lignes orange. J’ai changé la couleur car dans les lignes oranges, le premier chiffre va nous servir pour la suite.
Insertion d’une colonne (en colonne 1) avec comme N° le fameux chiffre à extraire dont je parle juste ci-dessus et à attribuer aux lignes correspondantes)
J’ai également mis des couleurs en feuille 2 pour un peu plus de clarté également.
J’espère que le fichier joint vous aidera à mieux comprendre mon besoin face à ces explications peu claires.

Merci d’avance
 

Pièces jointes

  • export compta.xlsm
    66.8 KB · Affichages: 32

Robert

XLDnaute Barbatruc
Repose en paix
Re : Traitement export fichier VBA

Bonjour Cheyenne, bonjour le forum,

Peut-être comme ça :

Code:
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim T1() As Variant 'déclare la variable T1 (Tableau 1)
Dim N As String 'déclare la variable N (Nombre)
Dim T2() As String 'déclare la variable T2 (Tableau 2)

Application.ScreenUpdating = False 'masque les raffraîchisements d'écran
Set O = Sheets("DEPART") 'définit l'onglet O
O.Columns(1).Insert 'insère une colonne vide (en premier)
O.Columns(1).NumberFormat = "00" 'définit le format de la colonne 1 (=A)
TV = O.Range("A1:I" & O.Cells(Application.Rows.Count, 2).End(xlUp).Row) 'définit le tableau des valeurs TV
ReDim T1(UBound(TV, 1)) 'redimiensionne le tableau T1 (autant de lignes que TV)
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    If TV(I, 3) = "" Then N = Left(TV(I, 2), 2) 'si la donnée ligne I, colonne 3 est vide, définit le nombre N
    T1(I) = N 'attribut la valeur N à la variable indexée T1(I)
Next I 'prochaine ligne de la boucle
O.Range("A1").Resize(UBound(T1), 1).Value = Application.Transpose(T1) 'renvoie dans A1 redimensionnée le tableau T1 transposé
O.Rows("1:4").Delete 'supprime les 4 première lignes
TV = O.Range("A1").CurrentRegion 'redéfinit le tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    For J = 1 To UBound(TV, 2) 'boucle sur toutes les colonnes J du tableau des valeurs TV
        If TV(I, J) = "" Then 'condition : si la données ligne I, colonne J du tableau des valeurs TV est vide
            ReDim Preserve T2(K) 'redimensionne le tableau T2
            T2(K) = I 'récupère le numéro de ligne I dans la variable indéxée T2(K)
            K = K + 1 'incrémente K
            Exit For 'sort de la boucle 2
        End If 'fin de la condition
    Next J 'prochaine colonne de la boucle 2
Next I 'prochaine ligne de la boucle 1
For I = UBound(T2, 1) To 0 Step -1 'boucle inversée sur toutes les lignes du tableau T2 (de la dernière à la première)
    O.Rows(T2(I)).Delete 'supprime la ligne
Next I 'prochaine ligne de la boucle
Application.ScreenUpdating = True 'affiche les raffraîchisements d'écran
End Sub