VBA - Pieds de colonne avec somme

Bonjour à tous,

Voilà j'arrive presque à la fin de mon tableau, il est vraiment sympa et j'ai pu réitérer les différentes macro pour plusieurs onglets, en galérant un peu mais c'est aussi le but du jeu

C'est grâce à vos différentes participations que j'en suis rendu à ce point là et je vous en remercie.

Aujourd'hui, je souhaiterai afficher en bas de colonne comme sur le fichier en PJ en rouge des informations Total correspondantes.

2 problématiques.

La première, le nombre de ligne est variable, il peut il y avoir 5 personnels ou 50 c'est dans le champ Affectation E10 que ça impacte le nombre de personnels,

La seconde, il y a une macro de nettoyage de ligne avec classement de numéro INSEE et suppression des lignes à 0€ (Merci Banzai64) et également une autre macro pour réinitialiser le tableau avec tous les personnels.

En vous remerciant par avance de toute l'aide apportée.

Bien cordialement.

Bonjour le forum,

Pour le 1er problème : Totaux des colonnes quel que soit le nombre de ligne(s).

mbbp

14totaux.xlsm (185.26 Ko)

Bonjour

A tester

Bonsoir,

Merci bien à tous les deux, c'est vraiment sympa de votre part.

Pour Banzai64, j'ai commencé à mettre les mains dans le code car en fait dans l'avenir chaque affectation aura ce fichier mais je bloquerai cette boite déroulante. Exemple l'affectation 1 ne doit pas accéder aux informations de l'affectations 2. Je garde cette boite déroulante pour moi afin d'avoir un visuel sur tous les personnels > 800. En fait je ne vais pas faire 40 fichiers différents, mais 1 seul avec la boite déroulante bloqué pour l'affectation concerné. Et puis pour les futures MAJ du classeur ce sera plus facile pour redistribuer.

Sans vouloir trop te demander ce serait possible que tu puisses remettre le bouton initialiser le formulaire avec le code VBA correspondant ? Car je ne parvient pas à le faire correctement.

Le but de ce bouton étant que si par exemple une fois que la personne qui à fini de renseigner le planning, clique sur le bouton "Formater pour l'impression" se rends compte qu'elle à oublié des saisies dans le planning, le fait "d'initialiser le formulaire" permet de retourner sur planning et une fois fini de cliquer sur "formater pour l'impression" pour prendre en compte les changement.

Je sais pas si mes explications sont claires.

Par ailleurs, le bon code avec les dernières mises à jours notamment au niveau du formatage numéro INSEE et petites modifications que tu as pû effectuer ultérieurement sont dans le code suivant :

Sub InitialiseFormule()
  Application.ScreenUpdating = False
  Range("B18").Formula = "=IF(Personnels!A1="""","""",MID(Personnels!A1,2,1)&"" ""&MID(Personnels!A1,3,2)&"" ""&MID(Personnels!A1,5,2)&"" ""&MID(Personnels!A1,7,2)&"" ""&MID(Personnels!A1,9,3)&"" ""&MID(Personnels!A1,12,3)&"" ""&CHAR(124)&"" ""&MID(Personnels!A1,15,2))"
  Range("C18").Formula = "=Personnels!F1"
  Range("D18").Formula = "=IF(INDIRECT(""Planning!""&ADDRESS(1,ROW()-15))="""","""",INDIRECT(""Planning!""&ADDRESS(1,ROW()-15)))"
  Range("E18").Formula = "=Personnels!C1"
  Range("F18").Formula = "=IF(D18="""","""",INDIRECT(""Planning!""&ADDRESS(34,ROW()-15)))"
  Range("G18").Formula = "=IF(D18<>"""",10,"""")"
  Range("H18").Formula = "=IF(D18<>"""",F18*G18,"""")"
  Range("I18").Formula = "=IF(D18="""","""",INDIRECT(""Planning!""&ADDRESS(35,ROW()-15)))"
  Range("J18").Formula = "=IF(G18<>"""",40,"""")"
  Range("K18").Formula = "=IF(G18<>"""",I18*J18,"""")"
  Range("L18").Formula = "=IF(D18<>"""",H18+K18,"""")"
  Range("B18:L18").AutoFill Destination:=Range("B18:L181"), Type:=xlFillSeries
End Sub

et

