Faire varier un bout de fonction

Tiblar - 15 mars 2013 à 17:14
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 18 mars 2013 à 10:49
Bonjour à tous,

J'ai la macro suivante, basée sur un fichier de données réactualisé tous les mois :

Sub Traitement_Données()

Sheets("TRAITEMENT").Select

Dim wnbligne As Integer

wnbligne = ActiveCell.SpecialCells(xlLastCell).Row
MsgBox wnbligne

For i = 2 To wnbligne

Range("P2").Select
Range("P2:P" & i).FormulaR1C1 = "=IFERROR(R1C16-RC[-7],361)"

Next
For i = 2 To wnbligne

wnbjour = Range("P" & i).Value

Select Case (wnbjour)

Case Is > 360

Range("l" & i).Select
ActiveCell.FormulaR1C1 = 1

Range("m" & i).Select
ActiveCell.ClearContents

Range("n" & i).Select
ActiveCell.ClearContents

Range("o" & i).Select
ActiveCell.ClearContents


Case 180 To 360

Range("l" & i).Select
ActiveCell.ClearContents

Range("m" & i).Select
ActiveCell.FormulaR1C1 = 1

Range("n" & i).Select
ActiveCell.ClearContents

Range("o" & i).Select
ActiveCell.ClearContents

Case 90 To 180

Range("l" & i).Select
ActiveCell.ClearContents

Range("m" & i).Select
ActiveCell.ClearContents

Range("n" & i).Select
ActiveCell.FormulaR1C1 = 1

Range("o" & i).Select
ActiveCell.ClearContents

Case Is < 90

Range("l" & i).Select
ActiveCell.ClearContents

Range("m" & i).Select
ActiveCell.ClearContents

Range("n" & i).Select
ActiveCell.ClearContents

Range("o" & i).Select
ActiveCell.FormulaR1C1 = 1

End Select

Next

'Copier titres
Range("R1").Select
ActiveCell.FormulaR1C1 = "TOTAL"

Range("L1:O1").Select
Selection.Copy
Range("S1").Select
ActiveSheet.Paste

Range("S2").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(3,RC[-7]:R[20000]C[-7])"
Selection.AutoFill Destination: =Range("S2:V2"), Type:=xlFillDefault

Range("S3").Select
ActiveCell.FormulaR1C1 = "=R[-1]C/R2C18"
Selection.AutoFill Destination:=Range("S3:V3"), Type:=xlFillDefault

Range("R2").Select
ActiveCell.FormulaR1C1 = "=RC[1]+RC[2]+RC[3]+RC[4]"

Sheets("Formulaire").Select

End Sub


Je voudrais intégrer mon nombre de ligne à ma formule "subtotal", ce qui ne marche pas avec les &

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
15 mars 2013 à 17:38
Salut

Code illisible (trop petit et pas d'indentation du code) : Utilise la coloration syntaxique = 3ème icone à droite.
Ne colle que le code en rapport avec le sujet.

" ce qui ne marche pas avec les & "
C'est parce que tu l'as surement mal écrite.
Quelle est donc cette ligne que tu as essayée ?

Simplifie ton programme (issu, ça se voit, de l'enregistreur de macro) : Essaye de supprimer toute référence à .Select (perte de temps inutile).
Exemple :
Range("S3").Select
ActiveCell.FormulaR1C1  = "=R[-1]C/R2C18"
Selection.AutoFill Destination:=Range("S3:V3"), Type:=xlFillDefault
peut être remplacé par
With Range("S3")
    .FormulaR1C1 = "=R[-1]C/R2C18"
    .AutoFill Destination:=Range("S3:V3"), Type:=xlFillDefault
End With

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
15 mars 2013 à 18:41
ActiveCell.FormulaR1C1 = "=SUBTOTAL(3,RC[-7]:R[20000]C[-7])"
devrait pouvoir être changé comme suit

= "=SUBTOTAL(3,RC[-7]:R[" & nbLignes & "]C[-7])"


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Il faut mettre des parenthèses simplement mais merci des conseils, j'ai copié le code comme ça mais il y a l'indentation sur ma page de macros, je n'envoie juste pas trés souvent de msg sur le forum!!!

Je sais que la macros peut être simplifiée mais je débute pour le moment et le but n'est pas de faire un fichier qui fonctionne en 2sec mais qui marche
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 mars 2013 à 10:49
Bonjour,
Je sais que la macros peut être simplifiée mais je débute pour le moment et le but n'est pas de faire un fichier qui fonctionne en 2sec mais qui marche

Ce n'est pas une "simplification", dont jack t'a parlé à propos de l'utilisation de Select pour ensuite agir sur la sélection faite, mais bel et bien d'éthique, de syntaxe et de logique. Et cette approche est essentielle. Et ce : dès les tous premiers pas.
Te viendrait-il à l'idée, par exemple, pour multiplier 11 par 3, d'utiliser des bûchettes, d'en faire 3 tas de 11, puis de compter combien de bûchettes tu as ainsi utilisées au total ? ===>> J'espère que non, hein ...

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Rejoignez-nous