J'ai un syst=E8me qui me g=E9n=E8re diff=E9rentes feuilles dans lesquelles =
des
tableaux apparaissent. Tous les tableaux sont au m=EAme format, il peut
y avoir simplement le nombre de ligne qui change, selon le nombre de
donn=E9es.
La derni=E8re ligne du tableau repr=E9sente les totaux. Le texte "Total"
se met automatiquement =E0 la derni=E8re ligne (variable) de la premi=E8re
colonne (toujours colonne A).
Sur cette m=EAme ligne, =E0 la colonne I, je voudrais qu'une simple
formule s'incr=E9mente automatiquement. Cette cellule est toujours vide
au d=E9part.
Par exemple, si le tableau a 7 lignes ;
La cellule A7 aura automatiquement le texte "Total"
formule souhait=E9e : I7 =3D T7
Si le tableau a 16 lignes
La cellule A16 aura automatiquement le texte "Total"
formule souhait=E9e : I16 =3D T16
Ainsi de suite.. Ceci serait ma premi=E8re question
Ma deuxi=E8me question, serait de savoir s'il est possible d'effacer les
feuilles dont les tableaux sont vides.
C'est-=E0-dire que le syst=E8me va me g=E9n=E9rer certains tableaux
automatiquement m=EAme s'il n'y a pas de donn=E9e.
Donc le tableau en soit sera toujours l=E0 mais par exemple, dans la
colonne A il n'y aura pas de texte "Total" =E0 la derni=E8re ligne.
Du coup il n'y aura pas besoin d'appliquer la formule =E0 la cellule de
la derni=E8re ligne de la colonne I, il faudrait donc simplement
supprimer la feuille.
A priori, la macro qui suit fait ce que tu demandes. Attention de bien la tester sur des copies compte tenu des risques d'erreur !
Ceci étant dit, je ne sais pas dans quel contexte tu utilises ce classeur mais il faudrait pouvoir gérer les risques d'erreur, les problèmes liés à un déclenchement successif de la macro, etc. ce qui n'est pas une mince affaire sans connaitre l'organisation des données. A toi de voir s'il ne serait pas préférable de réorganiser tout cela pour travailler avec des formules dans la feuille plutôt que du VBA ...
La macro travaille en inscrivant des formules dans les feuilles et non pas des valeurs.
'------------------------------------------------------------------- Sub efface_et_traite() ' Un classeur doit obligatoirement contenir au moins une feuille ! If ActiveWorkbook.Worksheets.Count = 1 Then Exit Sub ' Suppression des messages d'avertissement Application.DisplayAlerts = False ' Balayage de toutes les feuilles... ' et effacement sans avertisement de celles ' ou le terme "total" ne figure nulle part dans la colonne A For Each sh In ActiveWorkbook.Worksheets derlig = sh.Range("A65432").End(xlUp).Row If Application.WorksheetFunction.CountIf(sh.Range("A1:A" & derlig), "total") = 0 Then If ActiveWorkbook.Worksheets.Count = 1 Then Exit Sub sh.Delete Else ' Mise en place des formules dans la colonne T et en I For Each c In sh.Range("A1:A" & derlig) If UCase(c) = "TOTAL" Then For i = 5 To c.Row - 2 sh.Range("T" & i).Formula = "=(P" & i & "/$P$10)*I" & i Next i sh.Range("T" & c.Row).FormulaLocal = "=SOMME(T5:T" & c.Row - 2 & ")" sh.Range("I" & c.Row).Formula = "=T" & c.Row End If Next c End If Next sh Application.DisplayAlerts = True End Sub '----------------------------------------------------------------------------
-- François L
akar.serkan@gmail.com a écrit :
Merci d'avance.
Re,
A priori, la macro qui suit fait ce que tu demandes. Attention de bien
la tester sur des copies compte tenu des risques d'erreur !
Ceci étant dit, je ne sais pas dans quel contexte tu utilises ce
classeur mais il faudrait pouvoir gérer les risques d'erreur, les
problèmes liés à un déclenchement successif de la macro, etc. ce qui
n'est pas une mince affaire sans connaitre l'organisation des données. A
toi de voir s'il ne serait pas préférable de réorganiser tout cela pour
travailler avec des formules dans la feuille plutôt que du VBA ...
La macro travaille en inscrivant des formules dans les feuilles et non
pas des valeurs.
'-------------------------------------------------------------------
Sub efface_et_traite()
' Un classeur doit obligatoirement contenir au moins une feuille !
If ActiveWorkbook.Worksheets.Count = 1 Then Exit Sub
' Suppression des messages d'avertissement
Application.DisplayAlerts = False
' Balayage de toutes les feuilles...
' et effacement sans avertisement de celles
' ou le terme "total" ne figure nulle part dans la colonne A
For Each sh In ActiveWorkbook.Worksheets
derlig = sh.Range("A65432").End(xlUp).Row
If Application.WorksheetFunction.CountIf(sh.Range("A1:A" & derlig),
"total") = 0 Then
If ActiveWorkbook.Worksheets.Count = 1 Then Exit Sub
sh.Delete
Else
' Mise en place des formules dans la colonne T et en I
For Each c In sh.Range("A1:A" & derlig)
If UCase(c) = "TOTAL" Then
For i = 5 To c.Row - 2
sh.Range("T" & i).Formula = "=(P" & i & "/$P$10)*I" & i
Next i
sh.Range("T" & c.Row).FormulaLocal = "=SOMME(T5:T" & c.Row - 2 & ")"
sh.Range("I" & c.Row).Formula = "=T" & c.Row
End If
Next c
End If
Next sh
Application.DisplayAlerts = True
End Sub
'----------------------------------------------------------------------------
A priori, la macro qui suit fait ce que tu demandes. Attention de bien la tester sur des copies compte tenu des risques d'erreur !
Ceci étant dit, je ne sais pas dans quel contexte tu utilises ce classeur mais il faudrait pouvoir gérer les risques d'erreur, les problèmes liés à un déclenchement successif de la macro, etc. ce qui n'est pas une mince affaire sans connaitre l'organisation des données. A toi de voir s'il ne serait pas préférable de réorganiser tout cela pour travailler avec des formules dans la feuille plutôt que du VBA ...
La macro travaille en inscrivant des formules dans les feuilles et non pas des valeurs.
'------------------------------------------------------------------- Sub efface_et_traite() ' Un classeur doit obligatoirement contenir au moins une feuille ! If ActiveWorkbook.Worksheets.Count = 1 Then Exit Sub ' Suppression des messages d'avertissement Application.DisplayAlerts = False ' Balayage de toutes les feuilles... ' et effacement sans avertisement de celles ' ou le terme "total" ne figure nulle part dans la colonne A For Each sh In ActiveWorkbook.Worksheets derlig = sh.Range("A65432").End(xlUp).Row If Application.WorksheetFunction.CountIf(sh.Range("A1:A" & derlig), "total") = 0 Then If ActiveWorkbook.Worksheets.Count = 1 Then Exit Sub sh.Delete Else ' Mise en place des formules dans la colonne T et en I For Each c In sh.Range("A1:A" & derlig) If UCase(c) = "TOTAL" Then For i = 5 To c.Row - 2 sh.Range("T" & i).Formula = "=(P" & i & "/$P$10)*I" & i Next i sh.Range("T" & c.Row).FormulaLocal = "=SOMME(T5:T" & c.Row - 2 & ")" sh.Range("I" & c.Row).Formula = "=T" & c.Row End If Next c End If Next sh Application.DisplayAlerts = True End Sub '----------------------------------------------------------------------------
-- François L
Serkanao
On Aug 15, 1:26 pm, Francois L wrote:
a écrit :> Merci d'avance.
Ca marche nickel !! J'ai juste changé une ligne
For i = 5 To c.Row - 2 sh.Range("T" & i).Formula = "=(P" & i & "/$P$" & c.Row & ")*I" & i Next i
Merci beaucoup !
On Aug 15, 1:26 pm, Francois L <gardiendeph...@etbalises.fr.invalid>
wrote:
akar.ser...@gmail.com a écrit :> Merci d'avance.
Ca marche nickel !! J'ai juste changé une ligne
For i = 5 To c.Row - 2
sh.Range("T" & i).Formula = "=(P" & i & "/$P$" & c.Row & ")*I" & i
Next i