VBA Poblème avec somme

  • Initiateur de la discussion Initiateur de la discussion Arpette
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Arpette

XLDnaute Impliqué
Bonjour à toutes et à tous,
dans une macro, j'ai écrit ce code pour calculer le montant H.T, T.V.A et T.T.C. Le code fonctionne bien, mon problème est que quelques fois je dois insérer 55 lignes et la problème, ça ne fonctionne plus puisque je me retrouve avec une somme qui devrait être "F21:F106" mais comme j'ai écrit "F21:F50"🙁
Comment je pourrais tester, les deuc cas de figure.
Merci pour votre aide.

Code:
With Sheets("Devis").Range("D:D")
Somme = 0
Somme1 = 0
Somme2 = 0
    Set n = .Find(what:="T.V.A", LookIn:=xlValues, lookat:=xlWhole)
        If Not n Is Nothing Then
            Somme = Application.WorksheetFunction.Sum(Range("F21:F50")) + Somme
            Somme1 = Somme * n(1, 2) + Somme1
            Somme2 = Somme + Somme1 + Somme2
                Set n = .FindNext(n)
        End If
    n(0, 3) = Somme 'Montant H.T
    n(1, 3) = Somme1 'Montant T.V.A
    n(2, 3) = Somme2 'Montant T.T.C
End With
 
Re : VBA Poblème avec somme

Bonjour le fil 🙂
Code:
With Sheets("Devis").Range("D:D")
Code:
Somme = Application.WorksheetFunction.Sum(.Range("F21:F" & .Range("F65536").End(xlUp).Row))
Il me semble qu'il y a un os, car
Code:
Sheets("Devis").Range("D:D").Range("F21:F" & Sheets("Devis").Range("D:D").Range("F65536").End(xlUp).Row)
pour moi équivaut à une zone vide 😛...
Code:
Somme = Application.WorksheetFunction.Sum(Sheets("Devis").Range("F21:F" & Sheets("Devis").Range("F65536").End(xlUp).Row))
a plus de chance de fonctionner 🙄...
Bon dimanche 😎
 
Re : VBA Poblème avec somme

Bonjour JNP, merci pour ta réponse mais ça ne fonctionne pas, avec ce code on cumule le résulat. Ci-joint le fichier. En A21,22,23... de la feuille devis taper DB100
@+
Cijoint.fr - Service gratuit de dépôt de fichiers
 
Re : VBA Poblème avec somme

Re
Sauf erreur de ma part (merci JNP)

Code:
With Sheets("Devis").Range("D:D")
Somme = 0
Somme1 = 0
Somme2 = 0
    Set n = .Find(what:="T.V.A", LookIn:=xlValues, lookat:=xlWhole)
        If Not n Is Nothing Then
            Somme = Application.WorksheetFunction.Sum(Range("F21:F" & Range("F20").End(xlDown).Row)) + Somme
            Somme1 = Somme * n(1, 2) + Somme1
            Somme2 = Somme + Somme1 + Somme2
                Set n = .FindNext(n)
        End If
    n(0, 3) = Somme 'Montant H.T
    n(1, 3) = Somme1 'Montant T.V.A
    n(2, 3) = Somme2 'Montant T.T.C
End With

remarques : Le With Sheets("Devis") n'a pas lieu d'être car tu es dans cette page
Set n = .FindNext(n) : Inutile
 
Re : VBA Poblème avec somme

Re bonjour

Une suggestion
Comme tu utilises la ligne "T.V.A"
Pourquoi ne pas faire
Code:
  Set n = Range("D:D").Find(what:="T.V.A", LookIn:=xlValues, lookat:=xlWhole)
  If Not n Is Nothing Then
    n(0, 3) = Application.WorksheetFunction.Sum(Range("F21:F" & (n.Row - 2)))
    n(1, 3) = n(0, 3) * n(1, 2)
    n(2, 3) = n(0, 3) + n(1, 3)
  End If

Ce n'est qu'une idée
 
Re : VBA Poblème avec somme

Bonsoir Banzai,je vais tester ton code, sinon j'ai solutionné le problème comme ceci.
Merci pour aide
@+
Code:
With Sheets("Devis").Range("D:D")
Somme = 0
Somme1 = 0
Somme2 = 0
    Set n = .Find(what:="T.V.A", LookIn:=xlValues, lookat:=xlWhole)
    l = Range("D1:D65536").Find(n, lookat:=xlWhole).Row
        If l = 52 Then
            Somme = Application.WorksheetFunction.Sum(Range("F21:F50")) + Somme
            Else
            Somme = Application.WorksheetFunction.Sum(Range("F21:F106")) + Somme
        End If
            Somme1 = Somme * n(1, 2) + Somme1
            Somme2 = Somme + Somme1 + Somme2
              
    n(0, 3) = Somme 'Montant H.T
    n(1, 3) = Somme1 'Montant T.V.A
    n(2, 3) = Somme2 'Montant T.T.C
End With
End Sub
 
Re : VBA Poblème avec somme

Bonsoir Banzai, j'ai adapté ta suggestion, ainsi je peux insérer autant de page que je souhaite. Voici le code
Merci pour ton aide
@+
Code:
With Sheets("Devis").Range("D:D")
Somme = 0
Somme1 = 0
Somme2 = 0
    Set n = .Find(what:="T.V.A", LookIn:=xlValues, lookat:=xlWhole)
        If Not n Is Nothing Then
            Somme = Application.WorksheetFunction.Sum(Range("F21:F" & (n.Row - 2))) + Somme
            Somme1 = Somme * n(1, 2) + Somme1
            Somme2 = Somme + Somme1 + Somme2
         End If
    n(0, 3) = Somme 'Montant H.T
    n(1, 3) = Somme1 'Montant T.V.A
    n(2, 3) = Somme2 'Montant T.T.C
End With
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

A
Réponses
4
Affichages
869
A
Réponses
12
Affichages
1 K
M
Réponses
4
Affichages
2 K
ManOfCatz
M
C
  • Question Question
Réponses
8
Affichages
1 K
clarouche33
C
Réponses
8
Affichages
1 K
  • Question Question
Microsoft 365 Programme trop lent
Réponses
12
Affichages
1 K
Retour