Transposer macro Excel en macro Sheets

Bonjour à tous,

je me lance dans l'automatisation de la gestion d'une garderie pour une asso. Les quelques fichiers sont sur Excel et assez basique (sauf une macro qui me dépasse).

Pour partager des fichiers avec les familles, je vais mettre les fichiers sur google drive, donc format sheets, et la macro ne fonctionne plus.

Pouvez-vous m'aider à la "traduire" et l'intégrer?

Voila la macro de base :

Sub ETUDE_APE()

' Macro enregistr_e le 11/09/2009 par

'D_finition des variables

Dim num_ligne
Dim Num_cellule_fact

Dim Nom
Dim Prenom
Dim Famille
Dim Famille_Prec

Dim FM
Dim FS
Dim MT_ETD_MAT
Dim MT_ETD_MIDI
Dim MT_ETD_SOIR
Dim NB_ETD_MAT
Dim NB_ETD_MIDI
Dim NB_ETD_SOIR
Dim MT_MAT
Dim MT_MIDI
Dim MT_SOIR
Dim MT_TOT
Dim COT
Dim MT_COT

Dim Texte_FM
Dim Texte_FS
Dim Texte_Cot
Dim TEXTE_ENTETE
Dim TEXTE_CORPS
Dim TEXTE_PIED
Dim TEXTE_ALL
Dim Texte_explication

Texte_explication = Range("D1").Value
TEXTE_ENTETE = Range("A1").Value & Chr(10) & Chr(10)

'Avant le tri du tableau, on sauvegarde le tableau dans une autre feuille
Sheets("Saisie_Mens").Select
Sheets("Saisie_Mens").Copy After:=Sheets(2)

'Aprs la copie, s_lection de la Saisie_Mens
Sheets("Saisie_Mens").Select

'Initialisation des variables pour ce positionner sur la premire ligne
num_ligne = 11
Num_cellule_fact = 1

'S_lection de la plage de donn_es ö trier
Range("A" & num_ligne, "IV" & num_ligne).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWindow.SmallScroll ToRight:=240
'Tri des donn_es par famille, nom puis pr_nom
Selection.Sort Key1:=Range("C" & num_ligne), Order1:=xlAscending, Key2:=Range("A" & num_ligne _
), Order2:=xlAscending, Key3:=Range("B" & num_ligne), Order3:=xlAscending, Header _
:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom _
, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
xlSortNormal

'Initalisation des cellules
MT_ETD_MAT = Range("B3").Value
MT_ETD_SOIR = Range("B3").Value
MT_ETD_SOIR = Range("B4").Value
MT_COT = Range("B7").Value
'MsgBox MT_ETD_MAT
'MsgBox MT_ETD_SOIR
C_NOM = "A"
C_PRENOM = "B"
C_FAMILLE = "C"
C_COT = "D"
C_FM = "E"
C_FS = "F"
C_NB_M = "G"
C_NB_MIDI = "I"
C_NB_S = "K"
C_MT_M = "H"
C_MT_MIDI = "J"
C_MT_S = "L"
C_MT_TOT = "M"

'Initialisation de la largeur de la colonne recevant le texte
Sheets("Facture").Select
Sheets("Facture").Cells.Select
Selection.Delete Shift:=xlUp
Sheets("Facture").Cells(1, 1).Select
Selection.ColumnWidth = 88
Sheets("Saisie_Mens").Select

'S_lection de la 1re cellule et de la 1re famille
Famille = Range(C_FAMILLE & num_ligne).Value
'MsgBox Famille
Nom = Range(C_NOM & num_ligne).Value
Prenom = Range(C_PRENOM & num_ligne).Value

'Boucle pour traiter l'ensemble des lignes
While Famille <> ""

'Boucle sur les noms de famille
If Famille <> Famille_Prec Then

'Si on change de famille, il faut imprimer la facture de la famille pr_c_dente
If Famille_Prec <> "" And Famille_Prec <> "TOTAL" And MT_TOT <> 0 Then

TEXTE_PIED = "TOTAL FAMILLE " & Famille_Prec & " : " & MT_TOT & " Û" & Chr(10) & Chr(10) & Texte_explication & Chr(10) & Chr(10) & Range("N1").Value & Chr(10) & Chr(10)
TEXTE_ALL = TEXTE_ENTETE & TEXTE_CORPS & TEXTE_PIED

