Microsoft 365 Problème Exit sub

omario1995

XLDnaute Nouveau
Bonjour à tous,

j’espère que vous allez bien,j'ai un problème au niveau de l'emplacement du "exit sub" dans ma macro.

j'ai fait une macro qui me prend juste les lignes dont j'en avais besoin et les mettre sous forme de tableau toujours dans une autre feuille.

je veux ajouter une condition par exemple si la case E9 ="75L" (feuille1 ) sortez de la macro sinon applique la macro et j’arrive plus .

Voila ma macro:


Code:
Sub REPORTING_UM_BLOCS()





Dim mot_clef3 As String

Dim mot_clef As String

Dim mot_clef1 As String

Dim mot_clef2 As String

Dim derniere_ligne As Long

Dim ligne_en_cours As Long




Dim X As Long

Dim Z As Long

Dim A As Long


Dim i As Integer

Dim N As Long


Dim B As Long

Dim Y As Long

Dim Q As Long

Dim R As Long

Dim P As Long

Dim M As Long

Dim W As Long

Dim E As Long

Dim L As Long


Dim ws_1 As Worksheet

Dim ws_2 As Worksheet

Dim ws_3 As Worksheet

Dim ws_4 As Worksheet




Set ws_1 = Worksheets("Suivi Dispo")

Set ws_2 = Worksheets("Reporting")

Set ws_3 = Worksheets("Data Dispo ")

Set ws_4 = Worksheets("UM_BLOCS")


If Feuil1.range("E9") = "75L" Then


Exit Sub


else



If Worksheets("Suivi Dispo").range("J1").Value = "14/04/2022" Then


If Worksheets("Suivi Dispo").range("M1").Value = "Matinée" Then


Feuil1.range("B8:T113").Copy

Feuil2.range("A3").PasteSpecial xlPasteValuesAndNumberFormats

Feuil2.range("A3").PasteSpecial xlPasteFormats


mot_clef = "z50"

mot_clef1 = "VB2N"

mot_clef2 = "loc"



derniere_ligne = ws_2.Cells(Rows.Count, 1).End(xlUp).Row

For ligne_en_cours = derniere_ligne To 4 Step -1

If InStr(UCase(ws_2.Cells(ligne_en_cours, 7)), UCase(mot_clef)) < 1 And InStr(UCase(ws_2.Cells(ligne_en_cours, 7)), UCase(mot_clef1)) < 1 And InStr(UCase(ws_2.Cells(ligne_en_cours, 7)), UCase(mot_clef2)) < 1 Then

ws_2.Cells(ligne_en_cours, 1).EntireRow.Delete



End If

Next


Feuil2.Columns("C:C").Delete Shift:=xlToLeft

Feuil2.range("M3").Value = "Info Rames"

Feuil2.range("N3").Value = "Info Loc"




Else

derniere_ligne = ws_2.Cells(Rows.Count, 1).End(xlUp).Row

X = derniere_ligne + 1

Feuil1.range("B9:T113").Copy

Sheets("Reporting").Cells(X, 1).PasteSpecial xlPasteValuesAndNumberFormats

Sheets("Reporting").Cells(X, 1).PasteSpecial xlPasteFormats


mot_clef = "z50"

mot_clef1 = "VB2N"

mot_clef2 = "loc"


derniere_ligne = ws_2.Cells(Rows.Count, 1).End(xlUp).Row


For ligne_en_cours = derniere_ligne To X Step -1

If InStr(UCase(ws_2.Cells(ligne_en_cours, 7)), UCase(mot_clef)) < 1 And InStr(UCase(ws_2.Cells(ligne_en_cours, 7)), UCase(mot_clef1)) < 1 And InStr(UCase(ws_2.Cells(ligne_en_cours, 7)), UCase(mot_clef2)) < 1 Then

ws_2.Cells(ligne_en_cours, 1).EntireRow.Delete


End If

Next



derniere_ligne = ws_2.Cells(Rows.Count, 1).End(xlUp).Row

W = derniere_ligne


Feuil2.range("C" & X & ":C" & W).Delete Shift:=xlToLeft


