drine des iles
Messages postés42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006
-
22 janv. 2006 à 21:46
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 2022
-
22 janv. 2006 à 23:59
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
A voir également:
Additionner des cellules contenues dans une plage dont la taille varie tous les
jpleroisse
Messages postés1788Date d'inscriptionmardi 7 novembre 2000StatutMembreDernière intervention11 mars 200627 22 janv. 2006 à 23:22
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.
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 22 janv. 2006 à 23:30
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)
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 22 janv. 2006 à 22:50
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
drine des iles
Messages postés42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006 22 janv. 2006 à 23:07
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és42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006 22 janv. 2006 à 23:40
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 ?