generer formule par macro [vba excel] - VB/VBA/VBS - Programmation
Marsh Posté le 25-12-2005 à 08:31:16
Bonjour bill751
Ceci a placer dans un module, le code pourrait être plus propre, il y a une gestion d'erreur de saisie:
Sub sommeD5()
Dim D5F1 As Double, D5F2 As Double, D5F3 As Double
Dim D5F4 As Double, D5F5 As Double
Dim LaSomme As Double
' pour gérer l'erreur de saisie
Err = 0
On Error Resume Next
D5F1 = Sheets("f1" ).Range("D5" )
D5F2 = Sheets("f2" ).Range("D5" )
D5F3 = Sheets("f3" ).Range("D5" )
D5F4 = Sheets("f4" ).Range("D5" )
D5F5 = Sheets("f5" ).Range("D5" )
Debug.Print Err
' test si toutes les valeurs sont numériques
If Err = 0 Then
LaSomme = D5F1 + D5F2 + D5F3 + D5F4 + D5F5
If LaSomme <> 0 Then
Sheets("f5" ).Range("D5" ) = LaSomme
Else
D5F5 = ""
End If
Else
MsgBox ("Attention une valeur, au moins, n'est pas numérique ! " )
End If
End Sub
Cordialement Pifa
Marsh Posté le 25-12-2005 à 17:45:30
merci; mais j ai bien dit que je souhaite que la cellule soit valorisée par une formule du type =si(somme<>0;gna gna gna;"" ) pour rester dynamique
Marsh Posté le 26-12-2005 à 06:53:58
Bonjour
Avec ceci en cellule D5 de la feuille f5:
=SI('f1'!D5+'f2'!D5+'f3'!D5+'f4'!D5<>0;'f1'!D5+'f2'!D5+'f3'!D5+'f4'!D5;"" ), mais la réponse n'était-elle pas déjà presque complète dans la question ?
Cordialement
Pifa
Marsh Posté le 27-12-2005 à 22:37:12
merci.disons aussi que mon ombre de pages est variable et que je dois créer une formule pour plusieurs cellule.J y arrive maintenant, mais tant que je n ai pas cliqué dans la cellulé et appuyé sur la touche ENTREE le contenu de la cellule est à #NOM?
après avoir cliqué dans la cellule et sur la touche ENTREE tout rentre dans l ordre ...
Un exemple de formule que je génère ainsi :
=SI(SOMME(BILL:REDON!I10)<>0;SOMME(BILL:REDON!I10);"" )
en utilisant le code suivant :
Windows(nomfichierMENU).Activate
Dim PlageTaches As Object
Set PlageTaches = Worksheets("BaseTaches" ).Cells(1, 1).CurrentRegion
Dim PlageMois As Object
Set PlageMois = Worksheets("BaseMois" ).Cells(1, 1).CurrentRegion
Windows(nomfichierINDIVIDU).Activate
For i = 1 To PlageRessources.Rows.Count + 1
For imois = 1 To PlageMois.Rows.Count
formule = "SUM('" + TacheDebut + ":" + TachefIn + "'!RC)"
formuleSi = "=SI(" + formule + "<>0," + formule + ","""" )"
Cells(numligjoursMOIS + i, numcoldebutmois + imois - 1).FormulaR1C1 = formuleSi
Next imois
Next i
For imois = 1 To PlageMois.Rows.Count
formule = "SUM('" + TacheDebut + ":" + TachefIn + "'!RC)"
formuleSi = "=SI(" + formule + "<>0," + formule + ","""" )"
Cells(numLigCUMPREV, numcoldebutmois + imois - 1).FormulaR1C1 = formuleSi
Next imois
Marsh Posté le 30-12-2005 à 02:51:23
on m a donné la solution : remplacer mes SI par des IF et là c est tout bon !!
Marsh Posté le 24-12-2005 à 09:23:13
bonjour je fais du VBA avec excel.
Dans mon classeur j ai feuille1 à feuille5 appelées f1 à f5
je veux générer par macro une formule que j insere en D5 de la feuillef5;
la formule doit etre :
si somme des D5 de f1 à f4 est non nulle, alors formule D5 = somme des D5 de f1 à f4
si somme des D5 de f1 à f4 est nulle, alors formule D5 = " "
(en fait je veux rien afficher si resultat est nul)
quelle est la sequence d instructions à ecrire pour valoriser d5 de f5 correctement ?