Fonction de conversion d'une chaine de caractère en plage

12tomato.xlsm (64.68 Ko)

Bonsoir à tous,

Les habitués doivent commencer à me connaitre puisque je poste dorénavant chaque semaine Mais quel plaisir d'apprendre et de trouver d'autres passionnés de tableaux !

Ce soir et avec votre aide, je souhaite parvenir à convertir une chaine de caractères avec séparateur ";" en un array qui soit utilisable dans une MFC (et dans une formule).

J'ai décidé de partir sur une fonction personnalisée simple, sans erreur, mais inefficace : le déboggeur relève bien chaque data mais la MFC ne fait pas son job.

Problème de conversion de type String / Date ? Je réfléchis à la fonction Sequence que je n'ai jamais utilisé, a t elle un intérêt ? Changer complètement de stratégie d'approche pour solutionner mon objectif global ? Beaucoup de questions sans réponses :

Function GetFermetures(fournisseur)
'*** Fonction de lecture des jours de fermeture : chaine de caractères séparateur ";"
Dim ListeFermetures As String

    With [Fournisseurs].ListObjects("Tbl_frn")
        If Application.IsNumber(fournisseur) Then 'on utilise le paramètre numérique 0 qui fait référence au fournisseur Tomato
            On Error Resume Next
            ListeFermetures = .ListColumns("Fermetures").DataBodyRange( _
                            Application.Match(fournisseur, .ListColumns("Code FRN").DataBodyRange, 0) _
                            ).Value
            On Error GoTo 0
        Else 'ou bien on utilise directement le nom du fournisseur : Tomato
            On Error Resume Next
            ListeFermetures = .ListColumns("Fermetures").DataBodyRange( _
                            Application.Match(fournisseur, .ListColumns("Fournisseur").DataBodyRange, 0) _
                            ).Value
            On Error GoTo 0
        End If
    End With

    If Not ListeFermetures = "" Then GetFermetures = Split(ListeFermetures, ";")

End Function
getfermetures

Plus tard et avec la même fonction je souhaite pouvoir adjoindre ma listes des jours de fermetures à ma liste des jours fériés, dans une formule du type :

SERIE.JOUR.OUVRE.INTL(date_début; nombre_jours; [week_end]; Fériés & GetFermetures(Tomato))

où Fériés est une plage nommée (voir fichier joint) et GetFermetures la fonction perso développée ici.

Pouvez-vous m'aider s'il vous plait ?

Bonjour,

Essayez ceci:

=OU(B3=Fériés;CTXT(B3)=CTXT(GetFermetures(0)))

les valeurs sont converties en chaîne, ce qui encadre les dates avec des guillemets.

Cdlt

Bonjour Arturo83, aucun de ceci ne fonctionne :

    =CTXT(GetFermetures(0))

    =CTXT(GetFermetures(0);0;FAUX)

    =CTXT(GetFermetures(0);0;VRAI)

Afin d'augmenter le nombre de réponse à mon problème je souhaite modifier, si vous le permettez, l'axe de la réflexion.

La nouvelle problématique est de viser à la résolution de ceci :

=NB.JOURS.OUVRES.INTL("30/12/2024";"05/01/2025";1;[DateOff])

Si l'on remplace << [DateOff] = "01/01/2025" >> : OK

=NB.JOURS.OUVRES.INTL("30/12/2024";"05/01/2025";1;"01/01/2025")

Si l'on remplace << [DateOff] = "01/01/2025;02/01/2025" >> : ERREUR

=NB.JOURS.OUVRES.INTL("30/12/2024";"05/01/2025";1;"01/01/2025;02/01/2025")

Elément important : je ne veux pas utiliser une plage nommée (ou pas) pour compléter le paramètre [DateOff]

Des experts s'il vous plait ?

ok ceci fonctionne :

=NB.JOURS.OUVRES.INTL("30/12/2024";"05/01/2025";1;{"01/01/2025";"02/01/2025"})

Y'a plus qu'à trouver le code pour { et } et ma fonction perso fonctionnera (j'imagine).

Edit : c'est pas difficile, rien ne fonctionne

Je souhaite qu'une seule cellule contienne mes jours off avec séparateur point virgule : << 30/12/2024;31/12/2024 >> . J'ai tout essayé, rien n'y fait... Help

image

Bonjour Arturo83, aucun de ceci ne fonctionne :

    =CTXT(GetFermetures(0))

    =CTXT(GetFermetures(0);0;FAUX)

    =CTXT(GetFermetures(0);0;VRAI)
mais, où avez-vous mis ces formules? ma proposition de 4:49 était pour remplacer la 4ème condition des MFC, et chez moi, ça marche bien.

Etrange ca ne fonctionnait absolument pas dans mon fichier !

J'ai repris le fichier test posté sur ce forum et ca marche, puis mon propre fichier et ca marche ! Incroyable, c'est le même copié collé qu'il y a 2heures !

Merci ! Pouvez-vous m'expliquer le principe de cette fonction dans mon cas ? (j'ai bien lu les explications microsoft mais je ne comprends pas la relation avec les effets trouvés ici pour répondre à ma problématique)

Idem c'était en erreur tout à l'heure et maintenant ma fonction perso fonctionne aussi ici :

=NB.JOURS.OUVRES.INTL("30/12/2024";"05/01/2025";1;GetFermetures(0))

Je ne comprends pas tout ce soir mais tout est bien qui finit bien

Un énorme merci (un peu plus et j'étais partit pour coder un bazooka pour tuer un moustique)

Parfait, sinon j'avais préparé une petite macro pour la formule "=NB.JOURS.OUVRES.INTL("30/12/2024";"05/01/2025";1;{"30/12/2024";"31/12/2024"})"

En cliquant sur le bouton "Formule" , on lançait la macro suivante:

Sub Formule()
    PlageJF = Range("E20")
    Item = Split(PlageJF, ";")
    For I = 1 To UBound(Item)
        nwPlageJF = nwPlageJF & ";" & Item(I)
    Next
    nwPlageJF = Mid(nwPlageJF, 2, Len(nwPlageJF) - 1)
    nwPlageJF = Mid(nwPlageJF, 1, Len(nwPlageJF) - 1)
    Range("D20").FormulaR1C1 = "=NETWORKDAYS.INTL(""30/12/2024"",""05/01/2025"",1,{" & nwPlageJF & "})"
End Sub
image

Mais puisque ça marche sans cela alors, c'est parfait.

Cdlt

Rechercher des sujets similaires à "fonction conversion chaine caractere plage"