'G_n_ration de la facture
Sheets("Facture").Select
Sheets("Facture").Range("A" & Num_cellule_fact).Select
Selection.Value = TEXTE_ALL
'Mise en page
Columns("A:A").EntireColumn.AutoFit
Rows(Num_cellule_fact).EntireRow.AutoFit
'Incr_mentation de la variable qui d_termine la ligne surlaquelle on _crit
Num_cellule_fact = Num_cellule_fact + 1
'Saut de page pour avoir 2 familles par pages
If Num_cellule_fact = (Round((Num_cellule_fact / 2), 0) * 2) Then
Sheets("Facture").Range("A" & Num_cellule_fact + 1).Select
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
Else
End If

Else
End If

'R_-activation de la feuille 1
Sheets("Saisie_Mens").Select

'Remise ö 0 des indicateurs et du texte car on traite une nouvelle famille
FM = 0
FS = 0
NB_ETD_MAT = 0
NB_ETD_MIDI = 0
NB_ETD_SOIR = 0
MT_MAT = 0
MT_MIDI = 0
MT_SOIR = 0
MT_TOT = 0
TEXTE = ""
TEXTE_CORPS = ""
Texte_Cot = ""
Texte_FM = ""
Texte_FS = ""
TEXTE_ALL = ""
Nom = Range(C_NOM & num_ligne).Value
Prenom = Range(C_PRENOM & num_ligne).Value

'Calcul des indicateurs pour le 1er enfant de la famille

'V_rification que la cotisation est pay_e pour la famille
If Range(C_COT & num_ligne).Value = "N" Then COT = 0 Else COT = 1
If COT = 0 Then MT_TOT = MT_COT Else MT_TOT = 0


'Recherche si forfait matin ou nombre d'_tude du matin
If Range(C_FM & num_ligne).Value = "O" Then FM = 1 Else NB_ETD_MAT = Range(C_NB_M & num_ligne).Value
'MsgBox FM
'MsgBox NB_ETD_MAT

'Recherche si forfait midi/soir ou nombre d'_tude du soir
If Range(C_FS & num_ligne).Value = "O" Then FS = 1 Else NB_ETD_SOIR = Range(C_NB_S & num_ligne).Value
'Recherche si forfait midi/soir ou nombre d'_tude du midi
If Range(C_FS & num_ligne).Value = "O" Then FS = 1 Else NB_ETD_MIDI = Range(C_NB_MIDI & num_ligne).Value

'MsgBox FS
'MsgBox NB_ETD_SOIR

'R_cup_ration du montant des _tudes du matin
If FM = 1 Then MT_MAT = 0 Else MT_MAT = Range(C_MT_M & num_ligne).Value
'R_cup_ration du montant des _tudes du soir
If FS = 1 Then MT_SOIR = 0 Else MT_SOIR = Range(C_MT_S & num_ligne).Value
'R_cup_ration du montant des _tudes du midi
If FMIDI = 1 Then MT_MIDI = 0 Else MT_MIDI = Range(C_MT_MIDI & num_ligne).Value
'R_cup_ration du montant total des _tudes
MT_TOT = MT_TOT + MT_MAT + MT_SOIR + MT_MIDI
'MsgBox MT_MAT
'MsgBox MT_SOIR
'MsgBox MT_TOT

Else

'Remise ö 0 des indicateurs sp_cifiques ö l'enfant car on traite le 2me, 3me,... enfant de la famille
Nom = Range(C_NOM & num_ligne).Value
Prenom = Range(C_PRENOM & num_ligne).Value
FM = 0
FS = 0
NB_ETD_MAT = 0
NB_ETD_MIDI = 0
NB_ETD_SOIR = 0
MT_MAT = 0
MT_MIDI = 0
MT_SOIR = 0
Texte_Cot = ""
'La cotistion n'est demand_e qu'une fois par famille, on ne recherche pas cette info pour le 2me, 3me,... enfant
COT = 1

'Calcul des indicateurs pour le 2me, 3me,... enfants de la famille
If Range(C_FM & num_ligne).Value = "O" Then FM = 1 Else NB_ETD_MAT = Range(C_NB_M & num_ligne).Value
'MsgBox FM
'MsgBox NB_ETD_MAT

'Recherche si forfait midi/soir ou nombre d'_tude du soir
If Range(C_FS & num_ligne).Value = "O" Then FS = 1 Else NB_ETD_SOIR = Range(C_NB_S & num_ligne).Value
'Recherche si forfait midi/soir ou nombre d'_tude du midi
If Range(C_FS & num_ligne).Value = "O" Then FS = 1 Else NB_ETD_MIDI = Range(C_NB_MIDI & num_ligne).Value

'MsgBox FS
'MsgBox NB_ETD_SOIR

