Additionner toutes les cellules d'une plage de taille variable [Résolu]

drine des iles 42 Messages postés mardi 10 janvier 2006Date d'inscription 26 septembre 2006 Dernière intervention - 10 janv. 2006 à 22:43 - Dernière réponse : drine des iles 42 Messages postés mardi 10 janvier 2006Date d'inscription 26 septembre 2006 Dernière intervention
- 13 janv. 2006 à 23:22
Bonjour,
Comment puis-je, en vba sur Excel, créer une procédure qui me permettent d'additionner toutes les cellules contenue dans une plage dont la taille est variable?
En clair: le hic est que ma plage de cellules démarre toujours en H20 mais ne fini jamais sur la même ligne .
exemple: le première fois la somme doit etre calculée sur H20:H30 puis, la fois suivante le calcul se fera sur la plage H20:H170 ...
PLEASE HELP ME !!!!
Afficher la suite 

5 réponses

Meilleure réponse
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 11 janv. 2006 à 00:11
3
Merci
Déjà, tout dépend si l'utilisateur doit ou non entrer le numéro de la ligne finale. S'il le doit, un code en VBA est stupide de ce fait même (car il a plus vite fait d'écrire =SOMME("A1:A2") !!!)

Il faut procéder par itération (parcourir toutes tes cellules en les additionnant les unes aux autres).
L'autre quesition importante est de savoir s'il y a ou non des "trous" dans la liste. La solution que je vais te proposer suppose qu'il n'y en ait pas car elle considérera la liste finie dès lors qu'elle rencontrera une cellule vide :

With Worksheets("Feuil1")
varCompteur = 20
varTotal = 0
varValue = CStr(.Range("H20").Value)
Do While Not (varValue = "")
varTotal = varTotal + Val(varValue)
varCompteur = varCompteur + 1
varValue = CStr(.Range("H" & CStr(varCompteur)).Value)
Loop
End With

'Note que tu ne nous a pas dit où tu voulais mettre ce résultat !!!
'Ici, dans la 1ère feuille, dans la cellule A1!
Worksheets(1).Range("A1").Value = varTotal

Mais tu peux te contenter d'utiliser la variable pour en faire ce que tu veux!

Pour info, la fonction CStr(valeur) convertie tout type de valeur en type Chaîne de caractère (String) en enlevant les espaces d'avant les nombres (pas comme Str() !!!).
En revanche, la fonction Val(string) fait l'inverse! I.e. qu'elle convertie une string en vrai nombre (additionnable et tout et tout!).

Note également que le symbole "&" concatène deux chaînes. I.e., les mets bout à bout.

Si ce genre d'additions deviennent récurrentes, pense à créer une fonction avec ce code!
Si tu ne sais pas faire : demande-nous, on est là pour ça !!! Enfin, après t'être tout de même donné la peine de recherche un minimum dans l'aide du VBA et sur ce site!!!

Est-ce que cela répond à ta question ???
As-tu besoin de plus d'explications ???

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )

Merci ScSami 3

codes-sources a aidé 81 internautes ce mois-ci

Meilleure réponse
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 12 janv. 2006 à 20:48
3
Merci
Public Function funcSommeColonne(ByVal argColonne As String)
With Worksheets("Feuil1")
varCompteur = 20
varTotal = 0
varValue = CStr(.Range(
argColonne
& "20"
).Value)
Do While Not (varValue = "")
varTotal = varTotal + Val(varValue)
varCompteur = varCompteur + 1
varValue = CStr(.Range(
argColonne
& CStr(varCompteur)).Value)
Loop
End With
End Function

'Quelque part... ailleurs...

Worksheets(1).Range("A1").Value = funcSommeColonne("H")

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )

Merci ScSami 3

codes-sources a aidé 81 internautes ce mois-ci

jpleroisse 1788 Messages postés mardi 7 novembre 2000Date d'inscription 11 mars 2006 Dernière intervention - 11 janv. 2006 à 01:44
0
Merci
Bonsoir,

Ce code, je crois répond à ton attente.



Sub AddValeur()

Dim i, cel, total

For i = 1 To Range("H:H").End(xlDown).Rows

If Range("H:H")(i) <> "" Then

Range("H:H")(i).Offset(1, 0).Activate

End If

For Each cel In Range("H:H")(i)

If cel.Value <> 0 Then

total = total + cel.Value

End If

Next cel

Next i

ActiveCell.Value = total

End Sub



jpleroisse



Si une réponse vous convient, cliquez Réponse Acceptée.
drine des iles 42 Messages postés mardi 10 janvier 2006Date d'inscription 26 septembre 2006 Dernière intervention - 12 janv. 2006 à 20:09
0
Merci
merci encore pour votre aide à tous.
Désolée de vous re-déranger mais aprés avoir chercher plusieurs heures, je n'arrive toujours pas à créer les arguments qui permettront de transformer ce code en fonction. Donc, j'ai une fonction qui fonctionne mais uniquement sur la colonne H !!! je n'arrive pas à créer les arguments qui permettront de dire : la cellule de départ est H20, ou F20... et la colonne dans laquelle on se place est la colonne H ou F....

halalala, c'est dur de débuter !!!!
drine des iles
drine des iles 42 Messages postés mardi 10 janvier 2006Date d'inscription 26 septembre 2006 Dernière intervention - 13 janv. 2006 à 23:22
0
Merci
drine des iles

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.