Additionner des cellules contenues dans une plage dont la taille varie tous les

[Résolu]
Signaler
Messages postés
42
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
26 septembre 2006
-
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
-
Bonjour, j'ai un problème avec ce code VBA pour Excel que jpleroisse (un ou une développeur) m'a trés gentillement transmis.
Ce code est censé permettre l'addition des cellules contenues dans une plage de taille variable .
En effet, la plage peut être H20:H30 et le total s'inscrit en H32 ou alors, la plage peut être H20:H170 et le total s'inscriera alors en H172.
Le début de la plage est toujours H20 et le total s'inscrit toujours 2 lignes en dessous de la dernière cellule de la plage.

le code ci dessous est censé répondre à cette requête mais le débogueur me dit "erreur 13 incompatibilité de type" (sur la ligne que j'ai coloré en rouge)!? Je ne comprend pas de quoi il s'agit ni comment corriger ça? Pouvez vous m'aider ?

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

drine des iles

6 réponses

Messages postés
1788
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
11 mars 2006
26
Bonsoir,

Mets le code modifié, le total s'affiche 2 cellules en dessous, si tu
veux immédiatement après le dernier chiffre, mets OffSet(1, 0) au lieu
de OffSet(2, 0)



Sub AddValeur()

Dim i, cel, total

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

If Range("H20:H1000")(i) <> "" Then

Range("H20:H1000")(i).Offset(2, 0).Activate

End If

For Each cel In Range("H20:H1000")(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.
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 70 internautes nous ont dit merci ce mois-ci

Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Lut,
Rows Te renvoie un objet Range si tu veux obtenir le numéro de ligne utilises Row qui lui te renvoi un Long.
de plus la première boucle ne te sert à rien.....
le code peu être simplifier, et être plus adapter à VBA
Dim xlFin As Long
Dim xlMyrange As Range


xlFin = Range("H20").End(xlDown).Row
Set xlMyrange = Range("H20:H" & xlFin)


Range("H" & xlFin).Offset(2, 0).Value = Application.WorksheetFunction.Sum(xlMyrange)

Il peut être judicieux de remplacer xlDown par xlUp selon le cas afin de trouver la dernière ligne remplie

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 70 internautes nous ont dit merci ce mois-ci

Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Evident bien sur d'ou mon commentaire en fin de post
Donc cela donnerai:
xlFin = Range("H1000").End(xlUp).Row

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 70 internautes nous ont dit merci ce mois-ci

Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
Bonsoir,

JE viens d'essayer le code, et il fonctionne très bien... pas d'erreur !

Le seul truc par rapport à ce que tu dis, c'est que le total s'affiche juste une ligne en dessous de la dernière valeur, au lieu de deux... mais bon...

Amicalement,
Us
Messages postés
42
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
26 septembre 2006

Pardon, j'ai oubllié de préciser que j'ai des titres etc entre la cellule H1 et H20. Donc quand le code balaye la colonne H il "tombe" sur des cellules qu'il ne peut pas interpréter !
j'ai vu qu'il y a une possibilité avec l'instruction "on error resume next" mais j'ai beau essayer... rien à faire ! Connaissez vous une autre manière de faire ? Je ne sais pas dire à la macro qu'il faut qu'elle démarre en H20 et pas avant !

drine des iles
Messages postés
42
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
26 septembre 2006

Merci, suis sauvée OUF!
pour infos, le dernier code qui a été proposé suppose que toutes les cellules soit remplie pour fonctionner. J'ai validé la réponse de jpleroisse car son code marche même s'il y a des vides dans la plage h20:h1000.

Merci encore à tout le monde
PS: connaissez-vous un bouquin claire et compréhensible (car la rubrique d'aide du VBA c'est du grec ancien pour moi !) pour débuter en VBA ?

drine des iles