Insérer une formule dans une macro

Titi91

XLDnaute Nouveau
Bonjour,

Je voudrais inserer differentes formules dans mon fichier. Quand j'utilise l'enregistreur de macro d'Excel, j'enregistre des formules spécifiques à un tableau. Mon probleme est que mon tableau ci joint finit à la ligne 327 et la formules s'arrete à cette derniere ligne. Je ne sais pas quelle expression inscrire pour qu'a chaque fois la formule de la macro s'adapte à un tableau avec un nombre de ligne différent. Voici ce que donne ma fonction Si souhaitée:

Sub FonctionSI()
'
' Fonction Macro
'

'
ActiveCell.FormulaR1C1 = "=IF(RC[-1]<=0,RC[-1]*-1,"""")"
Range("G3").Select
Selection.AutoFill Destination:=Range("G3:G327"), Type:=xlFillDefault
Range("G3:G327").Select
ActiveWindow.ScrollRow = 286
ActiveWindow.ScrollRow = 285
ActiveWindow.ScrollRow = 284
ActiveWindow.ScrollRow = 283
ActiveWindow.ScrollRow = 282
ActiveWindow.ScrollRow = 281
ActiveWindow.ScrollRow = 280
ActiveWindow.ScrollRow = 278
ActiveWindow.ScrollRow = 276
ActiveWindow.ScrollRow = 273
ActiveWindow.ScrollRow = 270
ActiveWindow.ScrollRow = 266
ActiveWindow.ScrollRow = 264
ActiveWindow.ScrollRow = 260
ActiveWindow.ScrollRow = 257
ActiveWindow.ScrollRow = 252
ActiveWindow.ScrollRow = 248
ActiveWindow.ScrollRow = 243
ActiveWindow.ScrollRow = 239
ActiveWindow.ScrollRow = 234
ActiveWindow.ScrollRow = 229
ActiveWindow.ScrollRow = 225
ActiveWindow.ScrollRow = 219
ActiveWindow.ScrollRow = 214
ActiveWindow.ScrollRow = 209
ActiveWindow.ScrollRow = 203
ActiveWindow.ScrollRow = 198
ActiveWindow.ScrollRow = 192
ActiveWindow.ScrollRow = 186
ActiveWindow.ScrollRow = 179
ActiveWindow.ScrollRow = 174
ActiveWindow.ScrollRow = 168
ActiveWindow.ScrollRow = 162
ActiveWindow.ScrollRow = 156
ActiveWindow.ScrollRow = 150
ActiveWindow.ScrollRow = 145
ActiveWindow.ScrollRow = 140
ActiveWindow.ScrollRow = 135
ActiveWindow.ScrollRow = 130
ActiveWindow.ScrollRow = 125
ActiveWindow.ScrollRow = 120
ActiveWindow.ScrollRow = 114
ActiveWindow.ScrollRow = 110
ActiveWindow.ScrollRow = 105
ActiveWindow.ScrollRow = 101
ActiveWindow.ScrollRow = 95
ActiveWindow.ScrollRow = 91
ActiveWindow.ScrollRow = 88
ActiveWindow.ScrollRow = 84
ActiveWindow.ScrollRow = 80
ActiveWindow.ScrollRow = 75
ActiveWindow.ScrollRow = 71
ActiveWindow.ScrollRow = 68
ActiveWindow.ScrollRow = 64
ActiveWindow.ScrollRow = 61
ActiveWindow.ScrollRow = 57
ActiveWindow.ScrollRow = 53
ActiveWindow.ScrollRow = 50
ActiveWindow.ScrollRow = 46
ActiveWindow.ScrollRow = 43
ActiveWindow.ScrollRow = 40
ActiveWindow.ScrollRow = 38
ActiveWindow.ScrollRow = 35
ActiveWindow.ScrollRow = 33
ActiveWindow.ScrollRow = 31
ActiveWindow.ScrollRow = 30
ActiveWindow.ScrollRow = 28
ActiveWindow.ScrollRow = 26
ActiveWindow.ScrollRow = 24
ActiveWindow.ScrollRow = 22
ActiveWindow.ScrollRow = 20
ActiveWindow.ScrollRow = 19
ActiveWindow.ScrollRow = 16
ActiveWindow.ScrollRow = 14
ActiveWindow.ScrollRow = 12
ActiveWindow.ScrollRow = 10
ActiveWindow.ScrollRow = 8
ActiveWindow.ScrollRow = 7
ActiveWindow.ScrollRow = 6
ActiveWindow.ScrollRow = 4
ActiveWindow.ScrollRow = 3
ActiveWindow.ScrollRow = 1
Selection.NumberFormat = "0.00"
ActiveWindow.SmallScroll Down:=312
ActiveWindow.ScrollRow = 311
ActiveWindow.ScrollRow = 310
ActiveWindow.ScrollRow = 308
ActiveWindow.ScrollRow = 306
ActiveWindow.ScrollRow = 304
ActiveWindow.ScrollRow = 302
ActiveWindow.ScrollRow = 300
ActiveWindow.ScrollRow = 296
ActiveWindow.ScrollRow = 293
ActiveWindow.ScrollRow = 289
ActiveWindow.ScrollRow = 286
ActiveWindow.ScrollRow = 283
ActiveWindow.ScrollRow = 278
ActiveWindow.ScrollRow = 274
ActiveWindow.ScrollRow = 269
ActiveWindow.ScrollRow = 265
ActiveWindow.ScrollRow = 260
ActiveWindow.ScrollRow = 255
ActiveWindow.ScrollRow = 250
ActiveWindow.ScrollRow = 245
ActiveWindow.ScrollRow = 239
ActiveWindow.ScrollRow = 234
ActiveWindow.ScrollRow = 229
ActiveWindow.ScrollRow = 223
ActiveWindow.ScrollRow = 218
ActiveWindow.ScrollRow = 213
ActiveWindow.ScrollRow = 207
ActiveWindow.ScrollRow = 201
ActiveWindow.ScrollRow = 196
ActiveWindow.ScrollRow = 191
ActiveWindow.ScrollRow = 185
ActiveWindow.ScrollRow = 179
ActiveWindow.ScrollRow = 173
ActiveWindow.ScrollRow = 168
ActiveWindow.ScrollRow = 162
ActiveWindow.ScrollRow = 155
ActiveWindow.ScrollRow = 149
ActiveWindow.ScrollRow = 143
ActiveWindow.ScrollRow = 136
ActiveWindow.ScrollRow = 130
ActiveWindow.ScrollRow = 124
ActiveWindow.ScrollRow = 119
ActiveWindow.ScrollRow = 114
ActiveWindow.ScrollRow = 108
ActiveWindow.ScrollRow = 103
ActiveWindow.ScrollRow = 97
ActiveWindow.ScrollRow = 91
ActiveWindow.ScrollRow = 85
ActiveWindow.ScrollRow = 79
ActiveWindow.ScrollRow = 73
ActiveWindow.ScrollRow = 68
ActiveWindow.ScrollRow = 63
ActiveWindow.ScrollRow = 57
ActiveWindow.ScrollRow = 51
ActiveWindow.ScrollRow = 47
ActiveWindow.ScrollRow = 41
ActiveWindow.ScrollRow = 36
ActiveWindow.ScrollRow = 32
ActiveWindow.ScrollRow = 28
ActiveWindow.ScrollRow = 24
ActiveWindow.ScrollRow = 20
ActiveWindow.ScrollRow = 15
ActiveWindow.ScrollRow = 11
ActiveWindow.ScrollRow = 5
ActiveWindow.ScrollRow = 2
ActiveWindow.ScrollRow = 1
Range("H3").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-2]>0,RC[-2],"""")"
Range("H3").Select
Selection.AutoFill Destination:=Range("H3:H327"), Type:=xlFillDefault
Range("H3:H327").Select
End Sub

