Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Convertir dates multiples en n° semaine + gestion condition cellule fusionée

  • Initiateur de la discussion Initiateur de la discussion spike29
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

spike29

XLDnaute Occasionnel
Bonjour,

Débutant en VBA, j'utilise un fichier de suivi d'actions suivi par date et période (JOUR NUIT) pour lequel je souhaite faire quelques statistiques.


1er besoin :
Dans la colonne J, en fonction de ce qui est contenu dans la dernière cellule fusionnée rencontrée, saisir la valeur "NUIT" si dernière cellule fusionnée contient NUIT ou "JOUR" si dernière cellule fusionnée rencontrée contient Journée.

2ème besoin :
Suivant la même logique que le besoin 2, saisir le numéro de semaine en colonne I correspondant à la valeur contenue dans la dernière cellule fusionnée rencontrée.

Merci d'avance pour votre aide.

En PJ je joint le fichier illustrant ces besoins.
 

Pièces jointes

Solution
Re,
Un essai en PJ avec :
VB:
Sub Test()
Application.ScreenUpdating = False
For e = 8 To Range("A65500").End(xlUp).Row
    If Not IsEmpty(Range("A" & e)) And Range("A" & e) Like "*du*" Then
        Cells(e, 1).Resize(, 10).Merge
    Else
        Cells(e, "I") = SemJourNuit(e, 0)
        Cells(e, "J") = SemJourNuit(e, 1)
    End If
Next e
End Sub

utiliser une fonction perso c'est exactement comme utiliser une fonction XL.
Au lieu de X=SUM(A,B) vous mettez X=SemJourNuit(A,B)
Bonjour Spike,
Un essai en PJ avec une fonction perso :
VB:
Function SemJourNuit(Ligne%, R%) ' R=1 remonte Jour/Nuit R=0 remonte N° de semaine
    Application.Volatile
    For L = Ligne To 1 Step -1
        If Cells(L, "A").MergeCells Then
            If R = 1 Then
                If Cells(L, "A") Like "*Nuit*" Then SemJourNuit = "Nuit" Else SemJourNuit = "Jour"
            Else
                SemJourNuit = Val(Format(CDate(Split(Cells(L, "A"), " ")(2)), "WW"))
            End If
            Exit For
        End If
    Next L
End Function
La syntaxe est =SemJourNuit(LIGNE();X) avec X=1 pour Jour/Nuit et 0 pour N° de semaine.
A noter que le 08/04/2021 est la semaine 15 et non 14 pour XL.
 

Pièces jointes

Bonsoir à tous les deux et un grand merci pour vos réponses. Elles correspondent parfaitement à mes besoins.


@sylvanu, j'éssai de déclencher ta fonction directement depuis ma procédure "TEST" mais sans succès. Je ne suis pas très à l'aise avec l'utilisation des fonctions.

VB:
Sub Test()

For e = 8 To 65000
If Not IsEmpty(Range("A" & e)) And Range("A" & e) Like "*du*" Then
Cells(e, 1).Resize(, 10).Merge
End If

Next e

Call SemJourNuit(Ligne%, R%)

End Sub

L'utilisation de Call semble ne pas fonctionner, une idée ?


Bonne fin de journée
 

Pièces jointes

Bonsoir spike, le fil,

La syntaxe est =SemJourNuit(LIGNE();X) avec X=1 pour Jour/Nuit et 0 pour N° de semaine.
A noter que le 08/04/2021 est la semaine 15 et non 14 pour XL.

la formule est à appeler depuis la cellule d'une feuille de calcul, pas depuis VBA ; ou alors, si tu l'appelle depuis VBA, faut affecter la valeur de retour de la fonction à une variable, par exemple :

varX = SemJourNuit(LIGNE();1) ou varX = SemJourNuit(LIGNE();0)

soan
 
Bonsoir Spike,
SemJourNuit est une fonction donc on ne l'appelle pas avec un call mais on passe par une variable, comme :
VB:
Résultat = SemJourNuit(Ligne, R)
On ne met pas les %, dans la déclaration cela signifie "as integer"
Ensuite il faut passer à la fonction les deux paramètres Ligne et R, par ex dans votre fichier :
Code:
Sub TestFonction()
    Dim N%
    Application.ScreenUpdating = False
    For N = 9 To 23
        Cells(N, "I") = SemJourNuit(N, 0)
        Cells(N, "J") = SemJourNuit(N, 1)
    Next N
End Sub
 
Bonjour le fil,

J'ai essayé avec vos différentes proposition mais je suis assez perdu de par ma mauvaise maitrise des fonctions.

@soan merci pour ta réponse. Je n'ai pas du tout réussi à savoir comment et où intégrer ton code :

Code:
varX = SemJourNuit(LIGNE();1) ou varX = SemJourNuit(LIGNE();0)

J'ai tenté d'ajouté du coup => " Résultat = SemJourNuit(Ligne, R) mais sans succès, cela m'indique " Type d'argument ByRef incompatible".

VB:
Sub TestFonction()
    Dim N%
    Application.ScreenUpdating = False
    For N = 9 To 23
        Cells(N, "I") = SemJourNuit(N, 0)
        Cells(N, "J") = SemJourNuit(N, 1)
    Next N
    
    Résultat = SemJourNuit(Ligne, R)
End Sub

Je sèche un peu, n'étant pas du tout à l'aise avec l'utilisation des fonctions.
Pourriez vous si cela ne vous embête pas m'indiquer votre solution directement dans mon fichier en PJ.

L'idéale pour moi serait que la fonction se déclenche automatiquement au déclenchement de la procédure "Test".

Merci d'avance pour votre aide et votre patience.

Le fichier en PJ.

Bonne après-midi.
 

Pièces jointes

Re,
Un essai en PJ avec :
VB:
Sub Test()
Application.ScreenUpdating = False
For e = 8 To Range("A65500").End(xlUp).Row
    If Not IsEmpty(Range("A" & e)) And Range("A" & e) Like "*du*" Then
        Cells(e, 1).Resize(, 10).Merge
    Else
        Cells(e, "I") = SemJourNuit(e, 0)
        Cells(e, "J") = SemJourNuit(e, 1)
    End If
Next e
End Sub

utiliser une fonction perso c'est exactement comme utiliser une fonction XL.
Au lieu de X=SUM(A,B) vous mettez X=SemJourNuit(A,B)
 

Pièces jointes

Bonsoir Sylvanu, bonsoir le fil,

Merci pour cette dernière PJ, tout fonctionne parfaitement !

Effectivement après avoir observé ton code tout me paraît plus simple quant à l'interaction fonction / procédure sub 😉

Un grand merci !

Bonne fin de journée et merci également à tout ceux qui ont pu répondre à ma problématique sur ce fil.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
974
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…