OVH Cloud OVH Cloud

Pb multiplication

5 réponses
Avatar
dédé
bonjour
j'utilise la ligne suivante dans ma sub:

....
....
ActiveSheet.Cells(ligne, colonne).FormulaLocal = _
"=(" & ActiveSheet.Cells(ligne, colonne).Value & _
"*" & ValeurNational & ") / " & ValeurPremiereLigne

End If
Next ligne
Next colonne

'on va tout multiplier par 100 pour enlever les %
'ajout du multiplicateur
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.Value = 100
Set tbl = ActiveCell

ActiveCell.Select
Selection.Copy
Range(Cells(PremiereLigne, 2), Cells(DerniereLigne,
DerniereColonne).Offset(0, 1)).Select
'Range(DerniereLigne, DerniereColonne).Offset(0, 1).Activate
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Selection.NumberFormat = "0"

tbl.Value = ""

dans mon fichier excel j'obtient par exemple 2 aulieu de 154 et dans ma
cellule j'ai pourtant la formule suvante:
=((16991*1,54314387349689) / 16991)*100

Comment faire?
merci

ma version:excel2003 / win X¨P

5 réponses

Avatar
Gloops
Oh boudiou, Dédé, tu écris comme moi l'année dernière.
Prends ton souffle, et articule ton message.

Rien pané.
___________________________________
dédé a écrit, le 24/05/2004 15:05 :

bonjour
j'utilise la ligne suivante dans ma sub:

....
....
ActiveSheet.Cells(ligne, colonne).FormulaLocal = _
"=(" & ActiveSheet.Cells(ligne, colonne).Value & _
"*" & ValeurNational & ") / " & ValeurPremiereLigne

End If
Next ligne
Next colonne

'on va tout multiplier par 100 pour enlever les %
'ajout du multiplicateur
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.Value = 100
Set tbl = ActiveCell

ActiveCell.Select
Selection.Copy
Range(Cells(PremiereLigne, 2), Cells(DerniereLigne,
DerniereColonne).Offset(0, 1)).Select
'Range(DerniereLigne, DerniereColonne).Offset(0, 1).Activate
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False
Selection.NumberFormat = "0"

tbl.Value = ""

dans mon fichier excel j'obtient par exemple 2 aulieu de 154 et dans ma
cellule j'ai pourtant la formule suvante:
=((16991*1,54314387349689) / 16991)*100

Comment faire?
merci

ma version:excel2003 / win X¨P




Avatar
michdenis
Bonjour Dédé,

Dans une feuille module, le seul séparateur décimale que VBA connaît est le point. Dans ta ligne de code original, tu as
utilisé la virgule.
Comme ceci , tu devrais obtenir le résultat attendu.

tbl.Value = ((16991 * 1.54314387349689) / 16991) * 100


Salutations!



"dédé" a écrit dans le message de news:
bonjour
j'utilise la ligne suivante dans ma sub:

....
....
ActiveSheet.Cells(ligne, colonne).FormulaLocal = _
"=(" & ActiveSheet.Cells(ligne, colonne).Value & _
"*" & ValeurNational & ") / " & ValeurPremiereLigne

End If
Next ligne
Next colonne

'on va tout multiplier par 100 pour enlever les %
'ajout du multiplicateur
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.Value = 100
Set tbl = ActiveCell

ActiveCell.Select
Selection.Copy
Range(Cells(PremiereLigne, 2), Cells(DerniereLigne,
DerniereColonne).Offset(0, 1)).Select
'Range(DerniereLigne, DerniereColonne).Offset(0, 1).Activate
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False
Selection.NumberFormat = "0"

tbl.Value = ""

dans mon fichier excel j'obtient par exemple 2 aulieu de 154 et dans ma
cellule j'ai pourtant la formule suvante:
=((16991*1,54314387349689) / 16991)*100

Comment faire?
merci

ma version:excel2003 / win X¨P
Avatar
Frédéric Sigonneau
Bonsoir,

