Alimenter en fonction numéro semaine ou mois

Résolu
Co_nexion Messages postés 333 Statut Membre -  
skyzino Messages postés 32 Statut Membre -
Bonjour,

J'ai un peu l'impression d'avoir régressé après les vacances... Merci pour votre aide.

Au travers du fichier ci-dessous, je souhaite alimenter l'onglet synthèse avec les données de l'onglet Calcul.

En prenant la colonne E comme source d'alimentation et en fonction de la colonne P pour les semaines et O pour les mois.

Si vous avez des idées même avec VBA, je suis preneur :)

https://www.cjoint.com/?BHBoC6ocV4i

Merci d'avance

5 réponses

  1. Co_nexion Messages postés 333 Statut Membre
     
    Personne pour ce problème ?

    Vu le soleil je comprends... Mais un peu d'aide serait vraiment la bienvenue.
    0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Ayant pris le sujet a 17h15, patience tout arrive a point pour qui sait attendre.....
    0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Un exemple VBA

    Sub synthese()
      Dim Plage As Range, cel As Range
      Dim Compte_Semaine(53) As Single, Compte_Mois(12) As Single
      Dim Num_Mois As Integer, Num_Sem As Integer, Mois
      Dim Nb_Sem As Integer
      
      Erase Compte_Semaine, Compte_Mois
      
        'pour la dernière ligne de la colonne A
        derlig = Worksheets("Calcul").Range("A" & Rows.Count).End(xlUp).Row
        Set Plage = Worksheets("Calcul").Range("O2:O" & derlig)
        For Each cel In Plage
          If Worksheets("Calcul").Cells(cel.Row, "P") <> "" Then
            'Mois
            ValO = Worksheets("Calcul").Cells(cel.Row, "O")
            Mois = Left(ValO, Len(ValO) - 5)
            'Semaine
            ValP = Worksheets("Calcul").Cells(cel.Row, "P")
            Num_Sem = CInt(Left(ValP, Len(ValP) - 5))
          Else
            Exit Sub
          End If
          
          Select Case Mois
            Case Is = "janvier"
              Num_Mois = 1
            Case Is = "févier"
              Num_Mois = 2
            Case Is = "mars"
              Num_Mois = 3
            Case Is = "avril"
              Num_Mois = 4
            Case Is = "mai"
              Num_Mois = 5
            Case Is = "juin"
              Num_Mois = 6
            Case Is = "juillet"
              Num_Mois = 7
            Case Is = "août"
              Num_Mois = 8
            Case Is = "septembre"
              Num_Mois = 9
            Case Is = "octobre"
              Num_Mois = 10
            Case Is = "novembre"
              Num_Mois = 11
            Case Is = "décembre"
              Num_Mois = 12
            Case Else
            'cellule vide ou autre
          End Select
          Compte_Semaine(Num_Sem) = Compte_Semaine(Num_Sem) + Worksheets("Calcul").Cells(cel.Row, "E")
          Compte_Mois(Num_Mois) = Compte_Mois(Num_Mois) + Worksheets("Calcul").Cells(cel.Row, "E")
        Next cel
      
      'Ecriture des Cumuls
        'Cumul Mois
        For i = 1 To 12
          If Compte_Mois(i) > 0 Then
            Worksheets("Synthèse").Cells(21, 2 + i) = Format(Compte_Mois(i), "###.##")
          Else
            Worksheets("Synthèse").Cells(21, 2 + i) = ""
          End If
        Next i
        'Cumul Semaine
        If Worksheets("Synthèse").Range("G16") = "" Then
          Nb_Sem = 52
        Else
          Nb_Sem = 53
        End If
        
        'Coordonnees des cellules Semaine
        For i = 1 To 52
          Lig = Choose(i, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, _
                          8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, _
                          11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, _
                          14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, _
                          17, 17, 17, 17)
          Col = Choose(i, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, _
                          3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, _
                          3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, _
                          3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, _
                          3, 4, 5, 6, 7)
          If Compte_Semaine(i) > 0 Then
            Worksheets("Synthèse").Cells(Lig, Col) = Format(Compte_Semaine(i), "###.##")
          Else
            Worksheets("Synthèse").Cells(Lig, Col) = ""
          End If
        Next i
    End Sub
    


    Bonne suite
    0
    1. Co_nexion Messages postés 333 Statut Membre
       
      Bonjour f89,

      Je regarde de ce pas ton code et je te fais un retour au plus vite, merci !
      0
  4. Co_nexion Messages postés 333 Statut Membre
     
    Re f89,

    Pourquoi avoir mis cette partie de code ?

        'Cumul Semaine
        If Worksheets("Synthèse").Range("G16") = "" Then
          Nb_Sem = 52
        Else
          Nb_Sem = 53
        End If
    0
    1. Co_nexion Messages postés 333 Statut Membre
       
      Egalement les données sont stockés sous forme de texte. Serait-il possible qu'il soit sous forme de chiffre ?
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,
      Cumul semaine: suivant les annees, il y a 52 ou 53 semaines. Meme si l'exemple que vous avez fourni n'est pas le projet final, il faut y penser.

      Pour les donnees: Egalement les données sont stockés sous forme de texte.
      si je code pour relire une cellule semaine ou mois, j'ai un nombre pas une chaine

      Mais si vous voulez:
      enlever le formatage du code et formater les cellules sauf si vous aimez les nombres avec 17 chiffres apres la virgule


      Bonne suite
      0
    3. Co_nexion Messages postés 333 Statut Membre
       
      N'est-il pas possible de rajouter dans le code un " *1 " afin d'obtenir des chiffres et non du texte dans les cases de la synthèse ?
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Je vous renvoie votre fichier. Je ne comprend pas pourquoi vous avez du texte,car dans votre fichier ce sont des nombres:a droite dans les cellules, si c'etait du texte: a gauche dans les cellules.
      2007
      https://www.cjoint.com/?BHCtUwPEowP
      2003
      https://www.cjoint.com/?BHCt0xojluk

      Bonne suite
      0
    5. Co_nexion Messages postés 333 Statut Membre
       
      Bonjour F89,

      Je viens de prendre le fichier 2007 pour vérifier et il s'agit bien d'un format texte sous lequel sont stockés les chiffres dans l'onglet synthèse.

      J'ai ajouté 3 lignes supplémentaires (sur l'onglet calcul) puis j'ai lancé la macro et alors les chiffres stockés en onglet synthèse sont sous le format texte.

      Dans l'attente d'un avis de votre part, je vous remercie par avance
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. skyzino Messages postés 32 Statut Membre
     
    Re f89,

    J'espère que vous aurez le temps de faire un détour par cet ancien topic résolu.

    En effet j'ai souhaité rajouter un bout de code et cependant cela ne fait pas exactement ce que j'en ai voulu, surement ai-je oublié quelques points à modifier.

    Voici ce que j'ai ajouté à la fin du précédent code

    'Duplication 25/09
    'Ecriture des Cumuls Heures
        'Cumul Semaine Heures
        If Worksheets("Synthèse").Range("F20") = "" Then
          Nb_Sem = 52
        Else
          Nb_Sem = 53
        End If
        
        'Coordonnees des cellules Semaine Heures
        For j = 1 To 52
          lig = Choose(j, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, _
                          9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, _
                          13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, _
                          17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, _
                          21, 21, 21, 21)
          col = Choose(j, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, _
                          2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, _
                          2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, _
                          2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, _
                          2, 3, 4, 5, 6)
          If Compte_Semaine(j) > 0 Then
            Worksheets("Synthèse").Cells(lig, col) = CSng(Format(Compte_Semaine(j), "###.##"))
          Else
            Worksheets("Synthèse").Cells(lig, col) = ""
          End If
        Next j


    Par avance Merci
    0