'R_cup_ration du montant des _tudes du matin
If FM = 1 Then MT_MAT = 0 Else MT_MAT = Range(C_MT_M & num_ligne).Value
'R_cup_ration du montant des _tudes du soir
If FS = 1 Then MT_SOIR = 0 Else MT_SOIR = Range(C_MT_S & num_ligne).Value
'R_cup_ration du montant des _tudes du midi
If FS = 1 Then MT_MIDI = 0 Else MT_MIDI = Range(C_MT_MIDI & num_ligne).Value
'R_cup_ration du montant total des _tudes
MT_TOT = MT_TOT + MT_MAT + MT_SOIR + MT_MIDI
'MsgBox MT_MAT
'MsgBox MT_SOIR
'MsgBox MT_TOT

End If

'Mis ö jour du texte avec les montants par enfant
If COT = 0 Then Texte_Cot = "Cotisation annuelle obligatoire ˆ l'APE d'un montant de " & MT_COT & " Û." & Chr(10) & Chr(10)
If COT = 0 Then TEXTE_CORPS = Texte_Cot
If FM = 1 Or NB_ETD_MAT = 0 Then Texte_FM = "" Else Texte_FM = "Matin : " & NB_ETD_MAT & " Etude(s) pour un montant unitaire de " & MT_ETD_MAT & "Û soit " & MT_MAT & "Û" & Chr(10)
If FS = 1 Or NB_ETD_MIDI = 0 Then Texte_FMIDI = "" Else Texte_FMIDI = "Midi : " & NB_ETD_MIDI & " Etude(s) pour un montant unitaire de " & MT_ETD_MAT & "Û soit " & MT_MIDI & "Û" & Chr(10)
If FS = 1 Or NB_ETD_SOIR = 0 Then Texte_FS = "" Else Texte_FS = "Soir : " & NB_ETD_SOIR & " Etude(s) pour un montant unitaire de " & MT_ETD_SOIR & "Û soit " & MT_SOIR & "Û" & Chr(10)

'Le texte n'est pas _cris si l'enfant a le forfait du matin et du soir
If (FM = 1 And FS = 1) Or (NB_ETD_MAT = 0 And NB_ETD_MIDI = 0 And NB_ETD_SOIR = 0) Then
Else
TEXTE_CORPS = TEXTE_CORPS & "Enfant " & Nom & " " & Prenom & Chr(10) & Texte_FM & Texte_FMIDI & Texte_FS & Chr(10)
End If

Famille_Prec = Famille

'Initialisation pour passer ö la ligne suivante
num_ligne = num_ligne + 1
Cellule = C_FAMILLE & num_ligne
Famille = Range(Cellule).Value
'MsgBox Nom

Wend

End Sub

Private Sub CommandButton1_Click()

Call ETUDE_APE_

End Sub

Je vous met également le lien du fichier sheets : https://docs.google.com/spreadsheets/d/1Hz5hz860fl5WsKLeRoFB3LN897Lpt4W1KNq09xCJCnM/edit?usp=sharing

Merci beaucoup pour votre aide

Bonjour, et bienvenue

je t'ai demandé une autorisation pour ton fichier

sinon partage a minima en lecture https://www.sheets-pratique.com/fr/cours/partage

non, une macro ne se traduit pas, dans bon nombre de cas, une formule GSheets peut faire l'affaire

ta macro n'est pas lisible car non indentée, il vaudrait mieux que tu décrives les fonctions à réaliser

Bonjour,

Des enfants vont à la garderie, certains payent au réel d'autres au forfait.

Le but est de créer une facture par famille pour les "réels" en fonction de la présence de chaque enfant de la famille, avec des tarifs différents pour matin et soir (1.30€/2€)

Merci

Michael

ok, je vais regarder demain, j'aurais sans doute des questions à te poser, surtout que le fichier n'a quasiment pas de données

Merci beaucoup.

Je joins le fichier de base avec des exemples et les factures générées grâce à la macro Excel.

Je pense que ça pourra aider dans la compréhension.

Juste une petite info en plus, les colonnes "midi" ne servent plus à rien, pas la peine de les intégrer dans la macro.

Pour partager des fichiers avec les familles, je vais mettre les fichiers sur google drive, donc format sheets, et la macro ne fonctionne plus.

Je suis plus que dubitatif ... in fine, la macro est riche, et d'une certaine façon elle traduit en une facture purement textuelle, pourquoi ne pas utiliser word ?

Pourquoi quand on lance la macro, cela produit un nouvel onglet (vide du reste).

