VBA: somme dans ligne +1

  • Initiateur de la discussion JJ1
  • Date de début
J

JJ1

Guest
Bonsoir,
Vous m'avez écrit une petite macro (merci le Forum) qui teste , pour un nombre de 1 à 10, 3 cellules calculées et les copie en AA1:AJ3 (par ex)
Parfait.
En ligne 4 je fais manuellement la somme des 3 lignes sur les 10 colonnes
Parfait

Problème: quand je relance la macro la semaine suivante, les valeurs calculées changent et ma ligne de sommes est écrasée !

je souhaiterais que vous m'aidiez, pour écrire en fin de macro:

une nouvelle boucle de 1 à 10 pour faire la somme des 3 premières lignes du tableau AA1:AJ10 (qui ne changent pas)

une nouvelle variable , par ex L, qui serail le numéro de la ligne où se feraient ces sommes.

Ainsi avant de lancer la macro, ja n'aurai qu' a modifier L (en lui ajoutant 1 ) pour conserver l'historique de mes sommes précédentes.
merci de vos idées
Bonne nuit
 
J

JJ1

Guest
Re : VBA: somme dans ligne +1

Bonsoir
voici le code de la macro
Dim X As Byte
For X = 1 To 10
Range("AD8") = X
ActiveSheet.Calculate
Range("EH1").Offset(0, X - 1) = Range("W10")
Range("EH1").Offset(1, X - 1) = Range("W11")
Range("EH1").Offset(2, X - 1) = Range("W12")
Next X

Donc pour chaque colonne EH, EI...je fais le total (manuel) des 3 cellules au dessus.

Je voudrais que la macro fasse le total de ces 3 cellules pour les 10 colonnes mais à un numero de ligne spécifié dans la macro que je pourrais changer pour éviter d'effacer mon historique des totaux.

Par ex: le total cette semaine se ferait de EH4 à EQ4 (10 colonnes)
la semaine suivante de EH5 à EQ5 (toujours pour le total des 3 mêmes cellules qui ne changent pas, EH1, EH2 EH3 puis EI1, EI2 EI3...)

merci
 

flo2002

XLDnaute Impliqué
Re : VBA: somme dans ligne +1

Re bonjour,
j'ai beau y faire je doit etre fatigué, je ne comprend pas.
Au cas ou ca pourrait t'aider voici comment je definis mes variables de lignes

Dim derligne1 As Long
derligne1 = Range("A65536").End(xlUp).Row

en esperant t'aider....
au pire mmets un bout de fichier
 

porcinet82

XLDnaute Barbatruc
Re : VBA: somme dans ligne +1

Salut JJ, Flo,

Flo, je dois etre fatiguer aussi car je ne comprends pas tres bien, meme pas du tout ce que veux faire JJ. Je pense qu'un fichier avec ce que tu as au départ et le résultat souhaité serais plus parlant.

En attendant ton fichier,

@+
 
J

JJ1

Guest
Re : VBA: somme dans ligne +1

Re
je vais mettre un bout de fichier.
le principe entier:
X prend la valeur de 1 à 10
X se copie en AD8 et pour chaque valeur de X, W10,W11 et W12 changent et se copient en EH1, EH2, EH3
Pour la valeur X=2 ce sera EI1, EI2 et EI3 etc...
mais ce n'est pas le probleme ca fonctionne:

j'ai donc a la fin de la macro 10 colonnes (correspondantes au X) de 3 lignes soit la plage EH1 à EQ3
Pour chaque colonne de 3 cellules je fais le total a la ligne de dessous, par ex de EH4 à EQ4
Mais quand je vais relancer la macro, les valeurs calculées vont changer et ma somme AUSSI, donc je voudrais que la macro me fasse cette somme chaque fois à une ligne differente (+1) pour conserver mes sommes en historique .
Ouf!
je vais copier un bout de fichier
 
J

JJ1

Guest
Re : VBA: somme dans ligne +1

voici le bout de fichier, l faut lancer macro1 manuellemen
merci de vos suggestions
 