End If

end if

end if

et merci pour votre aide
 
Dernière modification par un modérateur:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Omario,
Par pitié utilisez les balises </> ( à droite de l'icone GIF ) c'est nettement plus lisible.

La ligne :
VB:
If Feuil1.range("E9") = "75L" Then
    Exit Sub
endif
est correcte. Donc probablement E9 ne contient pas 75L.
( d'où l'utilité d'un fichier test )
Mais si c'est le même fichier utilisé que : https://www.excel-downloads.com/threads/tri-des-lignes.20066689/
alors E9 affiche 75L mais contient uniquement 75. Donc le code pourrait être pour vérifier :
VB:
If Feuil1.Range("E9") Like "*75*" Then Exit Sub

Un p'tit fichier test ? ;)
 

omario1995

XLDnaute Nouveau
Bonjour tout le monde,

j’espère que vous allez bien,j'ai fait une macro qui va me comparer les cases dans 2 tableaux qui existe dans 2 feuilles différentes,s'ils sont identiques c'est bon sinon la case du 2 eme tableau va prendre la valeur de la case du premier.

VB:
U = ws_2.Cells(Rows.Count, 1).End(xlUp).Row


Do Until K > U


For S = 9 To 113
For K = 40 To U


If Feuil1.range("B" & S) = Feuil2.range("A" & K) And Feuil1.range("C" & S) = Feuil2.range("B" & K) Then



For i = 5 To 20
For j = 3 To 18

If Feuil1.Cells(S, i).Value <> Feuil2.Cells(K, j).Value Then
Feuil2.Cells(K, j).Value = Feuil1.Cells(S, i).Value

End If

i = i + 1

Next

Next

End If
Exit Sub
Next
Next


Loop

.... (reste du code)
Du coup j'ai de doutes que j'ai mal placé les "NEXT" , "EXIT SUB" et "END IF".

je vais vous expliquer ce que veux lors de l’exécution de ma macro.

dans ce bloc:

For i = 5 To 20
For j = 3 To 18

If Feuil1.Cells(S, i).Value <> Feuil2.Cells(K, j).Value Then
Feuil2.Cells(K, j).Value = Feuil1.Cells(S, i).Value

End If

ma macro joue sur toutes les cases de la première ligne.

et dans ce bloc:

For S = 9 To 113
For K = 40 To U


If Feuil1.range("B" & S) = Feuil2.range("A" & K) And Feuil1.range("C" & S) = Feuil2.range("B" & K) Then
....

ici la macro applique la 2 eme condition "IF" sur toutes les lignes du tableau.

j'ai mis le "END SUB" afin que si la première "IF" est vrai la macro continue à exécuter l'instruction sinon

elle doit basculer à la prochaine instruction (reste du code).
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Omario,
il est important d'indenter votre code pour le rendre plus lisible avec des tabulations : Chaque IF doit être en face d'un End IF, Chaque For devant un Next ( pour les Next précisez la variable ) :
1650379865313.png

Cela pourrait donner :
VB:
Sub Essai()
    U = ws_2.Cells(Rows.Count, 1).End(xlUp).Row
    Do Until k > U
        For S = 9 To 113
            For k = 40 To U
                If Feuil1.Range("B" & S) = Feuil2.Range("A" & k) And Feuil1.Range("C" & S) = Feuil2.Range("B" & k) Then
                    For i = 5 To 20
                        For j = 3 To 18
                            If Feuil1.Cells(S, i).Value <> Feuil2.Cells(k, j).Value Then
                                Feuil2.Cells(k, j).Value = Feuil1.Cells(S, i).Value
                            End If
                            i = i + 1
                        Next j
                    Next i
                Else
                    Exit Sub
                End If
            Next k
        Next S
    Loop
End Sub
Par contre je n'ai pas compris le End sub. Vous voulez sortir de la macro si le IF est faux ?
Je l'ai mis dans un Else, mais pas sur que cela soit ce que vous souhaitez.
Mais c'est plus lisible car mieux architecturé.
 

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh