Vérification de conditions puis insertion d'un compteur

Fermé
noemie.der Messages postés 6 Date d'inscription mardi 23 février 2016 Statut Membre Dernière intervention 16 mars 2016 - 16 mars 2016 à 15:40
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 16 mars 2016 à 22:47
Bonjour,
Je suis en train d'écrire un programme dans lequel je souhaiterais insérer un compteur lorsqu'une condition est vérifiée. Jusque là, rien de bien sorcier vous me direz. Je souhaite compter le nombre de lignes d la feuille Ligne qui sont copiées vers la feuille Feuil1. On copie une ligne si elle correspond aux critères (Nom, emplacement, date de création, date de modification, auteur/propriétaire) renseignés sur la Feuille Feuil1. Le problème est que plusieurs conditions renseignées peuvent être vérifiées en même temps (ex : Nom + date de modification). Je ne veux pas compter et copier la même ligne plusieurs fois. Est-ce que quelqu'un a déjà été dans une situation similaire et a trouvé une solution ?
Merci d'avance pour votre aide.



Sub LancerRecherche()
    
    Dim MC1 As String
    Dim MC2 As String
    Dim MC3 As String
    Dim T As String
    Dim DCMin As Date
    Dim DCMax As Date
    Dim DMMin As Date
    Dim DMMax As Date
    Dim A As String
    Dim k As Long
    Dim j As Long
    Dim c As Long

     Worksheets("Feuil1").Activate

    MC1 = Sheets("Feuil1").Range("B3").Value 'Récupère ce qui a été entré dans la case 'Mot-clé 1' et le stocke dans la variable MC1
    MC2 = Sheets("Feuil1").Range("C3").Value 'Récupère ce qui a été entré dans la case 'Mot-clé 2' et le stocke dans la variable MC2
    MC3 = Sheets("Feuil1").Range("D3").Value 'Récupère ce qui a été entré dans la case 'Mot-clé 3' et le stocke dans la variable MC3
    T = Sheets("Feuil1").Range("B4").Value 'Récupère ce qui a été entré dans la case 'Type' et lestocke dans la variable T
    DCMin = Sheets("Feuil1").Range("C5").Value 'Récupère ce qui a été entré dans la case 'Date de création min' et le stocke dans la variable DCMin
    DCMax = Sheets("Feuil1").Range("E5").Value 'Récupère ce qui a été entré dans la case 'Date de création max' et le stocke dans la variable DCMax
    DMMin = Sheets("Feuil1").Range("C6").Value 'Récupère ce qui a été entré dans la case 'Date de modification min' et le stocke dans la variable DMMin
    DMMax = Sheets("Feuil1").Range("E6").Value 'Récupère ce qui a été entré dans la case 'Date de modification max' et le stocke dans la variable DMMax
    A = Sheets("Feuil1").Range("B7").Value 'Récupère ce qui a été entré dans la case 'Auteur' et le stocke dans la variable A
    c = 0
    
    If Sheets("Feuil1").Range("B3") = "" And Sheets("Feuil1").Range("C3") = "" And Sheets("Feuil1").Range("D3") = "" And Sheets("Feuil1").Range("C5") = "" And Sheets("Feuil1").Range("E5") = "" And Sheets("Feuil1").Range("E5") = "" And Sheets("Feuil1").Range("C6") = "" And Sheets("Feuil1").Range("E6") = "" And Sheets("Feuil1").Range("B7") = "" Then
    
        MsgBox "Veuilliez remplir au moins une case du tableau"
    
    End If
    
    Worksheets("Liste").Activate
    
    i = Sheets("Liste").Range("I1").Value
    For j = 1 To i 'j va parcourir la liste de tout les fichiers référencés précédemment
        'MOTS-CLE
       If Sheets("Liste").Range("A" & j).Value Like "*" & MC1 & "*" Then
            k = 18 + j
            Sheets("Liste").Range("A" & j & ":E" & j).Copy Sheets("Feuil1").Range("A" & k & ":E" & k) 'Remplit la k-ième ligne du tableau de résultat
            c = c + 1
            
    
        'TYPE
        ElseIf Sheets("Liste").Range("B" & j).Value Like "*T" Then 'Détecte si le type du j-ème fichier est celui saisi dans les critères de recherche
            k = 17 + j
            Sheets("Liste").Range("A" & j & ":E" & j).Copy Sheets("Feuil1").Range("A" & k & ":E" & k) 'Remplit la case Type du tableu de résultats
            Sheets(Feuil1).Range("B" & k).Value = T
            c = c + 1
        
        
        'DATE DE CREATION
        ElseIf Sheets("Feuil1").Range("C5") <> "" Or Sheets("Feuil1").Range("E6") <> "" Then '/!\ Si une des deux dates n'est pas remplie
            If DCMin >= DC Or DCMax <= DC Then
                Sheets("Liste").Range("A" & j & ":E" & j).Copy Sheets("Feuil1").Range("A" & k & ":E" & k) 'Remplit la case Date de création du tableu de résultats
                c = 1
            End If
        ElseIf Sheets("Feuil1").Range("C5") <> "" And Sheets("Feuil1").Range("E6") = "" Then 'Si uniquement la date min de création est renseignée
            If DCMin >= DC Then
                Sheets("Liste").Range("A" & j & ":E" & j).Copy Sheets("Feuil1").Range("A" & k & ":E" & k) 'Remplit la case Date de création du tableu de résultats
                c = c + 1
            End If
        ElseIf Sheets("Feuil1").Range("E6") <> "" And Sheets("Feuil1").Range("C5") = "" Then 'Si uniquement la date max de création est renseignée
            If DCMax <= DC Then
                Sheets("Liste").Range("A" & j & ":E" & j).Copy Sheets("Feuil1").Range("A" & k & ":E" & k) 'Remplit la case Date de création du tableu de résultats
                c = c + 1
            End If
        
        
        'DATE DE MODIFICATION
        ElseIf Sheets("Feuil1").Range("C6") <> "" And Sheets("Feuil1").Range("E6") <> "" Then 'Si les deux dates sont renseignées
            If DMMin >= DM Or DMMax <= DM Then
                Sheets("Liste").Range("A" & j & ":E" & j).Copy Sheets("Feuil1").Range("A" & k & ":E" & k) 'Remplit la case Date de modification du tableu de résultats
                c = c + 1
            End If
        ElseIf Sheets("Feuil1").Range("C6") <> "" And Sheets("Feuil1").Range("E6") = "" Then 'Si uniquement la date min de modification est renseignée
            If DMMin >= DM Then
                Sheets("Liste").Range("A" & j & ":E" & j).Copy Sheets("Feuil1").Range("A" & k & ":E" & k) 'Remplit la case Date de modification du tableu de résultats
                c = c + 1
            End If
        ElseIf Sheets("Feuil1").Range("E6") <> "" And Sheets("Feuil1").Range("C6") = "" Then 'Si uniquement la date max de modification est renseignée
            If DMMax <= DM Then
                Sheets("Liste").Range("A" & j & ":E" & j).Copy Sheets("Feuil1").Range("A" & k & ":E" & k) 'Remplit la case Date de modification du tableu de résultats
                c = c + 1
            End If
       
        
        'AUTEUR
        ElseIf Sheets("Liste").Range("E" & j).Value Like A Then 'Détecte si l auteur du j-ème fichier est celui saisi dans les critères de recherche
            k = 17 + i
            Sheets("Liste").Range("A" & j & ":E" & j).Copy Sheets("Feuil1").Range("A" & k & ":G" & k) 'Remplit la case Auteur du tableu de résultats
            c = c + 1
        End If
     
     Next
     
     Feuil1.Cells(15, 2).Value = j 'Nombre de résultats trouvés
     
     If c = 0 Then MsgBox "Aucun résultat ne correspond à votre recherche. Élargissez les recherches… (ex : supprimez des critères de recherche, rajoutez un auteur, augmenter la période…)"
     
     Worksheets("Feuil1").Activate 'Affiche la feuille de résultats
     
End Sub

1 réponse

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
16 mars 2016 à 22:47
Bonjour,

Je ne veux pas compter et copier la même ligne plusieurs fois

à partir du moment qu'une condition est remplie, tu ne vas pas passer sur le "ElseIf" suivant : où est ton problème ?
0