Je n'arrive pas à reproduire ton problème, mais ça semble à première vue être un
problème d'affichage puisque les résultats semblent être ceux que tu attends (ta
formule étant correcte). Essaye dans un premier temps de laisser le format
standard. Si tu n'as besoin que des parties entières des résultats, tu peux
aussi modifier légèrement ta formule :

ActiveSheet.Cells(ligne, colonne).FormulaLocal = _
"=ENT(" & ActiveSheet.Cells(ligne, colonne).Value & _
"*" & ValeurNational & ") / " & ValeurPremiereLigne & ")"

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


bonjour
j'utilise la ligne suivante dans ma sub:

.....
.....
ActiveSheet.Cells(ligne, colonne).FormulaLocal = _
"=(" & ActiveSheet.Cells(ligne, colonne).Value & _
"*" & ValeurNational & ") / " & ValeurPremiereLigne

End If
Next ligne
Next colonne

'on va tout multiplier par 100 pour enlever les %
'ajout du multiplicateur
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.Value = 100
Set tbl = ActiveCell

ActiveCell.Select
Selection.Copy
Range(Cells(PremiereLigne, 2), Cells(DerniereLigne,
DerniereColonne).Offset(0, 1)).Select
'Range(DerniereLigne, DerniereColonne).Offset(0, 1).Activate
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False
Selection.NumberFormat = "0"

tbl.Value = ""

dans mon fichier excel j'obtient par exemple 2 aulieu de 154 et dans ma
cellule j'ai pourtant la formule suvante:
=((16991*1,54314387349689) / 16991)*100

Comment faire?
merci

ma version:excel2003 / win X¨P




Avatar
dédé
merci à tous pour votre aide
voici le code complet de ma procedure

Sub CasParticulier(sVar As String, FeuilDest As String)
Dim OA As Worksheet
Dim OD As Worksheet
Dim ONat As Worksheet
Dim sChamp As String


Application.ScreenUpdating = False
Set OA = ThisWorkbook.ActiveSheet 'la feuille tcd en cours
Set OD = ThisWorkbook.Sheets(FeuilDest)
Set ONat = ThisWorkbook.Sheets("National")

sChamp = "'" & sVar & "'"


'on efface les données de la feuille de cas particulier
OD.Select
Cells.Select
Selection.Delete

'selection et copie des donnees à traiter
OA.Select
Range("A11").Select
'ActiveSheet.PivotTables(1).PivotSelect "", xlDataOnly, True

Set tbl = ActiveCell.CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, _
tbl.Columns.Count).Select





Selection.Copy
OD.Select
ActiveSheet.Paste

'selection de la 1ère case vide a droite
Range("A1").Select
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop

'selection et copie des données nationales correspondantes
ONat.Select
ActiveSheet.PivotTables(1).PivotSelect _
sChamp, xlDataAndLabel, True
Selection.Copy
OD.Select
ActiveSheet.Paste


'***************


'recopie du tableau

Range("A1").Select
ActiveCell.CurrentRegion.Select
Selection.Copy

ActiveCell.Offset(1, 0).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.Offset(2, 0).Select
ActiveSheet.Paste

Application.CutCopyMode = False




Set tbl = ActiveCell.CurrentRegion
tbl.Select

PremiereColonne = 2
DerniereColonne = tbl.Columns.Count - 1
ColonneNational = tbl.Columns.Count

PremiereLigne = ActiveCell.Row + 1
DerniereLigne = tbl.Rows.Count + PremiereLigne - 2

For colonne = PremiereColonne To DerniereColonne
ValeurPremiereLigne = ""
For ligne = PremiereLigne To DerniereLigne
If ActiveSheet.Cells(ligne, colonne).Value <> "" Then
If ValeurPremiereLigne = "" Then
ValeurPremiereLigne = ActiveSheet.Cells(ligne, colonne).Value
ValeurNational = ActiveSheet.Cells(ligne, ColonneNational).Value
End If

ActiveSheet.Cells(ligne, colonne).Formula = _
"=(" & ActiveSheet.Cells(ligne, colonne).Value & _
"*" & ValeurNational & ") / " & ValeurPremiereLigne

End If
Next ligne
Next colonne



