identifier code et dates correspondantes

mix770

XLDnaute Impliqué
Bonjour à vous,

J'adore Excel et mon appétit me conduit encore à faire appel à vous pour avancer :)

j'ai un tableau de présence remplie par des tiers avec des codes d'absences "cpc / rtt / ...." (janvier dans fichier joint), je souhaiterai que dans l'onglet CMA il sache:
- reconnaitre les codes, ceux ci s’affichant dans la colonne "codes"
- pour la colonne "absence" pas de problème il va chercher l'intitulé en fonction du code
- qu'il affiche dans la colonne "période" la date de début et de fin pour le code.
- pour la colonne nombre pas de problèmes.
cela veut dire qu'il doit créer un ligne pour chaque code inscrit, reconnaitre les dates de début et fin, pour 1 journée date unique et différencier si un rtt à été posé le 10 juillet et un autre le 20 cela fait 2 lignes

j'espère avoir été clair ....
j'ai mis le fichier en PJ

un grand merci à vous tous
bien cordialement
 

Pièces jointes

  • construction cma.xls
    116.5 KB · Affichages: 52
  • construction cma.xls
    116.5 KB · Affichages: 57
  • construction cma.xls
    116.5 KB · Affichages: 58

mix770

XLDnaute Impliqué
Re : identifier code et dates correspondantes

Vous avez raison, j'ai écouté votre proposition il y a bien qu'un seul masque CMA ou l'on va chercher le nom de l'agent, le tableau existait déja avec les 30 feuilles (qui affichent les absences par code et gère les soldes) ce qui permettait de collecter l'activité, le cma lui, sert à la gestion du personnel, c'est le seul document qu'il acceptent.
je regarde ce que cela donne
merci beaucoup.
je reviens vers vous
 

mix770

XLDnaute Impliqué
Re : identifier code et dates correspondantes

Alors,
j'ai inséré la ligne à la suite et changer dans "msgbox" la valeur FCbl en place de feuille 106

J'ai une erreur d’exécution "9" -- " l'indice n'appartient pas à la sélection"

