Bonjour,
Dans un tableau o=F9 j'utilise la somme automatique, le=20
calcul n'est pas exact si des cellules sont vides.
Existe-t-il une solution autre que de mettre des 0 dans=20
les cellules vides pour obtenir un bon r=E9sultat?
Merci =E0 l'avance!
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
AB
Bonjour Hélène, En effet, et c'est...barbant Personnellement, j'utilise une macro (qui serait à améliorer par de vrais macroteurs), à laquelle j'ai affecté le bouton "somme automatique", qui donne le bon résultat, et qui met les zéros à ma place. C'est un bricolage qui me suffit. Si tu dois faire de fréquents calculs, mieux vaut utiliser Excel. AB
Sub SommeColonneTableau3() Dim Contenu As String Dim nbCol, NbLig, NbCel, i, j, z As Integer
If Selection.Information(wdWithInTable) = True Then GoSub RAZ With Selection 'repérage de la cellule où on veut mettre la formule ligne = .Information(wdStartOfRangeRowNumber) colonne = .Information(wdStartOfRangeColumnNumber) End With acount = ActiveDocument.Range(0, Selection.Range.End).Tables.Count
ActiveDocument.Tables(acount).Select For i = ligne - 1 To 1 Step -1 'balayage des cellules au dessus ActiveDocument.Tables(acount).Cell(i, colonne).Select GoSub SelectionCellule If Terme1 < 33 Or Terme1 = 45 Then 'élimination des blancs éventuels en début de texte GoSub SuppressionBlancs End If GoSub SelectionCellule For z = 1 To Len(Contenu) - 2 T = Mid(Contenu, z, 1) Code = Asc(T) If (Code < 48 Or Code > 57) And (Code <> 45 And Code <> 43 And Code <> 46 And Code <> 44 And Code <> 32) Then GoTo 100 Next z Selection.Find.Execute Findtext:=",", replacewith:=".", Replace:=wdReplaceAll GoSub SelectionCellule If Terme1 = 43 Then 'élimine le + et les espaces après éventuels Selection.Find.Execute Findtext:=Chr(Terme1), replacewith:="", Replace:=wdReplaceAll GoSub SuppressionBlancs End If GoSub SelectionCellule If (Terme1 > 47 And Terme1 < 58) Then GoSub SuppressionBlancs 'élimination des séparateurs éventuels dans les nombres End If GoSub SelectionCellule If Terme1 < 33 Then Selection.TypeText Text:="0" 'mettre zéro dans les cellules vides GoSub SelectionCellule total = total + Val(Contenu) Next i
100: ActiveDocument.Tables(acount).Cell(ligne, colonne).Select Selection.Delete 'enlever le résultat précédent Selection.InsertAfter (total) GoTo fin Else MsgBox "Mettre le point d'insertion dans un tableau" End If
RAZ: 'le but est de remettre à zéro la fonction de remplacement : je ne sais pas faire plus simple ! Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "" .Replacement.Text = "" .Forward = True .Wrap = wdFindStop .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Return fin: End Sub
Hélène wrote: | Bonjour, | Dans un tableau où j'utilise la somme automatique, le | calcul n'est pas exact si des cellules sont vides. | Existe-t-il une solution autre que de mettre des 0 dans | les cellules vides pour obtenir un bon résultat? | Merci à l'avance!
Bonjour Hélène,
En effet, et c'est...barbant
Personnellement, j'utilise une macro (qui serait à améliorer par de vrais
macroteurs), à laquelle j'ai affecté le bouton "somme automatique", qui
donne le bon résultat, et qui met les zéros à ma place.
C'est un bricolage qui me suffit. Si tu dois faire de fréquents calculs,
mieux vaut utiliser Excel.
AB
Sub SommeColonneTableau3()
Dim Contenu As String
Dim nbCol, NbLig, NbCel, i, j, z As Integer
If Selection.Information(wdWithInTable) = True Then
GoSub RAZ
With Selection 'repérage de la cellule où on veut mettre la formule
ligne = .Information(wdStartOfRangeRowNumber)
colonne = .Information(wdStartOfRangeColumnNumber)
End With
acount = ActiveDocument.Range(0, Selection.Range.End).Tables.Count
ActiveDocument.Tables(acount).Select
For i = ligne - 1 To 1 Step -1 'balayage des cellules au
dessus
ActiveDocument.Tables(acount).Cell(i, colonne).Select
GoSub SelectionCellule
If Terme1 < 33 Or Terme1 = 45 Then 'élimination des blancs éventuels en
début de texte
GoSub SuppressionBlancs
End If
GoSub SelectionCellule
For z = 1 To Len(Contenu) - 2
T = Mid(Contenu, z, 1)
Code = Asc(T)
If (Code < 48 Or Code > 57) And (Code <> 45 And Code <> 43 And Code <> 46
And Code <> 44 And Code <> 32) Then GoTo 100
Next z
Selection.Find.Execute Findtext:=",", replacewith:=".",
Replace:=wdReplaceAll
GoSub SelectionCellule
If Terme1 = 43 Then 'élimine le + et les espaces après éventuels
Selection.Find.Execute Findtext:=Chr(Terme1), replacewith:="",
Replace:=wdReplaceAll
GoSub SuppressionBlancs
End If
GoSub SelectionCellule
If (Terme1 > 47 And Terme1 < 58) Then
GoSub SuppressionBlancs 'élimination des séparateurs éventuels dans les
nombres
End If
GoSub SelectionCellule
If Terme1 < 33 Then Selection.TypeText Text:="0" 'mettre zéro dans les
cellules vides
GoSub SelectionCellule
total = total + Val(Contenu)
Next i
100:
ActiveDocument.Tables(acount).Cell(ligne, colonne).Select
Selection.Delete 'enlever le résultat précédent
Selection.InsertAfter (total)
GoTo fin
Else
MsgBox "Mettre le point d'insertion dans un tableau"
End If
RAZ:
'le but est de remettre à zéro la fonction de remplacement : je ne sais pas
faire plus simple !
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Return
fin:
End Sub
Hélène wrote:
| Bonjour,
| Dans un tableau où j'utilise la somme automatique, le
| calcul n'est pas exact si des cellules sont vides.
| Existe-t-il une solution autre que de mettre des 0 dans
| les cellules vides pour obtenir un bon résultat?
| Merci à l'avance!
Bonjour Hélène, En effet, et c'est...barbant Personnellement, j'utilise une macro (qui serait à améliorer par de vrais macroteurs), à laquelle j'ai affecté le bouton "somme automatique", qui donne le bon résultat, et qui met les zéros à ma place. C'est un bricolage qui me suffit. Si tu dois faire de fréquents calculs, mieux vaut utiliser Excel. AB
Sub SommeColonneTableau3() Dim Contenu As String Dim nbCol, NbLig, NbCel, i, j, z As Integer
If Selection.Information(wdWithInTable) = True Then GoSub RAZ With Selection 'repérage de la cellule où on veut mettre la formule ligne = .Information(wdStartOfRangeRowNumber) colonne = .Information(wdStartOfRangeColumnNumber) End With acount = ActiveDocument.Range(0, Selection.Range.End).Tables.Count
ActiveDocument.Tables(acount).Select For i = ligne - 1 To 1 Step -1 'balayage des cellules au dessus ActiveDocument.Tables(acount).Cell(i, colonne).Select GoSub SelectionCellule If Terme1 < 33 Or Terme1 = 45 Then 'élimination des blancs éventuels en début de texte GoSub SuppressionBlancs End If GoSub SelectionCellule For z = 1 To Len(Contenu) - 2 T = Mid(Contenu, z, 1) Code = Asc(T) If (Code < 48 Or Code > 57) And (Code <> 45 And Code <> 43 And Code <> 46 And Code <> 44 And Code <> 32) Then GoTo 100 Next z Selection.Find.Execute Findtext:=",", replacewith:=".", Replace:=wdReplaceAll GoSub SelectionCellule If Terme1 = 43 Then 'élimine le + et les espaces après éventuels Selection.Find.Execute Findtext:=Chr(Terme1), replacewith:="", Replace:=wdReplaceAll GoSub SuppressionBlancs End If GoSub SelectionCellule If (Terme1 > 47 And Terme1 < 58) Then GoSub SuppressionBlancs 'élimination des séparateurs éventuels dans les nombres End If GoSub SelectionCellule If Terme1 < 33 Then Selection.TypeText Text:="0" 'mettre zéro dans les cellules vides GoSub SelectionCellule total = total + Val(Contenu) Next i
100: ActiveDocument.Tables(acount).Cell(ligne, colonne).Select Selection.Delete 'enlever le résultat précédent Selection.InsertAfter (total) GoTo fin Else MsgBox "Mettre le point d'insertion dans un tableau" End If
RAZ: 'le but est de remettre à zéro la fonction de remplacement : je ne sais pas faire plus simple ! Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "" .Replacement.Text = "" .Forward = True .Wrap = wdFindStop .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Return fin: End Sub
Hélène wrote: | Bonjour, | Dans un tableau où j'utilise la somme automatique, le | calcul n'est pas exact si des cellules sont vides. | Existe-t-il une solution autre que de mettre des 0 dans | les cellules vides pour obtenir un bon résultat? | Merci à l'avance!