Comment se fait le passage d'une famille à l'autre ?

Et qu'est-ce qui sera "partagé" avec les familles ? la mise à jour des données ?

Qu'il s'agisse d'excel ou de google sheets, ce n'est malheureusement pas ma façon d'utiliser un tableur, désolé. Il faudrait d'abord revoir comment structurer les informations et sortir une facture en utilisant des critères de date, de famille, ... et en utilisant avant tout les fonctions qui devraient quasiment suffire (sauf à transférer la facture par mail et/ou l'imprimer en pdf).

Quand j'ai repris la gestion, je voulais effectivement faire une facture word, mais je n'ai pas les compétences techniques pour le faire automatiquement, et la macro mise en place fonctionnait.

Le lancement de la macro créée les factures dans un onglet existant + un autre onglet effectivement, pourquoi, je n'en sais rien...

Pour l'instant, ce tableau-là n'a pour unique vocation a généré les factures automatiquement, il sera pas partagé.

La partage ne sera fait que pour les fiches d'inscription a remplir par les familles et le tableau de pointage des présents par le personnel gérant les études.

Si je comprends bien, il serait presque plus simple de partir sur un publipostage directement dans sheet?

ah, voilà une description plus intéressante en effet !

Pour l'instant, ce tableau-là n'a pour unique vocation a généré les factures automatiquement, il sera pas partagé.

La partage ne sera fait que pour les fiches d'inscription a remplir par les familles et le tableau de pointage des présents par le personnel gérant les études.

cela dépasse encore un peu mes compétences sur google sheets, mais

  1. il serait assez "facile" de faire un formulaire Google pour les familles qui se déverserait automatiquement (c'est l'une des forces de google sheets) dans une base de données
  2. ensuite, pour le pointage des présents, le personnel gérant les études pourrait pointer par une case à cocher les présents
  3. la facture pourrait être aussi structurée

si tu as un peu de temps, je peux regarder mais cela risque de prendre quelques jours ! en faisant appel aussi à des compétences comme GilbertRGI mais aussi en restant le plus simple possible !

S'il y a une solution "facile" pour résoudre tout ça, je suis preneur, je ne suis pas à quelques jours près!

Merci beaucoup pour cette aide précieuse

18bulletin-adhesion.zip (332.40 Ko)
12ri.zip (331.90 Ko)

Voila les documents que je pensais partager avec chaque famille pour inscription. Je pensais lier ça avec une feuille pour pointage enfant par jour et jour par jour.

Et conserver ces éléments d'une année sur l'autre pour éviter aux parents de rentrer chaque des infos qui ne changent jamais (nom, prénom...)

J'ai créé rapidement un formulaire lié à l'inscription et l'ait transformé en base de donnée, mais ça veut dire ensuite qu'il faudrait recréé chaque année les docs sheets (pointage, facturation) à partir des inscrits du début d'année?

C'est très intéressant ... non on put maintenant repartir de la BdD et y définir la feuille de pointage et la facturation

peux-tu mettre un lien vers la BdD ?

Après réflexion cette nuit, j'ai compris qu'on pouvait repartir d'un fichier existant et pas forcément recrée à chaque fois un doc.

Ce que je peut faire c'est travailler un peu plus le formulaire (que j'avais fais en test rapidement), créer les listes de pointage mensuels avec des liens et des fonctions recherche pour éclater la base de données en fonction des différents lieu de garde des enfants.

Une fois que j'ai fais ça, je peut partager mes docs pour se pencher sur la facturation sur laquelle je bloque toujours.

Une question pour moi, peut-on conserver les fiches d'inscriptions remplis pour chaque enfant et les stockés dans un dossier?

Si cette façon de procéder peut convenir, je reviens ici dès que j'ai avancé, mais je n'ai que mes soirées que je partage entre boulot, asso et vie de famille, alors pas forcément cette semaine, mais le plus vite possible.

Une question pour moi, peut-on conserver les fiches d'inscriptions remplis pour chaque enfant et les stockés dans un dossier?

Comme je le disais, je n'ai pas vraiment d'expérience sur ce chapitre. Donc ta démarche m'intéresse de savoir ...

Bonjour,

Le bureau de mon asso préfère se tourner vers un logiciel d'éditeur déjà fonctionnel.

Je vais donc arrêter ma réflexion sur ce sujet que j'aurais adoré pouvoir mener à bien.

Merci beaucoup pour l'échange tout de même enrichissant et l'aide apporté.

Michael

Bonne route alors ... c'est parfois pas plus mal !

Rechercher des sujets similaires à "transposer macro sheets"