Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Ayant refait une fonction pour sommer des valeurs, (je ne suis pas très doué), je ne comprends pas pourquoi la macro ne démarre pas à la ligne A7 comme je lui ai indiqué et pourquoi elle ne s'arrçete que 15 ligne après la dernière ligne contenant des valeurs.
Je vous joins le fichier.
Merci de vos explications. Je ne saisis pas pourquoi elle démarre ailleurs que l'endroit range a7.
Vos explications me permettront d'avancer.
Re : VBA : Comportement erratique d'une fonction somme
Bonsoir Bertrand1202,
Déjà pour que ta macro soit plus clair, pense à faire des retraits de lignes comme dans l'exemple ci-dessous (ta macro : identique - juste changé la présentation) :
Code:
Sub testbsomme()
Dim c As Byte
Dim vcellule As Range
Dim vsom As Long
Dim i As Integer
Dim derlign As Long
derlign = Range("a65536").End(xlUp).Row
[COLOR="DimGray"][B][I]For[/I][/B][/COLOR] i = 1 To 25
[COLOR="Red"][B]For[/B][/COLOR] Each vcellule In Range("a7:a" & "a65000").End(xlUp)
[COLOR="Blue"][B]For[/B][/COLOR] c = 1 To derlign
vsom = vsom + vcellule.Offset(vcellule(i).Row, c)
vcellule.Offset(vcellule(i).Row, 0) = vsom
[COLOR="Blue"][B]Next[/B][/COLOR] c
vsom = 0
[COLOR="Red"][B]Next[/B][/COLOR] vcellule
[COLOR="DimGray"][B][I]Next[/I][/B][/COLOR] i
End Sub
C'est pas plus clair?
Sinon, concernant ton soucis, peux-tu nous dire ce que tu veux obtenir? Que dois faire la macro?
Ce qui signifie :
"Excel, va sur la cellule A65536, puis remonte jusqu'à la première cellule pleine trouvé. Une fois la cellule trouvé, donne moi le numéro de la ligne
Bref, comme tu l'as deviné, si tu ne mets pas Range("A65536"), il ne sera pas à partir d'où commencer.
Evidement, tu peux écrire :
Code:
Range("A65536").End(xlUp).Row
De façon différente, comme par exemple de la façon suivante :
Code:
[A65536].End(xlUp).Row
Ce qui signifie exactement la même chose. C'est juste une façon d'écrire plus compact!
Evidement, cela tout cela te donne le numéro de la ligne, donc après il ne faut pas oublier le numéro (ou le nom) de la colonne.
Ce qui donne :
DernièreLigneDuTableau = [A65536].End(xlUp).Row
Range("A1:A" & DernièreLigneDuTableau ).select
-> permet de sélectionner la zone de A1 jusqu'à la cellule de la colonne A, ligne : la dernière du tableau.
Avantage de la fonction Cells par rapport à la fonction Range, c'est plus facile d'écrire une variable pour le numéro de la ligne ET le numéro de la colonne.
Comme tu as pu le voir, pour la fonction Cells, il faut mettre en premier le numéro de la ligne et en second, le numéro de la colonne (contrairement à la fonction Range qui est l'inverse).
C'est plus clair? Mon explication est compréhensible?
Re : VBA : Comportement erratique d'une fonction somme
Bonsoir Excel lent
Je souhaite tout d'abord faire apparaitre en colonne a le total des colonnes b à f.
J'ai donc fait la macro, elle ne ravaille que si dans la colonne a , je met un lettre ou un chiifre sur la ligne dela dernier ligne et que je la lance.
Je cherche à comprendre pourquoi elle ne démarre pas en A7 d'une part et quelle est l'incidence de définir range(xx").end(xlup). normalemment elle doit remonter à la première ligne non vide, or au cas présent, aucune ligne n'est remplie dans la colonne A . Comment le système réagit il. Que faut il faire pour que la Macro démarre en a7 et nsuite tinne compte de toutes les lignes (de b à f) qui comportent des données.
Je cherche surtout à comprendre le mécanisme pour puvoir le reprooduire sans erreur.
Merci de ton aide et désolé pour ces questions qui peuvent paraître stupides.
J'ai remplacé NuméroDeLaDernièreLigne par sa fonction : Range("A65536").End(xlUp).Row
Mais je n'ai pas touché aux parenthèses! Elles sont ouvertes et fermé exactement au même endroit!
Or toi, dans ton code tu as :
Range("a7:a" & "a65000").End(xlUp)
Tu vois les deux soucis dans ce code?
Premier soucis :
Code:
Range("a7:a" & "a65000")
revient à écrire
Code:
Range("a7:aa65000")
Second soucis :
Range("a7:a" & "a65000").End(xlUp)
Tu as mis le End(xlUp) à l'extérieur de la parenthèse au lieu de l'intérieur. Voici la bonne façon de l'écrire :
Range("a7:a" & range("a65000").End(xlUp))
Non, c'est juste qu'il faut bien débuter un jour! Si tu ne comprend pas, n'hésite pas à le dire.
Concernant ta macro, le soucis est de trouver la colonne dont la dernière rempli est la plus grande! Mais il s'agit des colonnes B à F. Donc le fait de partir sur la colonne A dans ton code n'était pas une bonne idée!
Re : VBA : Comportement erratique d'une fonction somme
Re-bonsoir Bertrand1202,
Alors ce bricolage? Attention a ne pas te taper sur les doigts avec le marteau
Voici ci-dessous un code qui fonctionne et fais ce que tu souhaites :
Code:
Sub testbsomme()
Dim DernièreLigne As Long
Dim i As Long
Dim Colonne As Byte
[COLOR="Green"] ' Cherche le numéro de la dernière ligne rempli, concernant la colonne B[/COLOR]
DernièreLigne = Range("B65536").End(xlUp).Row
For Colonne = 3 To 6 [COLOR="Green"]'chercher si l'une des colonnes 3 (=C) à 6(=F) fini plus bas que colonne B[/COLOR]
If Cells(65536, Colonne).End(xlUp).Row > DernièreLigne Then [COLOR="Green"]'si le numéro de la dernière ligne occupé de la colonne ... est plus bas?[/COLOR]
DernièreLigne = Cells(65536, Colonne).End(xlUp).Row [COLOR="Green"]'alors, mettre ce chiffre dans la variable [I]DernièreLigne[/I] à la place du chiffre précédemment dedans[/COLOR]
End If
Next Colonne
[COLOR="Green"] ' Ecrire en A... la somme de B... à F... (même ligne)[/COLOR]
For i = 7 To DernièreLigne [COLOR="Green"]' Ecrire les sommes B à F pour les lignes 7 à la dernière ligne occupé de la zone B à F[/COLOR]
Range("A" & i) = Range("B" & i) + Range("C" & i) + Range("D" & i) + Range("E" & i) + Range("F" & i)
Next i
End Sub
Ci-joint la macro dans son élément naturel!
Ca te convient?
Rassures-toi, avec le temps, tu pourras faire pareil tout seul.
Bonne fin de soirée
Edition : Salut Staple1600. Et ben!!! Quand il s'agit d'épater les débutants, tu ne fais pas dans le détail!
C'est malin, maintenant il va falloir que tu expliques toutes les fonctions que tu as utilisé ainsi que leurs fonctionnement à l'intérieur de ton code!
Re : VBA : Comportement erratique d'une fonction somme
Bonjour
Histoire de s'amuser un peu et pour rejoindre Excel-lent
Code:
Sub les_ranges()
Dim aa As Range, bb As Range, cc As Range
Dim dd As Range, ee As Range, ff As Range, m$
Set aa = Cells(1, 1): Set bb = Range("A1")
Set cc = Cells(1, "A"): Set dd = Range(Cells(1, 1), Cells(1, 1))
Set ee = [A1]: Set ff = Range(Cells(1, 1), Cells(1, "A"))
m = "Cells(1, 1) ->" & vbTab & vbTab & vbTab & aa.Address(0, 0) & vbCrLf
m = m & "Range(""A1"") ->" & vbTab & vbTab & vbTab & bb.Address(0, 0) & vbCrLf
m = m & "Cells(1, ""A"") ->" & vbTab & vbTab & vbTab & cc.Address(0, 0) & vbCrLf
m = m & "Range(Cells(1, 1), Cells(1, 1)) ->" & vbTab & vbTab & dd.Address(0, 0) & vbCrLf
m = m & "Range(Cells(1, 1), Cells(1, ""A"")) ->" & vbTab & ee.Address(0, 0) & vbCrLf
m = m & "[A1] -> " & vbTab & vbTab & vbTab & vbTab & ee.Address(0, 0)
MsgBox m, vbInformation, "Equivalences d'écritures"
End Sub
PS: juste à titre illustratif , ce n'est pas une solution à la question posée
Re : VBA : Comportement erratique d'une fonction somme
Re
Cette fois-ci ma solution à ta question
Code:
Sub MACRO_SOMME_VALEURS()
With Range("A1:A1" & [A65536].End(xlUp).Row).SpecialCells(xlCellTypeBlanks)
.FormulaR1C1 = "=SUM(RC[1]:RC[255])"
.Value = .Value
End With
End Sub
Et pour garder les formules
Code:
Sub MACRO_SOMME_AVEC_FORMULES()
Range("A1:A1" & [A65536].End(xlUp).Row).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=SUM(RC[1]:RC[255])"
End Sub
PS: ces solutions fonctionnent avec des données disposées comme dans ton fichier joint dans ton premier message
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.