Macro Inserer une formule avec condition

Messages postés
2
Date d'inscription
vendredi 14 décembre 2018
Dernière intervention
14 décembre 2018
-
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 ?!

Un grand merci d'avance pour vos retour!
Afficher la suite 

Votre réponse

2 réponses

Messages postés
5703
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
19 janvier 2019
467
0
Merci
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


Commenter la réponse de cs_Le Pivert
Messages postés
2
Date d'inscription
vendredi 14 décembre 2018
Dernière intervention
14 décembre 2018
0
Merci
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és
5703
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
19 janvier 2019
467 -
Dans la macro RemplissageTableau il n'y a pas le lancement de la macro Total. Donc tu as sans doute omis de tout expliqué!
Commenter la réponse de Banjounet

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.