Recherche Dossier suivant/précédent avec critères
Bonjour le forum,
J'ai besoin de votre aide sur une macro de recherche, j'ai plus de cheveux
Alors, en tout état de cause tout est expliqué dans le fichier, mais j'aimerai à l'aide d'un bouton, trouver le nom du dossier suivant, sur la feuille où ils sont enregistrés.
Le problème est que les dossiers peuvent être trier selon les 3 critères suivants :
- le type ;
- l'auditeur ;
- et la provenance.
J'aimerai, que si c'est critères ne sont pas renseignés, ils ne bloquent pas la recherche et qu'ils soit pris en compte s'ils sont renseignés.
Ci-après le code :
Sub Bouton3_Cliquer()
'renseignement des variables textes
Dim doss, typ, aud, prov, ndoss As String
ndoss = ""
typ = Range("C6").Value
aud = Range("C9").Value
prov = Range("C12").Value
doss = Range("O2").Value
'attribution des valeurs de base des variables entiers
Dim i, n As Integer
i = 2
n = Worksheets("Dossiers").Range("X1").Value + 1
'Recherche du numéro de ligne + 1 du dossier actuel
While Worksheets("Dossiers").Range("A" & i) <> doss
i = i + 1
Wend
i = i + 1
'Si la recherche à atteint la fin de la feuille, on repart à 0
If i = n Then
i = 2
End If
'Ici, tant que ndoss est égal à rien, i = i + 1 sinon soit les critères sont nuls, soit remplis
'C'est à ce niveau là que le fichier plante
While ndoss = ""
If typ = "" Or Worksheets("Dossiers").Range("B" & i).Value = typ Then
ElseIf aud = "" Or Worksheets("Dossiers").Range("C" & i).Value = aud Then
ElseIf prov = "" Or Worksheets("Dossiers").Range("O" & i).Value = prov Then
ndoss = Worksheets("Dossiers").Range("A" & i).Value
Else
If i = n Then
i = 2
End If
i = i + 1
End If
Wend
'Renseignement du nom du dossier suivant en C14
Range("C14").Value = ndoss
End Sub
Et le fichier :
Pour toute précision complémentaire n'hésitez pas, enfin là je vais manger
Merci d'avoir pris le temps de me lire.
Cdlt,
bonjour
proposition
Sub Bouton3_Cliquer()
'renseignement des variables textes
Dim doss, typ, aud, prov, ndoss As String
ndoss = ""
typ = Range("C6").Value
aud = Range("C9").Value
prov = Range("C12").Value
doss = Range("O2").Value
'attribution des valeurs de base des variables entiers
Dim i, n As Integer
i = 2
n = Worksheets("Dossiers").Range("X1").Value + 1
'Recherche du numéro de ligne + 1 du dossier actuel
While Worksheets("Dossiers").Range("A" & i) <> doss
i = i + 1
Wend
i = i + 1
'Si la recherche à atteint la fin de la feuille, on repart à 0
If i = n Then
i = 2
End If
'Ici, tant que ndoss est égal à rien, i = i + 1 sinon soit les critères sont nuls, soit remplis
'C'est à ce niveau là que le fichier plante
While ndoss = ""
If (typ = "" Or Worksheets("Dossiers").Range("B" & i).Value = typ) And _
(aud = "" Or Worksheets("Dossiers").Range("C" & i).Value = aud) And _
(prov = "" Or Worksheets("Dossiers").Range("O" & i).Value = prov) Then
ndoss = Worksheets("Dossiers").Range("A" & i).Value
Else
i = i + 1
If i = n Then
i = 2
End If
End If
Wend
'Renseignement du nom du dossier suivant en C14
Range("C14").Value = ndoss
End Sub
Bon beh rien à dire ! Sa fonctionne parfaitement.
Et je me disais bien qu'on pouvez grouper des conditions, trop cool
Merci à toi !
Re,
J'ai un dernier petit problème, comment pourrait-on, si la recherche ne trouve aucune correspondance, afficher un message qui prévient l'utilisateur ?
Car j'ai essayer avec des critères qui ne correspondent à aucun dossier, et le fichier plante dans ce cas là, ce qui est normal car la recherche ne trouve pas de fin.
Merci d'avance
Cdlt,
re-bonjour
Sub Bouton3_Cliquer()
'renseignement des variables textes
Dim doss, typ, aud, prov, ndoss As String, pdd
ndoss = ""
typ = Range("C6").Value
aud = Range("C9").Value
prov = Range("C12").Value
doss = Range("O2").Value
'attribution des valeurs de base des variables entiers
Dim i, n As Integer
i = 2
n = Worksheets("Dossiers").Range("X1").Value + 1
'Recherche du numéro de ligne + 1 du dossier actuel
While Worksheets("Dossiers").Range("A" & i) <> doss
i = i + 1
Wend
i = i + 1
'Si la recherche à atteint la fin de la feuille, on repart à 0
If i = n Then
i = 2
End If
pdd = i 'pdd point de départ pour la recherche
'Ici, tant que ndoss est égal à rien, i = i + 1 sinon soit les critères sont nuls, soit remplis
'C'est à ce niveau là que le fichier plante
Do While ndoss = ""
If (typ = "" Or Worksheets("Dossiers").Range("B" & i).Value = typ) And _
(aud = "" Or Worksheets("Dossiers").Range("C" & i).Value = aud) And _
(prov = "" Or Worksheets("Dossiers").Range("O" & i).Value = prov) Then
ndoss = Worksheets("Dossiers").Range("A" & i).Value
Else
i = i + 1
If i = n Then
i = 2
End If
If i = pdd Then 'on est revenu au point de départ -> pas de dossier trouvé
MsgBox "pas de dossier répondant aux critères"
Exit Do
End If
End If
Loop
'Renseignement du nom du dossier suivant en C14
If ndoss <> "" Then Range("C14").Value = ndoss
End Sub
Super merci ! Trop coool coool coooool