Cherche chaine variable dans une autre chaine variable
Bonjour à tous,
Je cherche à générer un résultat si une chaine variable se trouve dans une autre chaine variable.
Je m'explique :
Si ma feuill1/cellule R3 contient comme chaine : Vendredi AM toutes les semaines Samedi AM toutes les semaines (cette chaine est variable est provient d'une ListBox)
et que ma feuill4/colonne "C" contient : Mardi PM tous les 15 jours Vendredi matin toutes les semaines (cette chaine est également variable et provient d'une autre ListBox))
Je voudrais que ma cellule feuill1/colonne "Y" renvoie comme résultat le contenu de la cellule feuill2/colonne "A" car les deux cellules contiennent "Mardi PM tous les 15 jours"
J'ai utilisé une rechercheV pour l'instant mais mon souci c'est que ça ne me donne qu'un résultat, et j'ai besoin d'obtenir mon résultat sous forme de liste reprenant toutes les possibilités
Je pense que je dois passer du VBA de toute façon mais j'ai testé avec la fonction InStrRev mais ça ne donne rien.
Pouvez vous m'aider ?
Un fichier valant mieux que 1000 discours le voici en pièce jointe ;)
PS : Mon but, ensuite, sera de rechercher le travailleur qui correspond à plusieurs critères, afin de faire "matcher"
La disponibilité client se retrouve dans la disponibilité travailleur + Si le mot repassage et/ou voiture et/ou chat et/ou chien se trouve dans la ligne client il se retrouve dans la ligne du travailleur et m'indique qui correspond à chacun de ces critères
Bonjour,
Pour la recherche des personnes en fonctions des disponibilités.
Sub Affectations()
Dim f1 As Worksheet, f2 As Worksheet
Dim i As Long, j As Long, DerLig_f1 As Long, DerLig_f2 As Long
Dim x As Range
Dim Dispo As Variant, Trouve As String
Application.ScreenUpdating = False
Set f1 = Sheets("Genval - Nouvelle demande")
Set f2 = Sheets("Disponibilités AM")
DerLig_f1 = f1.Range("A" & Rows.Count).End(xlUp).Row
DerLig_f2 = f2.Range("C" & Rows.Count).End(xlUp).Row
For i = 3 To DerLig_f1
With f2.Range("C3:C" & DerLig_f2)
Dispo = Split(Chr(10) & Cells(i, "R"), Chr(10))
For j = 1 To UBound(Dispo)
Set x = .Find(Trim(Dispo(j)), lookat:=xlPart)
If Not x Is Nothing Then
Deb = x.Address
Do
Trouve = Trouve & Chr(10) & f2.Cells(x.Row, "A") & ", " & f2.Cells(x.Row, "D") & " " & f2.Cells(x.Row, "E") & " " & f2.Cells(x.Row, "F") & " " & f2.Cells(x.Row, "G") & " " & f2.Cells(x.Row, "H")
Set x = .FindNext(x)
Loop While Not x Is Nothing And x.Address <> Deb
End If
Next
End With
f1.Cells(i, "Y") = Trouve
Trouve = ""
Next i
Set x = Nothing
Set f1 = Nothing
Set f2 = Nothing
End Sub
Cdlt
bonjour,
edit : bonjour Arturo83
une solution via une fonction personnalisée.
Function disponibles(creneaux, tableau)
creneau = Split(creneaux, vbLf) ' on isole chaque créneau
For Each r In tableau.Rows 'on parcourt le tableau ligne par ligne
If r.Cells(1, 1) = "" Then Exit For 'plus de nom dans le tableau
For i = LBound(creneau) To UBound(creneau) 'on vérifie chaque créneau de la ligne des disponibilités (tableau)
If InStr(r.Cells(1, 3), Trim(creneau(i))) > 0 Then dispo = dispo & r.Cells(1, 1) & ",": Exit For 'on trouve un match pour les disponibilités
Next i
Next r
If dispo <> "" Then dispo = Left(dispo, Len(dispo) - 1)
disponibles = Split(dispo, ",") 'on retourne un tableau
End Functionvoir exemple d'utilisation dans le fichier
Bonjour à tous les deux,
Un grand, grand merci, je suis restée bloquée 2 jours sur ça, maintenant grâce à vous je peux continuer.
C'est vraiment très précieux de pouvoir compter sur une communauté comme celle ci quand on ne s'en sort plus. J'aime chercher et trouver par moi même, mais parfois, quand on bloque plusieurs heures ou jours, c'est un vrai soulagement d'obtenir un coup de main.
Vous êtes parfaits.
Bonne journée, et encore merci
Bonjour,
Je suis de retour avec mon fichier.
J'ai bien avancé mais je suis bloquée sur quelque chose de similaire, j'ai essayé de repartir de vos 2 solutions mais je ne m'en sors manifestement pas.
La sélection des personnes disponibles selon les créneaux fonctionne très bien.
J'aimerais y intégrer une condition.
Les mots de la chaine présente dans la cellule de la colonne J de ma feuille disponibilités, en regard du nom du travailleur présent en colonne A doivent tous être présent dans la chaine de la cellule de la colonne AE de ma feuille nouvelle demande. (cela me permet d'évincer du résultat les travailleurs qui ne savent pas repasser alors qu'il y a du repassage de prévu, entre autre).
Si chaque mot (définissant les conditions du travailleur) n'est pas présent, ce travailleur ne sera pas repris dans la résultat de la formule Disponible que m'a gentiment construit H2SO4, même si ses disponibilités correspondent.
Je pense que je dois intégrer la condition dans cette formule mais je n'y arrive pas.
Pouvez-vous m'aider ?
Enfin, last but not least, je souhaiterais que la disponibilité sélectionnée en Z pour le travailleur repris en X, lorsque je cliquerai sur mon bouton placé, supprime automatiquement la disponibilité correspondante du travailleur dans la feuille disponibilité. C'est possible ?
Merci beaucoup, bonne après midi
Lorence