Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…