Mise en forme d'une demande d'absence
Résolu
Saucisson_47
Messages postés
11
Statut
Membre
-
yg_be Messages postés 24281 Statut Contributeur -
yg_be Messages postés 24281 Statut Contributeur -
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
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
A voir également:
- Mise en forme d'une demande d'absence
- Mise en forme conditionnelle excel - Guide
- Message absence thunderbird - Guide
- Mise en forme tableau croisé dynamique - Guide
- Mise a jour chrome - Accueil - Applications & Logiciels
- Mise a jour windows 10 - Accueil - Mise à jour
5 réponses
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
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
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
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.
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.
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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