Sub Collecte(ByVal FCbl As Worksheet)
Dim FSrc As Worksheet, Cel As Range, Déb As Date, Te(), Codes(), Périodes(), DCV As New Dictionary, _
Valide As Boolean, L As Long, J As Long, Jp As Long, CodCou As String, CodSui As String
On Error Resume Next
Set FSrc = ThisWorkbook.Worksheets(FCbl.[AD4].Value)
If Err Then MsgBox "Feuille """ & FCbl.[AD4].Value & """ introuvable.", vbCritical, "Collecte": Exit Sub
On Error GoTo 0
Te = FCbl.Range("U2:U" & FCbl.[U500].End(xlUp).Row).Value
For L = 1 To UBound(Te)
If Not IsEmpty(Te(L, 1)) Then DCV(UCase(Te(L, 1))) = 0
Next L
Déb = FSrc.[C8].Value - 1
Set Cel = FSrc.[A9:A68].Find(What:=FCbl.[C7].Value, LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Cel Is Nothing Then MsgBox FCbl.[C7].Value & " inexistant.", vbCritical, "Collecte": Exit Sub
Te = Cel.Offset(, 2).Resize(, 31).Value
ReDim Codes(1 To 19, 1 To 1), Périodes(1 To 19, 1 To 2)
L = 0: J = 1: CodSui = UCase(Te(1, 1))
Do ' Début code
CodCou = CodSui: Valide = DCV.Exists(CodCou)
If Valide Then L = L + 1: Codes(L, 1) = CodCou: Périodes(L, 1) = Format(Déb + J, "dd mmm yyyy")
Do: If J >= 31 Then Exit Do
J = J + 1: CodSui = UCase(Te(1, J)): Loop Until CodSui <> CodCou
' Fin code
If Valide Then Périodes(L, 2) = Format(Déb + J - 1, "dd mmm yyyy")
Loop Until J >= 31
FCbl.[A13].Resize(19, 1).Value = Codes
FCbl.[C13].Resize(19, 2).Value = Périodes
FCbl.[G35:R40].Value = ThisWorkbook.Worksheets(FCbl.[C7].Value).[C40:N45].Value
End Sub
voila.
 

mix770

XLDnaute Impliqué
Re : identifier code et dates correspondantes

OK, comme les onglets ont toujours le même nom (nom1;nom2),etc.. car il y a des changement de personnel, ce n'est pas bon
il y a peut etre moyen d'avoir une référence autrement par exemple l'onglet nom1 sera toujours lié à la ligne N° 9 des mois.
 

Dranreb

XLDnaute Barbatruc
Re : identifier code et dates correspondantes

Oui, vous pouvez spécifier à la place de FCbl.[C7].Value une savante expression numérique représentant le numéro d'ordre de la feuille, calculé à partir de Cel.Row. Définissez en tête de la procédure, instruction Const, une constante à ajouter pour obtenir le numéro de la feuille, bien commentée et spécifiant comme valeur une différence des débuts respectifs.
 

Dranreb

XLDnaute Barbatruc
Re : identifier code et dates correspondantes

Je ne sais pas, moi. C'est pareil pour toutes le feuilles mois, non ? Les noms sont partout les mêmes et dans le même ordre que les feuilles que je n'ai jamais vues des personnes. Vous connaissez l'Index de la feuille de la 1ère personne et le numéro de la ligne correspondante dans les feuilles mois. Cel.Row donne le numéro de la ligne de la personne traitée dans cette feuille mois, vous devriez donc pouvoir en déduire le numéro d'Index de la feuille de la personne concernée.
 

mix770

XLDnaute Impliqué
Re : identifier code et dates correspondantes

Bonjour Dranred,
à mon grand désespoir depuis 2 heures je tourne en rond sans trouver comment faire, sur les onglets "nom1.. etc.." le nom de l'agent est toujours en "B5" si c'est dans la ligne ci dessous qu'il faut l'intégrer, je ne vois pas, désolé.
FCbl.[G35:R40].Value = ThisWorkbook.Worksheets(FCbl.[C7].Value).[C40:N45].Value
j'ai remplacé la feuil106 par Fcbl je joins un tableau avec l'onglet nom1
merci et je m'excuse de mon piètre niveau
cordialement
 

Dranreb

XLDnaute Barbatruc
Re : identifier code et dates correspondantes

Bonjour
il y a peut etre moyen d'avoir une référence autrement par exemple l'onglet nom1 sera toujours lié à la ligne N° 9 des mois.
Alors essayez :
VB:
FCbl.[G35:R40].Value = ThisWorkbook.Worksheets("nom" & Cel.Row - 9 + 1).[C40:N45].Value
ou si vos noms sont toujours une ligne sur 2 avec ce stupide "Remplace" entre chaque, alors:
VB:
FCbl.[G35:R40].Value = ThisWorkbook.Worksheets("nom" & (Cel.Row - 9) \ 2 + 1).[C40:N45].Value
 
Dernière édition:

mix770

XLDnaute Impliqué
Re : identifier code et dates correspondantes

j' ai intégré ta seconde proposition, et je suis d'accord le "remplace" est Ch..., le tableau d'origine est fait pour intégrer les remplacements ponctuels.
Cela fonctionne pour tous les mois de l'année sur le premier nom de la liste "roland", dès que je sélectionne un autre nom j'ai le message ""9" -- " l'indice n'appartient pas à la sélection"".
pour ma compréhension, mon idée d'aller chercher en B5 de chaque Onglet (nom1,nom2,..) puisque c'est là que se trouve le tableau à copier n'est pas cohérente.
c'est dommage le tableau complet est trop lourd, j'envoie juste les onglets "masque cma,nom1, janvier)
merci à vous.
je suis désolé de vous embêter
cordialement
 

Pièces jointes

  • COPIE SOLDE 2.xls
    205 KB · Affichages: 23

Dranreb

XLDnaute Barbatruc
Re : identifier code et dates correspondantes

Ajoutez des vérifications :
VB:
Dim Nom As String, NomFeui As String, FeuiNom As Worksheet
Nom = FCbl.[C7].Value
NomFeui = "Nom" & (Cel.Row - 9) \ 2 + 1
On Error Resume Next
Set FeuiNom = ThisWorkbook.Worksheets(NomFeui)
If Err Then MsgBox "Feuille """ & NomFeui & """ introuvable.", vbCritical, "Collecte": Exit Sub
On Error GoTo 0
If FeuiNom.[B5].Value <> Nom Then MsgBox "Attention, " & NomFeui & "!B5 contient """ & _
   FeuiNom.[B5].Value & """ au lieu de """ & Nom & """.", vbExclamation, "Collecte"
FCbl.[G35:R40].Value = FeuiNom.[C40:N45].Value
 

mix770

XLDnaute Impliqué
Re : identifier code et dates correspondantes

Dranreb,

je ne dirai qu'une chose: RESPECT.

pour la maitrise et pour votre patience.

cela marche impeccable
j'ai testé plusieurs noms et mois, je ne vois rien qui coince.

un grand merci pour moi et mes collègues

bien cordialement
 

Discussions similaires

Réponses
10
Affichages
234
Réponses
93
Affichages
3 K
Réponses
2
Affichages
230

Statistiques des forums

Discussions
314 023
Messages
2 104 741
Membres
109 124
dernier inscrit
Bilouwal