Pièces jointes

  • test2.xls
    31 KB · Affichages: 81
  • test2.xls
    31 KB · Affichages: 91
  • test2.xls
    31 KB · Affichages: 94

porcinet82

XLDnaute Barbatruc
Re : VBA: somme dans ligne +1

Bonsoir JJ,

PAs du tout sur d'avoir compris ce que tu souhaitaisn mais peut etre avec le code suivant :
PHP:
Sub Macro2()
Dim X As Byte, lig%
lig = Cells(65536, 138).End(xlUp).Row
If lig = 1 Then
    For X = 1 To 10
        Range("AD8") = X
        ActiveSheet.Calculate
        Range("EH1").Offset(lig - 1, X - 1) = Range("W10")
        Range("EH1").Offset(lig, X - 1) = Range("W11")
        Range("EH1").Offset(lig + 1, X - 1) = Range("W12")
        Range("EH1").Offset(lig + 2, X - 1).FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)"
    Next X
Else
    For X = 1 To 10
        Cells(Cells(65536, 137 + X).End(xlUp).Row + 1, 137 + X).FormulaR1C1 = "=SUM(R[-" & Cells(65536, 137 + X).End(xlUp).Row & "]C:R[-1]C)"
    Next X
End If
End Sub

Si c'est pas ca, met un exemple de ce que tu as au départ, et de ce que tu souhaites a l'arrivée.

@+
 
J

JJ1

Guest
Re : VBA: somme dans ligne +1

Bonjour,
merci pour ce code que je vais tester.
En fait comme tu as vu dans mon fichier , les cellules W conditionnent le resultat de la somme en ligne 4

je veux conserver ma ligne de total en ligne 4 et avoir un nouveau total en ligne 5 quand je relancerai la macro avec de nouvelles valeurs en W et ainsi de suite (sans "ecraser" le total précédent)

Ainsi j'aurai des cellules qui changent tout le temps sur les 3 premières lignes et au dessous un "historique" de tous les totaux passés(lignes4, 5 ,6 etc...)

je te tiens au courant pour le test de ton code mais je pensais a plus simple, du style rajouter la somme (dans la macro) des 3 premieres lignes, creer une variable qui serait le numero de la ligne ou se ferait ce total et que je changerais avant de lancer chaque nouvelle macro?
ex: ce jour total en EH4, EI4 et suivant (10col) la varaible L serait =4
semaine prochaine (variable je mets 5 au lieu de 4) et le total se ferait en EH5, EI5...
puis 6 et etc...

merci
 
J

JJ1

Guest
Re : VBA: somme dans ligne +1

Re,
j'ai installé ton code "macro2", il ne fonctionne pas, je n'ai aucun chiffre hormis des 0 ?
j'ai renvoyé mon fichier avec 2 lignes de totaux
Est ce plus clair?
merci
 

Pièces jointes

  • test2.zip
    10.8 KB · Affichages: 36
  • test2.zip
    10.8 KB · Affichages: 40
  • test2.zip
    10.8 KB · Affichages: 39

porcinet82

XLDnaute Barbatruc
Re : VBA: somme dans ligne +1

Salut JJ,

Effectivement, avec l'exemple, c'est plus parlant (enfin si j'ai bien tout compris), donc voici un code qui cette fois devrait satisfaire ta demande :
PHP:
Sub Macro2_v2()
Dim X As Byte, lig%
For X = 1 To 10
        Range("AD8") = X
        ActiveSheet.Calculate
        Range("EH1").Offset(0, X - 1) = Range("W10")
        Range("EH1").Offset(1, X - 1) = Range("W11")
        Range("EH1").Offset(2, X - 1) = Range("W12")
        Cells(Cells(65536, 137 + X).End(xlUp).Row + 1, 137 + X).Value = Range("W10").Value + Range("W11").Value + Range("W12").Value
Next X
End Sub

@+
 

Discussions similaires

Réponses
3
Affichages
329

Membres actuellement en ligne

Statistiques des forums

Discussions
312 685
Messages
2 090 941
Membres
104 703
dernier inscrit
romla937