Additionner toutes les cellules d'une plage de taille variable

Résolu
drine des iles Messages postés 42 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 26 septembre 2006 - 10 janv. 2006 à 22:43
drine des iles Messages postés 42 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 26 septembre 2006 - 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 !!!!

5 réponses

ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
11 janv. 2006 à 00:11
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". )
3
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
12 janv. 2006 à 20:48
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". )
3
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
11 janv. 2006 à 01:44
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.
0
drine des iles Messages postés 42 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 26 septembre 2006
12 janv. 2006 à 20:09
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
drine des iles Messages postés 42 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 26 septembre 2006
13 janv. 2006 à 23:22
drine des iles
0
Rejoignez-nous