'on va tout multiplier par 100 pour enlever les %
'ajout du multiplicateur
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.Value = 100
Set tbl = ActiveCell

ActiveCell.Select
Selection.Copy
Range(Cells(PremiereLigne, 2), Cells(DerniereLigne,
DerniereColonne).Offset(0, 1)).Select
'Range(DerniereLigne, DerniereColonne).Offset(0, 1).Activate
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False
Selection.NumberFormat = "0"

tbl.Value = ""
Selection.NumberFormat = "General"

ActiveSheet.Range("A1").Select

Application.ScreenUpdating = True
End Sub

Pour rappel:
apres avoir recopié le 2ème tableau, quand je clique sur une cellule je vois
la bonne formule mais pas le bon résultat: la multiplication par 100 n'est
pas éffectuée. par contre si quand je clique sur une cellule j'appuie sur
entrée dans la barre de formule j'obtient le bon résultat.

Merci







"Frédéric Sigonneau" a écrit dans le
message de news:
Bonsoir,

Je n'arrive pas à reproduire ton problème, mais ça semble à première vue
être un

problème d'affichage puisque les résultats semblent être ceux que tu
attends (ta

formule étant correcte). Essaye dans un premier temps de laisser le format
standard. Si tu n'as besoin que des parties entières des résultats, tu
peux

aussi modifier légèrement ta formule :

ActiveSheet.Cells(ligne, colonne).FormulaLocal = _
"=ENT(" & ActiveSheet.Cells(ligne, colonne).Value & _
"*" & ValeurNational & ") / " & ValeurPremiereLigne & ")"

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


bonjour
j'utilise la ligne suivante dans ma sub:

.....
.....
ActiveSheet.Cells(ligne, colonne).FormulaLocal = _
"=(" & ActiveSheet.Cells(ligne, colonne).Value & _
"*" & ValeurNational & ") / " & ValeurPremiereLigne

End If
Next ligne
Next colonne

'on va tout multiplier par 100 pour enlever les %
'ajout du multiplicateur
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.Value = 100
Set tbl = ActiveCell

ActiveCell.Select
Selection.Copy
Range(Cells(PremiereLigne, 2), Cells(DerniereLigne,
DerniereColonne).Offset(0, 1)).Select
'Range(DerniereLigne, DerniereColonne).Offset(0, 1).Activate
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False
Selection.NumberFormat = "0"

tbl.Value = ""

dans mon fichier excel j'obtient par exemple 2 aulieu de 154 et dans ma
cellule j'ai pourtant la formule suvante:
=((16991*1,54314387349689) / 16991)*100

Comment faire?
merci

ma version:excel2003 / win X¨P






Avatar
Frédéric Sigonneau
Bonsoir,

Dans ce cas, essaye, en fin de macro, de forcer un recalcul avec
Application.CalculateFull
(Excel ou + récent).
Pour Excel 97 tu peux (si je me souviens bien) obtenir le même résultat avec
SendKeys "^%{F9}"

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


merci à tous pour votre aide
voici le code complet de ma procedure

Sub CasParticulier(sVar As String, FeuilDest As String)
Dim OA As Worksheet
Dim OD As Worksheet
Dim ONat As Worksheet
Dim sChamp As String


Application.ScreenUpdating = False
Set OA = ThisWorkbook.ActiveSheet 'la feuille tcd en cours
Set OD = ThisWorkbook.Sheets(FeuilDest)
Set ONat = ThisWorkbook.Sheets("National")

sChamp = "'" & sVar & "'"


'on efface les données de la feuille de cas particulier
OD.Select
Cells.Select
Selection.Delete

'selection et copie des donnees à traiter
OA.Select
Range("A11").Select
'ActiveSheet.PivotTables(1).PivotSelect "", xlDataOnly, True

Set tbl = ActiveCell.CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, _
tbl.Columns.Count).Select





Selection.Copy
OD.Select
ActiveSheet.Paste

'selection de la 1ère case vide a droite
Range("A1").Select
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop

