Récapitulation de facturation

Bonjour,

Voilà mon problème :

Je dois établir un fichier de facturation pour la fréquentation d'un accueil extra-scolaire. J'ai un fichier "planning hebdomadaire" avec un onglet par semaine, et j'ai un "fichier facturation".

Je dois chercher les informations dans le fichier planning... pour les répertorier dans le fichier facturation.....

En fait, dans l'idéal, il faudrait mettre un 1 dans la dans le fichier de facturation si l'enfant en question a bien fréquenté l'accueil à telle ou telle unité.

Je n'y arrive pas!

Est-ce que quelqu'un peut m'aider, je désespère....

j'annexe les deux fichiers en question.

Merci d'avance.

je désespère, je n'y arrive pas....

Merci d'avance

bonsoir,

voici un code à insérer dans un module dans le fichier de facturation.

lire les instructions avant d'exécuter la macro, quelques adapatations de la mise en page sont nécessaires sur certaines feuilles

les 2 Fichiers doivent être ouverts pour que la macro fonctionne.

Dim enfant(100)
Dim e
Sub facture()
' 2 étapes
' première étape : creation d'un tableau de synthèse des présences
  ' important les feuilles plannings doivent toutes avoir la même structure (référence = semaine 35 dans l'exemple donné)
  ' les dates doivent se trouver en ligne 8 (et pas en ligne 7 comme dans la semaine 34)
' deuxième étape : remplissage des récapitulatifs de facturation
  ' les données iront remplir les feuilles existantes ! elles doivent donc être créées auparavant

' tableau de synthèse, présence(100 enfants maximum,  8 unités, 12 mois, 31 jours)
Dim présence(100, 8, 12, 31)
' nj nombre de jours dans le mois
Dim nj As Variant
nj = Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

Set wbp = Workbooks("Planning hebdo 2013-2014.xls")
Set wbf = Workbooks("Fichier de facturation 2013-2014.xlsx")

' e = nombre d'élèves différents trouvés dans les plannings
e = 0
'on prend chaque feuille semaine du planning hebdo (toutes les feuilles doivent avoir la même structure)
For Each ws In wbp.Worksheets
 'on prend les feuilles odn le nom commence par Semaine
 If Left(ws.Name, 7) = "Semaine" Then
  ' on parcourt les jours de la semaine colonne (G à K ou 7ème à la 11ème), les jours doivent être en ligne 8
  For d = 7 To 11
    mois = Month(ws.Cells(8, d))
    jour = Day(ws.Cells(8, d))
    If (Year(ws.Cells(8, d)) Mod 4) = 0 Then nj(2) = 29
    k = 9
    ' on parcourt chaque unité
    While ws.Cells(k, 1) <> "Administration"
     ' si on trouve quelque chose en colonne F, 6ème colonne, la ligne suivante contient, le code de l'unité
     If ws.Cells(k, 6) <> "" Then
      k = k + 1
      Select Case ws.Cells(k, 1)
      Case "U1"
       u = 1
      Case "U2"
       u = 2
      Case "repas"
       u = 3
      Case "U3"
       u = 4
      Case "U4"
       u = 5
      Case "U5"
       u = 6
      Case "U6"
       u = 7
      Case "DA"
       u = 8
      End Select
     End If
     ' s'il y a un enfant et qu'il n'est pas marqué en jaune
     If ws.Cells(k, d) <> "" And ws.Cells(k, d).Interior.ColorIndex <> 6 Then
      r = chercheenfant(ws.Cells(k, d))
      'si le nom de l'enfant n'est pas trouvé dans notre liste, on l'y ajoute
      If r = 0 Then
       e = e + 1
       r = e
       enfant(e) = ws.Cells(k, d)
      End If
      ' on met une présence pour l'enfant, dans l'unité, pour le mois et le jour
      présence(r, u, mois, jour) = 1
     End If
     'on prend la ligne suivante dans la feuille semaine
     k = k + 1
    Wend
    ' on prend le jour suivant dans la feuille semaine
  Next d
 End If
' on prend la feuille semaine suivante
Next
'le tableau des présences est rempli
'on peut construire les récapitulatifs des factures
' le tableau récapitulatif sera complété, si la feuille pour le mois existe

' on parcourt chaque feuille du fichier de facturation
For Each lm In wbf.Worksheets
 If IsDate(lm.Cells(1, 5)) Then
  ' on a trouvé une feuille qui contient une date en E5, on en déduit qu'il s'agit d'une feuille récapitulatif des facture
  mois = Month(lm.Cells(1, 5))
  ' l numéro de ligne dans la feuille récapitulatif facture
  l = 4
  'on va recopier les infos du tableau dans la feuille
  ' pour chaque enfant
  For i = 1 To e
   ' on copie son nom sur la feuille
   lm.Cells(l, 1) = enfant(i)
    ' pour chaque unité
   For j = 1 To 8
    ' pour chaque jour
    For m = 1 To nj(mois)
     ' on copie sa présence pour du mois
     lm.Cells(l, m + 4) = présence(i, j, mois, m)
    Next m
    ' on passe à la ligne suivante
    l = l + 1
   Next j
   ' on rajoute une ligne, avant de passer à l'enfant suivant.
   l = l + 1
  Next i
 End If
