Fonction de conversion d'une chaine de caractère en plage
Bonsoir à tous,
Les habitués doivent commencer à me connaitre puisque je poste dorénavant chaque semaine
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
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
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
Un énorme merci
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
Mais puisque ça marche sans cela alors, c'est parfait.
Cdlt