Mise en forme d'une demande d'absence

Résolu/Fermé
Saucisson_47
Messages postés
11
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
13 avril 2018
- 12 avril 2018 à 13:51
yg_be
Messages postés
19998
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 août 2022
- 13 avril 2018 à 15:50
Bonjour,
Je souhaiterai avoir votre aide sur une mise en forme automatique selon le contenu des cellules. J’ai essayé de réaliser des formules mais je ne sais pas faire de macros en partant de 0, je sais seulement les lire et les adapter…
Il s’agit d’un fichier de gestion de congés que j’ai paramétré et je souhaite réaliser l’automatisation du remplissage du bordereau de demande d’absence.
Je vous joins le fichier pour illustrer mes explications.
Dans l’onglet « congé », je souhaiterai reprendre les éléments de la colonne E (en bleu) et les reprendre dans les cellules colorées en jaune et en vert comme j’ai fait mais de manière automatique c’est-à-dire avec des dates et les types de congés qui vont évoluer.
Voici les éléments que j’ai identifié pour compléter que la macro reprenne (je ne pense pas que de simples formules puissent le faire):
- Vide on ne prend pas;
- "le" on prend puis ligne retour ligne d'en dessous (cellules jaunes) ou cellule d’à côté (cellule vert)
- "du" alors recherche du "au" à la suite, concaténation puis retour à la ligne d'en dessous cellules jaunes) ou cellule d’à côté (cellule vert)
NB : les couleurs ne servent qu’à vous repérer, dans le fichier final mais cellules seront incolores.
Merci par avance pour votre aide
Cordialement

https://www.cjoint.com/c/HDmlY5Z06Vx

5 réponses

gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 624
Modifié le 12 avril 2018 à 19:05
Bonjour,

Voici le classeur avec la macro que tu souhaites
C'est une macro qui se déclenche à l'ouverture de la feuille 'congé'

https://www.cjoint.com/c/HDmrfuZq56l
 Toujours zen
La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.  Antoine de Saint-Exupéry
1
yg_be
Messages postés
19998
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 août 2022
1 185
12 avril 2018 à 19:23
bonsoir, je propose ceci:
Sub demcg()
Dim fl As Worksheet
Dim ligbl As Long, ligjn As Long, derlig As Long
Dim cour As String, acc As String

Set fl = ThisWorkbook.Sheets("Congé")
derlig = fl.UsedRange.Rows(fl.UsedRange.Rows.Count).Row
ligjn = 15
acc = ""
For ligbl = 4 To derlig
    cour = fl.Cells(ligbl, 5)
    If cour <> "" Then
        If Left(cour, 1) <> " " Then
            If acc <> "" Then
                fl.Cells(ligjn, 9) = acc
                ligjn = ligjn + 1
            End If
            acc = cour
        Else
            acc = acc & cour
        End If
    End If
Next ligbl
If acc <> "" Then
    fl.Cells(ligjn, 9) = acc
End If
End Sub
0
Saucisson_47
Messages postés
11
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
13 avril 2018

13 avril 2018 à 09:15
Merci pour vos réponses ! je regarde cela et je vous tiens au courant
0
Saucisson_47
Messages postés
11
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
13 avril 2018

13 avril 2018 à 10:34
Je viens de tester les 2 réponses et elles fonctionnent. Je n'y serai jamais arrivé tout seul... merci encore.
Maintenant il me resterait à faire de même mais en repérant chaque type de congés CA (et CA N-1) CT, RTT, RF et en mettant les dates côte à côte dans les cellules vertes. Pour cette mise en forme soit on décale dans la cellule de droite soit on met à la suite dans la même cellule.
0
yg_be
Messages postés
19998
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 août 2022
1 185
13 avril 2018 à 13:09
suggestion:
Sub demcg()
Dim fl As Worksheet
Dim ligbl As Long, derlig As Long
Dim cour As String, acc As String

Set fl = ThisWorkbook.Sheets("Congé")
derlig = fl.UsedRange.Rows(fl.UsedRange.Rows.Count).Row
ligjn = 15
acc = ""
For ligbl = 4 To derlig
    cour = fl.Cells(ligbl, 5)
    If cour <> "" Then
        If Left(cour, 1) <> " " Then
            If acc <> "" Then
                Call svcg(fl, acc)
                ligjn = ligjn + 1
            End If
            acc = cour
        Else
            acc = acc & cour
        End If
    End If
Next ligbl
If acc <> "" Then
    Call svcg(fl, acc)
End If
End Sub
Private Sub svcg(fl As Worksheet, conge As String)
Dim tlig As Long
Select Case Left(conge, 2)
    Case "CA"
        tlig = 24
    Case "CT"
        tlig = 32
    Case "RT"
        tlig = 40
    Case "RF"
        tlig = 49
    Case Else
        tlig = 57
End Select
tcol = 10
Do While Cells(tlig, tcol) <> ""
    tcol = tcol + 1
Loop
Cells(tlig, tcol) = conge
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Saucisson_47
Messages postés
11
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
13 avril 2018

13 avril 2018 à 15:27
Un grand merci à vous, c'est parfait!!!
Cdt
0
yg_be
Messages postés
19998
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 août 2022
1 185
13 avril 2018 à 15:50
petites corrections:
option explicit
Sub demcg()
Dim fl As Worksheet
Dim ligbl As Long, derlig As Long
Dim cour As String, acc As String

Set fl = ThisWorkbook.Sheets("Congé")
derlig = fl.UsedRange.Rows(fl.UsedRange.Rows.Count).Row
acc = ""
For ligbl = 4 To derlig
    cour = fl.Cells(ligbl, 5)
    If cour <> "" Then
        If Left(cour, 1) <> " " Then
            If acc <> "" Then
                Call svcg(fl, acc)
            End If
            acc = cour
        Else
            acc = acc & cour
        End If
    End If
Next ligbl
If acc <> "" Then
    Call svcg(fl, acc)
End If
End Sub
Private Sub svcg(fl As Worksheet, conge As String)
Dim tlig As Long, tcol As Long
Select Case Left(conge, 2)
    Case "CA"
        tlig = 24
    Case "CT"
        tlig = 32
    Case "RT"
        tlig = 40
    Case "RF"
        tlig = 49
    Case Else
        tlig = 57
End Select
tcol = 10
Do While Cells(tlig, tcol) <> ""
    tcol = tcol + 1
Loop
Cells(tlig, tcol) = conge
End Sub
0