Next
End Sub

Function chercheenfant(nom)
For i = 1 To e
 If enfant(i) = nom Then chercheenfant = i: Exit Function
Next i
chercheenfant = 0
End Function

Merci h2so4,

Je pense que c'est exactement ce dont j'ai besoin. J'ai donc copié ton code et je l'ai collé dans le visual basic. Toutefois, cela ne marche pas j'ai un message erreur "incompatibilité de type". Que dois-je corriger? est-ce que c'est parce qu'il ne trouve pas l'emplacement du fichier "planning hebdo 2013-2014"?

Merci encore pour ton aide.

Nicole

bonjour,

as-tu inséré une ligne "devoir accompagné" en ligne 2 sur semaine 34 ?

Merci beaucoup H2so4,

J'ai ajusté mon fichier (ligne 8), j'ai recopié ton code et ça fonctionne presque....

Effectivement, j'ai dû rajouter des lignes dans le planning dans chaque unité et je pense que la macro ne prend plus en considération les bonnes cellules.... (je n'ai plus rien dans les dernières unités). j'ai essayé de modifier la macro, mais je pense que je ne le fais pas au bon endroit, parce que cela ne fonctionne toujours pas..

Peux-tu encore m'aider...

Merci d'avance et bonne soirée.

Nicole

Bonsoir,

j'ai adapté le code pour le rendre un peu moins dépendant des contraintes initiales.

les contraintes suivantes restent :

1) les 2 fichiers doivent être ouverts en excel

2) le fichier planning contient desfeuilles qui reprenent les infos par semaine dont

A. l'entête doit contenir dans la colonne B dans les 20 premières lignes la mention horaire, sur la ligne suivante on trouve les dates dans les colonnes G,H,I,J,K

B. 2 lignes par unité, la première en colonne A contient le libellé et contient un code numérique en colonne F

C. le nom des enfants doit être unique (attention également "Louise" et " Louise " seront considérés comme 2 prénoms différents)

3) le recapitulatif de facture se base sur un modèle dont la structure ne peut pas être modifié (pas de nouvelles colonnes, pas de nouvelles lignes) par contre des formules peuvent être ajoutées.

à chaque exécution les feuilles récapitulatives mensuelles seront supprimées et reconstruites

bon test

bonjour,

Merci pour ta nouvelle version, mais en fait je n'ai toujours rien dans les unités U5 U6 et DA alors que dans le planning, il y a des présences. Je n'arrive pas à modifier pour que tout soit pris en compte.

Merci d'avance

Nicole

Bonsoir,

voilà j'ai corrigé pour adapter le code à certaines particularités de certaines feuilles.

je me rends compte qu'il manque une phrase dans l'énoncé des contraintes.

les contraintes suivantes restent :

1) les 2 fichiers doivent être ouverts en excel

2) le fichier planning contient desfeuilles qui reprenent les infos par semaine dont

A. l'entête doit contenir dans la colonne B dans les 20 premières lignes la mention horaire, sur la ligne suivante on trouve les dates dans les colonnes G,H,I,J,K

B. plusieurs lignes par unité, la première en colonne A contient le libellé et contient un code numérique en colonne F,les suivantes peuvent contenir le nom d'une personne d'encadrement, jusqu'à finalement trouver une ligne qui contient le code abrégé de l'unité et qui est la première ligne sur laquelle on peut trouver le nom d'un enfant.

C. le nom des enfants doit être unique (attention également "Louise" et " Louise " seront considérés comme 2 prénoms différents)

3) le recapitulatif de facture se base sur un modèle dont la structure ne peut pas être modifiée (pas de nouvelles colonnes, pas de nouvelles lignes) par contre des formules peuvent être ajoutées.

à chaque exécution les feuilles récapitulatives mensuelles seront supprimées et reconstruites et porteront un nom commençant par Fact, pour éviter qu'elles soient supprimées, il suffit de les renommer (un nom ne commençant pas par Fact).

j'ai ajouté un tri alphabétique des enfants. et tu verras qu'il y a des noms qui sont orthographiés de manière différente.

h2so4,

C'est juste génial! cette fois c'est nickel bleu ciel.

Merci infiniment, je vais gagner un temps fou à l'avenir.

Bonne soirée

Nicole

Rechercher des sujets similaires à "recapitulation facturation"