Sub Nettoyage()
Dim NbLg As Long

  Application.ScreenUpdating = False
  NbLg = Columns("B:L").Find(what:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
  Range("B18:L" & NbLg).Value = Range("B18:L" & NbLg).Value
  With Range("M18:M" & NbLg)
    .Formula = "=IF(OR(L18=0,L18=""""),"""",""X"")"
    .Value = .Value
    On Error Resume Next
    .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    On Error GoTo 0
    .ClearContents
  End With
  NbLg = Columns("B:L").Find(what:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
  With Range("M18:M" & NbLg)
    .Formula = "=LEFT(B18,1)&MID(B18,3,2)*1"
    .Value = .Value
    Range("A18:M" & NbLg).Sort key1:=Range("M18"), order1:=xlAscending, dataoption1:=xlSortNormal, Header:=xlNo
    .ClearContents
  End With

End Sub

Merci bien par avance et bonne soirée.

Cordialement.

Bonsoir

dyscus a écrit :

une fois que la personne qui à fini de renseigner le planning, clique sur le bouton "Formater pour l'impression" se rends compte qu'elle à oublié des saisies dans le planning, le fait "d'initialiser le formulaire" permet de retourner sur planning et une fois fini de cliquer sur "formater pour l'impression" pour prendre en compte les changement.

Rien ne t'empêche de sélectionner de nouveau la structure (dans la liste déroulante tu choisis le même) et ton tableau est réinitialisé avec les formules

Re bonsoir,

OK d'accord, par contre comment faire pour avoir de la police verdana en 10 sur toute les cases en bas de tableau et la somme totale à l'extrême-droite en verdana 10 Gras?

Ca se joue par ici ?

  .Font.Bold = True

J'ai réussi à enlever la couleur rouge

Merci par avance.

Bonsoir

Testes cette macro

Sub LigneTotal(Ligne As Long)
  Range("H" & Ligne & ",K" & Ligne & ":L" & Ligne).NumberFormat = "#,##0 $"
  Range("H" & Ligne & ",K" & Ligne & ":L" & Ligne).Formula = "=SUM(H18:H" & Ligne - 1 & ")"
  Range("F" & Ligne & ",I" & Ligne).Value = "Total"
  With Range("F" & Ligne & ":G" & Ligne & ",I" & Ligne & ":J" & Ligne)
    .Merge
    .Font.Bold = True
  End With
  With Range("F" & Ligne).Resize(1, 7)
    .Font.Name = "verdana"
    .Font.Size = 10
    '.Interior.ColorIndex = 3
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
    .Borders.Weight = xlThin
  End With
  Range("L" & Ligne).Font.Bold = True
End Sub
dyscus a écrit :

J'ai réussi à enlever la couleur rouge

Mais c'est toi qui l'avait mise dans ton exemple

Merci je vais tester, excuse moi j'avais mis cette couleur pour aider à la compréhension.

Je vais tester cela.

Merci bien.

Cordialement.

Ca fonctionne très bien merci. Je suis parvenu à rajouter ceci dans la macro initialise afin de centrer verticalement en plus d'horizontalement. :

Range("B18:L" & NbLg).VerticalAlignment = xlCenter

Avant de demander j'essaye de comprendre un peu ce que tu fais, même si je suis loin d'arriver à tes chevilles

Merci encore et bonne nuit.

Bien cordialement.

Une dernière petite question, j'ai égaré la fonction qui classait les numéros INSEE "homme puis femme" puis du "plus vieux au plus jeune"

Le code VBA initial qui comprend cette fonction importante est celui-ci :

Sub Nettoyage()
Dim NbLg As Long

  Application.ScreenUpdating = False
  NbLg = Columns("B:L").Find(what:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
  Range("B18:L" & NbLg).Value = Range("B18:L" & NbLg).Value
  With Range("M18:M" & NbLg)
    .Formula = "=IF(OR(L18=0,L18=""""),"""",""X"")"
    .Value = .Value
    On Error Resume Next
    .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    On Error GoTo 0
    .ClearContents
  End With
  NbLg = Columns("B:L").Find(what:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
  With Range("M18:M" & NbLg)
    .Formula = "=LEFT(B18,1)&MID(B18,3,2)*1"
    .Value = .Value
    Range("A18:M" & NbLg).Sort key1:=Range("M18"), order1:=xlAscending, dataoption1:=xlSortNormal, Header:=xlNo
    .ClearContents
  End With

End Sub

Et le nouveaux code d'aujourd'hui :

Sub Nettoyage()
Dim NbLg As Long

  Application.ScreenUpdating = False
  NbLg = Columns("B:L").Find(what:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
  Range("B18:L" & NbLg).Value = Range("B18:L" & NbLg).Value
  With Range("M18:M" & NbLg)
    .Formula = "=IF(OR(L18=0,L18=""""),"""",""X"")"
    .Value = .Value
    On Error Resume Next
    .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    On Error GoTo 0
    .ClearContents
  End With
  NbLg = Range("B" & Rows.Count).End(xlUp).Row + 1
  'LigneTotal NbLg
  Range("F" & NbLg).Resize(1, 7).Value = Range("F" & NbLg).Resize(1, 7).Value
End Sub

J'ai tenté quelques tests mais je tombe toujours sur une erreur

Merci par avance pour ce coup de pouce.

Cordialement.

Bonsoir

A vérifier

Bonjour à tous,

Cela fonctionne parfaitement, merci bien Banzai64.

Depuis ce matin, j'essaye d'adapter les 3 macros (initialise, nettoyage et LigneTotal pour un tableau supplémentaire, mais je n'y parviens pas

Le tableau est un poil différent (moins de colonne), j'ai même imprimé les 3 macros sur papier pour essayer de mieux comprendre la macro initiale et essayer de l'adapter aux nouvelles valeurs des colonnes, sans succès c'est dire.

Je m'en remets donc à vous.

Ci joint le tableau additionnel.

Bonjour

A tester

Bonjour,

Merci bien Banzai64.

Ce tableau une fois qu'il sera fini je le mettrai bien en page et je le posterai car il pourra peut-être intéressé quelqu'un qui effectue de l'indemnitaire.

Juste 2 points :

- Comment faire formater la police des lignes en Verdana 10 ?

- Comment faire pour les colonnes G et H afficher un chiffre avec 2 décimale ainsi que le sigle €.

Merci bien par avance.

Cordialement.

Bonjour

A vérifier

Re,

C'est super tout est intégré.

Merci bien et bonne soirée.

Rechercher des sujets similaires à "vba pieds colonne somme"