Banjounet
Messages postés2Date d'inscriptionvendredi 14 décembre 2018StatutMembreDernière intervention14 décembre 2018
-
Modifié le 14 déc. 2018 à 11:39
cs_Le Pivert
Messages postés7893Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention19 mai 2023
-
14 déc. 2018 à 15:01
Bonjour à tous,
Etant méga débutant en VBA j'ai réussi, en récupérant des bouts de code à gauche et à droite, à faire la macro suivante:
Sub RemplissageTableau() Application.ScreenUpdating = False ActiveWorkbook.RefreshAll Dim c As Range Dim LigneBlanche LigneBlanche = "=IF(OR(RC13=""AGPRO"",RC13=""AGTEC"",RC13=""AGING"",RC13=""AGAPP""),0,RC[-2])" For I = 12 To Sheets.Count With Sheets(I) For Each c In .Range("T1:U250") If c.Interior.Color = 16777214 Then c.Formula = LigneBlanche Next c End With Total Next I End Sub
Celle ci me permet de checker toutes les cellules de la plage T1:U250 et d'insérer dans celle donc la couleur "16777214" (blanc) la formule LigneBlanche.
Cette macro fonctionne très bien.
Cependant, le tableau concerné va être repris par différent service, et il est probable qu'il dépasse la ligne 250 et que la couleur du tableau soit modifiée (les goûts et les couleurs).
Je sais qu'il est possible de faire un code permettant de faire en sorte que la Macro vérifie tout les lignes d'une colonne avec
LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
Mais cela dépasse mes compétences, je comprend pas comme cela fonctionne...
De plus je sais que les indices de couleurs dans les macro sont pas conseillés. Du coup est-il possible de faire en sort que la macro insère une formule dans les cases de la colonnes T et U si celle des colonnes R et S ne sont pas vide ?
Ya t il une âme charitable pour m'aider et pour m'expliquer comment cela fonctionne ?!
cs_Le Pivert
Messages postés7893Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention19 mai 2023136 14 déc. 2018 à 12:07
Bonjour,
comme ceci:
Dim c As Range
With Sheets("Feuil1")
For Each c In .Range("T1:U" & Range("U" & Rows.Count).End(xlUp).Row)
If c.Value = "" Then MsgBox c.Address & "vide" 'c.Formula = LigneBlanche
Next c
End With
Banjounet
Messages postés2Date d'inscriptionvendredi 14 décembre 2018StatutMembreDernière intervention14 décembre 2018 Modifié le 14 déc. 2018 à 14:59
Bonjour,
Merci pour l'aide, mais de nouveaux problèmes sont apparu avoir adapté ton code.
J'ai donc ces codes la maintenant:
Sub RemplissageTableau() Application.ScreenUpdating = False ActiveWorkbook.RefreshAll Dim c As Range Dim EffNec EffNec = "=IF(OR(RC13=""AGPRO"",RC13=""AGTEC"",RC13=""AGING"",RC13=""AGAPP""),0,RC[-2])"
For I = 12 To Sheets.Count With Sheets(I) For Each c In .Range("T1:U" & Range("U" & Rows.Count).End(xlUp).Row) If c.Value = "" Then c.Formula = EffNec Next c End With Next I Total End Sub
Et
Sub Total() Dim LastLig As Long, Deb As Long, Fin As Long Dim T As Double, U As Double Dim Prem As String Dim c As Range
For I = 12 To Sheets.Count With Sheets(I) LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row Set c = .Range("B2:B" & LastLig).Find("Total*", LookIn:=xlValues, lookat:=xlPart) Deb = 2 If Not c Is Nothing Then Prem = c.Address Do Fin = c.Row - 1 .Range("T" & Fin + 1).Formula = "=SUMIF(E" & Deb & ":E" & Fin & ",""<>"",T" & Deb & ":T" & Fin & ")" .Range("U" & Fin + 1).Formula = "=SUM(U" & Deb & ":U" & Fin & ")" Deb = Fin + 2 T = T + .Range("T" & Fin + 1) U = U + .Range("U" & Fin + 1) Set c = .Range("B2:B" & LastLig).FindNext(c) Loop While Not c Is Nothing And c.Address <> Prem End If .Range("T" & LastLig).Resize(, 2) = Array(T, U)
End With Next I End Sub
Je sais pas pourquoi mais quand j'execute la macro RemplissageTableau à l'aide d'un bouton, il n'y à que la Macro Total qui s'enclenche...
Et le 2e problème est que la Macro s'éxecute bien sur les onglets concerné (de 12 à 17) Mais elle sur les feuilles 13 à 17 elle s'éxecute sur les mêmes lignes que le tableau feuille 12, alors que les tableau sont plus grand ou plus petit :(
cs_Le Pivert
Messages postés7893Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention19 mai 2023136 14 déc. 2018 à 15:01
Dans la macro RemplissageTableau il n'y a pas le lancement de la macro Total. Donc tu as sans doute omis de tout expliqué!