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 Function

voir 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

Rechercher des sujets similaires à "cherche chaine variable"