'selection et copie des données nationales correspondantes
ONat.Select
ActiveSheet.PivotTables(1).PivotSelect _
sChamp, xlDataAndLabel, True
Selection.Copy
OD.Select
ActiveSheet.Paste


'***************


'recopie du tableau

Range("A1").Select
ActiveCell.CurrentRegion.Select
Selection.Copy

ActiveCell.Offset(1, 0).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.Offset(2, 0).Select
ActiveSheet.Paste

Application.CutCopyMode = False




Set tbl = ActiveCell.CurrentRegion
tbl.Select

PremiereColonne = 2
DerniereColonne = tbl.Columns.Count - 1
ColonneNational = tbl.Columns.Count

PremiereLigne = ActiveCell.Row + 1
DerniereLigne = tbl.Rows.Count + PremiereLigne - 2

For colonne = PremiereColonne To DerniereColonne
ValeurPremiereLigne = ""
For ligne = PremiereLigne To DerniereLigne
If ActiveSheet.Cells(ligne, colonne).Value <> "" Then
If ValeurPremiereLigne = "" Then
ValeurPremiereLigne = ActiveSheet.Cells(ligne, colonne).Value
ValeurNational = ActiveSheet.Cells(ligne, ColonneNational).Value
End If

ActiveSheet.Cells(ligne, colonne).Formula = _
"=(" & ActiveSheet.Cells(ligne, colonne).Value & _
"*" & ValeurNational & ") / " & ValeurPremiereLigne

End If
Next ligne
Next colonne



'on va tout multiplier par 100 pour enlever les %
'ajout du multiplicateur
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.Value = 100
Set tbl = ActiveCell

ActiveCell.Select
Selection.Copy
Range(Cells(PremiereLigne, 2), Cells(DerniereLigne,
DerniereColonne).Offset(0, 1)).Select
'Range(DerniereLigne, DerniereColonne).Offset(0, 1).Activate
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False
Selection.NumberFormat = "0"

tbl.Value = ""
Selection.NumberFormat = "General"

ActiveSheet.Range("A1").Select

Application.ScreenUpdating = True
End Sub

Pour rappel:
apres avoir recopié le 2ème tableau, quand je clique sur une cellule je vois
la bonne formule mais pas le bon résultat: la multiplication par 100 n'est
pas éffectuée. par contre si quand je clique sur une cellule j'appuie sur
entrée dans la barre de formule j'obtient le bon résultat.

Merci







"Frédéric Sigonneau" a écrit dans le
message de news:

Bonsoir,

Je n'arrive pas à reproduire ton problème, mais ça semble à première vue


être un

problème d'affichage puisque les résultats semblent être ceux que tu


attends (ta

formule étant correcte). Essaye dans un premier temps de laisser le format
standard. Si tu n'as besoin que des parties entières des résultats, tu


peux

aussi modifier légèrement ta formule :

ActiveSheet.Cells(ligne, colonne).FormulaLocal = _
"=ENT(" & ActiveSheet.Cells(ligne, colonne).Value & _
"*" & ValeurNational & ") / " & ValeurPremiereLigne & ")"

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !



bonjour
j'utilise la ligne suivante dans ma sub:

.....
.....
ActiveSheet.Cells(ligne, colonne).FormulaLocal = _
"=(" & ActiveSheet.Cells(ligne, colonne).Value & _
"*" & ValeurNational & ") / " & ValeurPremiereLigne

End If
Next ligne
Next colonne

'on va tout multiplier par 100 pour enlever les %
'ajout du multiplicateur
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.Value = 100
Set tbl = ActiveCell

ActiveCell.Select
Selection.Copy
Range(Cells(PremiereLigne, 2), Cells(DerniereLigne,
DerniereColonne).Offset(0, 1)).Select
'Range(DerniereLigne, DerniereColonne).Offset(0, 1).Activate
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False
Selection.NumberFormat = "0"

tbl.Value = ""

dans mon fichier excel j'obtient par exemple 2 aulieu de 154 et dans ma
cellule j'ai pourtant la formule suvante:
=((16991*1,54314387349689) / 16991)*100

Comment faire?
merci

ma version:excel2003 / win X¨P