Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA : Pb pour inclure des variables dans des Range, Cells, Sum

richardM

XLDnaute Nouveau
Bonjour,

Je débute avec VBA EXcel et sur le forum. J'essaie de faire une macro qui me permettrait de faire la somme d'une colonne d'un tableau alors que je ne connais pas par avance son nombre de lignes. Je crée donc des variables pour connaitre le positionnement de mes cellules à calculer ou le nombre de lignes. Dans les formule de calcul, quand j'inclue ces variables cela ne fonctionne pas. Par exemple:
Range(Pos).Value = Application.WorksheetFunction.Sum(Range("Posaosb")) 'cette instruction ne fonctionne pas avec les variables
' Range(Pos).Value = Application.WorksheetFunction.Sum(Range("H8:H10")) 'cette instruction fonctionne sans les variables mais avec les valeurs retournées par les variables

J'ai les mêmes difficultés avec Cells, Sum..

Cela doit être certainement simple, un mécanisme que je ne comprends pas.
Merci de votre aide,
Ci dessous le code de ma macro:

Sub Total_tableau()
'Macro pour caluler la somme d'une colonne sans connaitre la longueur du tableau mais en connaissant la premiere cellule D7..

Dim Nblig As Integer 'Nombre de ligne du Tableau
Dim Nbcol As Integer 'Nombre de colonnes du tableau
Dim Pos As Variant 'Position dans la feuille
Dim Posa As Variant 'Position sur la premiere ligne à compter
Dim Posb As Variant 'Position sur la derniere ligne à compter

'Calcul du nombre de lignes et de colonnes dans le tableau
Pos = "D7"
Posa = "A1"
Posb = "B1"
Range(Pos).Select 'positionnement de Départ connu
Nblig = ActiveSheet.UsedRange.Rows.Count 'Calcul du nombre de ligne dans le tableau
Nbcol = ActiveSheet.UsedRange.Columns.Count 'calcul le nombre de colonnes

'calcul des variables de positionnement
ActiveCell.Offset(Nblig, Nbcol - 1).Select
Pos = Selection.Address(0, 0)
ActiveCell.Offset(-(Nblig - 1), 0).Select
Posa = Selection.Address(0, 0)
ActiveCell.Offset((Nblig - 2), 0).Select
Posb = Selection.Address(0, 0)

' calcul de la somme de la colonne
Range(Pos).Select
Range(Pos).Value = Application.WorksheetFunction.Sum(Range("Posaosb")) 'cette instruction ne fonctionne pas avec les variables
' Range(Pos).Value = Application.WorksheetFunction.Sum(Range("H8:H10")) 'cette instruction fonctionne sans les variables mais avec les valeurs retournees par les variables
' OU
' ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" 'Cette instruction fonctionne
' ActiveCell.FormulaR1C1 = "=SUM(R[-Nblig-1]C:R[-1]C)" 'Cette instruction ne fonctionne pas une fois incluse la variable
End Sub
 

Staple1600

XLDnaute Barbatruc
Re, Bonsoir Dranreb

[richardM] (en attendant un petit fichier...ou pas )
Comme jé'tais dans VBE, je publie ce petit test
VB:
Sub oPetitTest()
Dim Nblig As Long 'Nombre de ligne du Tableau
Dim Nbcol As Long 'Nombre de colonnes du tableau
'Création d'un tableau de test
[A1:H10] = "=INT(2+ROW()*COLUMN()-1/123456789)"
Nbcol = Cells(1, Columns.Count).End(xlToLeft).Column
Nblig = Cells(Rows.Count, 2).End(xlUp).Row
Cells(Nblig + 1, Nbcol) = Application.Sum(Range("H1:H" & Nblig))
Cells(Nblig + 1, Nbcol - 1) = "TOTAL"
End Sub
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @richardM et bienvenue sur XLD,

Dans le fichier joint, deux exemples de macros qui font la somme de la colonne A et de la colonne B.

Les codes sont dans module1.

N'oubliez la touche d'aide <F1> quand vous codez en VBA (placer vous sur le mot et appuyez sur la touche F1)

nota: un fichier est fourni . Ce sera votre cadeau de bienvenue

edit: bonsoir à @Dranreb et à @Staple1600
 

Pièces jointes

  • richardM- range et somme- (a).xlsm
    21.6 KB · Affichages: 12
Dernière édition:

Dranreb

XLDnaute Barbatruc
Comme ça, ça marche :
VB:
Range(Pos).Value = Application.WorksheetFunction.Sum(Range(Posa & ":" & Posb))
Mais c'est bien compliqué tout ça, alors que ceci le fait tout aussi bien :
VB:
With ActiveSheet.[H100000].End(xlUp)(2)
   .FormulaR1C1 = "=SUM(R8C:R[-1]C)": .Value = .Value: End With
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…