Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Macro Total : comportement bizarre !

2 réponses
Avatar
Françoise
Bonjour à tous,

je n'y comprends plus rien, peut être que des yeux neufs sur mon code
m'expliquera ce qui cloche :
j'ai une macro qui fait le total de toutes les lignes d'une feuille
je fais un test : si une seule ligne, alors copie L16 en L17 et M16 en M17
afin d'avoir un total même si une seule ligne de commande
mais voilà que quelque soit le nombre de lignes de ma commande, la macro copie
L16 en L17 et M16 en M17, et ne fait plus le total en bas de commande !
Tout va bien lorsque j'ai UNE seule ligne de commande, mais au delà, c'est
faux

Qu'est ce qui cloche ? j'avoue que j'ai beau chercher je ne comprends pas
voici le code :

Sub TotalFinColonneCommande()
'
Windows("BDCAGENT.xls").Activate
Sheets("Commande").Select

If L17 = "" Then
Range("L16").Select
Selection.Copy
Range("L17").Select
ActiveSheet.Paste
Selection.Font.Bold = True
Range("M16").Select
Selection.Copy
Range("M17").Select
ActiveSheet.Paste
Selection.Font.Bold = True

Else

Dim CelluleL As Range
Set CelluleL = Range("L16").End(xlDown).Offset(1, 0)
With CelluleL
.FormulaR1C1 = "=SUM(R16C12:R" & .Row - 1 & "C12)"
.Font.Bold = True
End With

Dim CelluleM As Range
Set CelluleM = Range("M16").End(xlDown).Offset(1, 0)
With CelluleM
.FormulaR1C1 = "=SUM(R16C13:R" & .Row - 1 & "C13)"
.Font.Bold = True
End With
End If
Range("A1").Select
End Sub
====================
d'avance merci pour votre éclairage

2 réponses

Avatar
MichDenis
Quand une cellule est vide, comme la cellule a un format standard,
excel considère la cellule comme étant une "variable" de type "VARIANT"
pouvant contenir du "texte" ou des "chiffres"...

En conséquence, si la cellule est VIDE,
Tu dois tester si la cellule ne contient pas du texte ET
NE contient PAS un nombre c'est ce pourquoi ce test dans ta macro

If L17 = "" Then est insuffisant.

Si ta cellule est réellement vide, utilises if isempty(Range("L17")) then
OR If Not (IsEmpty(Range("a1"))) Then Selon ton besoin...

Je n'ai pas regardé le reste de ta macro !



"Françoise" a écrit dans le message de news:

Bonjour à tous,

je n'y comprends plus rien, peut être que des yeux neufs sur mon code
m'expliquera ce qui cloche :
j'ai une macro qui fait le total de toutes les lignes d'une feuille
je fais un test : si une seule ligne, alors copie L16 en L17 et M16 en M17
afin d'avoir un total même si une seule ligne de commande
mais voilà que quelque soit le nombre de lignes de ma commande, la macro copie
L16 en L17 et M16 en M17, et ne fait plus le total en bas de commande !
Tout va bien lorsque j'ai UNE seule ligne de commande, mais au delà, c'est
faux

Qu'est ce qui cloche ? j'avoue que j'ai beau chercher je ne comprends pas
voici le code :

Sub TotalFinColonneCommande()
'
Windows("BDCAGENT.xls").Activate
Sheets("Commande").Select

If L17 = "" Then
Range("L16").Select
Selection.Copy
Range("L17").Select
ActiveSheet.Paste
Selection.Font.Bold = True
Range("M16").Select
Selection.Copy
Range("M17").Select
ActiveSheet.Paste
Selection.Font.Bold = True

Else

Dim CelluleL As Range
Set CelluleL = Range("L16").End(xlDown).Offset(1, 0)
With CelluleL
.FormulaR1C1 = "=SUM(R16C12:R" & .Row - 1 & "C12)"
.Font.Bold = True
End With

Dim CelluleM As Range
Set CelluleM = Range("M16").End(xlDown).Offset(1, 0)
With CelluleM
.FormulaR1C1 = "=SUM(R16C13:R" & .Row - 1 & "C13)"
.Font.Bold = True
End With
End If
Range("A1").Select
End Sub
=================== d'avance merci pour votre éclairage
Avatar
Françoise
Merci MichDenis !

Effectivement en utilisant if isempty(Range("L17")) then
là il y a bien contrôle et mise en oeuvre des calculs de somme correcte
Merci encore pour ton aide et SURTOUT la façon dont tu expliques le code,
cela permet de comprendre efficacement comment coder dans ces cas
cordialement


Quand une cellule est vide, comme la cellule a un format standard,
excel considère la cellule comme étant une "variable" de type "VARIANT"
pouvant contenir du "texte" ou des "chiffres"...

En conséquence, si la cellule est VIDE,
Tu dois tester si la cellule ne contient pas du texte ET
NE contient PAS un nombre c'est ce pourquoi ce test dans ta macro

If L17 = "" Then est insuffisant.

Si ta cellule est réellement vide, utilises if isempty(Range("L17")) then
OR If Not (IsEmpty(Range("a1"))) Then Selon ton besoin...

Je n'ai pas regardé le reste de ta macro !



"Françoise" a écrit dans le message de news:

Bonjour à tous,

je n'y comprends plus rien, peut être que des yeux neufs sur mon code
m'expliquera ce qui cloche :
j'ai une macro qui fait le total de toutes les lignes d'une feuille
je fais un test : si une seule ligne, alors copie L16 en L17 et M16 en M17
afin d'avoir un total même si une seule ligne de commande
mais voilà que quelque soit le nombre de lignes de ma commande, la macro copie
L16 en L17 et M16 en M17, et ne fait plus le total en bas de commande !
Tout va bien lorsque j'ai UNE seule ligne de commande, mais au delà, c'est
faux

Qu'est ce qui cloche ? j'avoue que j'ai beau chercher je ne comprends pas
voici le code :

Sub TotalFinColonneCommande()
'
Windows("BDCAGENT.xls").Activate
Sheets("Commande").Select

If L17 = "" Then
Range("L16").Select
Selection.Copy
Range("L17").Select
ActiveSheet.Paste
Selection.Font.Bold = True
Range("M16").Select
Selection.Copy
Range("M17").Select
ActiveSheet.Paste
Selection.Font.Bold = True

Else

Dim CelluleL As Range
Set CelluleL = Range("L16").End(xlDown).Offset(1, 0)
With CelluleL
.FormulaR1C1 = "=SUM(R16C12:R" & .Row - 1 & "C12)"
.Font.Bold = True
End With

Dim CelluleM As Range
Set CelluleM = Range("M16").End(xlDown).Offset(1, 0)
With CelluleM
.FormulaR1C1 = "=SUM(R16C13:R" & .Row - 1 & "C13)"
.Font.Bold = True
End With
End If
Range("A1").Select
End Sub
=================== > d'avance merci pour votre éclairage