Je vous remercie encore de votre aide
 

Pièces jointes

  • format.xls
    126.5 KB · Affichages: 609
  • format.xls
    126.5 KB · Affichages: 734
  • format.xls
    126.5 KB · Affichages: 752

DoubleZero

XLDnaute Barbatruc
Re : Insérer une formule dans une macro

Bonjour, Titi91, le Forum,

Titi91, bienvenue :) sur XLD !

En pièce jointe, une façon de procéder.

Nota : toutes les lignes mentionnant "ActiveWindow.ScrollRow = ..." peuvent être supprimées.

Bon courage et à bientôt.
 

Pièces jointes

  • 00 - Titi91.zip
    35 KB · Affichages: 48

Hippolite

XLDnaute Accro
Re : Insérer une formule dans une macro

Bonjour,
En supprimant toutes les sélections qui ne servent qu'à ralentir le code (voir ici) , en supprimant les defilements d'écran + avec la recherche de la dernière ligne dont tu avais la formule dans ton module3, on devrait obtenir quelquechose comme
Code:
Sub FonctionSI()
    derlign = Range("B" & Rows.Count).End(xlUp).Row 'trouve la dernière ligne de la colonne B
    ActiveCell.FormulaR1C1 = "=IF(RC[-1]<=0,RC[-1]*-1,"""")"
    Range("G3").AutoFill Destination:=Range("G3:G" & derlign), Type:=xlFillDefault
    Range("G3:G" & derlign).NumberFormat = "0.00"
    Range("H3").FormulaR1C1 = "=IF(RC[-2]>0,RC[-2],"""")"
    Range("H3").AutoFill Destination:=Range("H3:H" & derlign), Type:=xlFillDefault
    Range("H3:H" & derlign).Select
End Sub
A+

Pas rafraîchi, Bonjour 00
 
Dernière édition:

Titi91

XLDnaute Nouveau
Re : Insérer une formule dans une macro

Merci, a tous pour vos reponse, grace à vous j'ai pu trouver la formule la plus concise que je pouvais trouver. la voici, encore merci à tous :)

Sub FonctionSI()
'
' Fonction Macro
'

'
derlign = Range("B" & Rows.Count).End(xlUp).Row 'trouve la dernière ligne de la colonne B
With Range("G3:G" & derlign)
.FormulaR1C1 = "=IF(RC[-1]<=0,RC[-1]*-1,"""")"
.NumberFormat = "0.00"
End With
Range("H3:H" & derlign).FormulaR1C1 = "=IF(RC[-2]>0,RC[-2],"""")"
End Sub
 

Statistiques des forums

Discussions
312 107
Messages
2 085 355
Membres
102 874
dernier inscrit
Petro2611