XL 2019 L'addition SVP !!

  • Initiateur de la discussion Initiateur de la discussion Gok73
  • 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 !

Gok73

XLDnaute Nouveau
Bonjour,

Help !

Je crise sur une formule ultra simple en VBA…ma demande d’aide a pour but de voir mon erreur de programmation, vu que je suis débutant, pour que je les cerne plus facilement. Sinon je comprendrai que les calculs se fassent le plus simplement avec l’automatisation… mon but ici est plus pour cerner la programmation qu’autre chose.

j'essaie de faire une simple addition (Prix HT + TVA) j'ai beau essayer de voir mais à chaque fois c'est la ligne "nblignes" qui pose problème me dit le Debogueur...

Merci d’avance de votre aide

Sub Prix_TTC()

Range("A1").Select 'Je commence en A1

Do Until ActiveCell.Value = "Prix TTC" 'Je recherche la case Prix TTC
ActiveCell.Offset(0, 1).Select 'je passe à la cellule d’après si je n’ai pas trouvé Prix TT
Loop 'Je refais l’opération jusqu’à trouver Prix TTC

nblignes = ActiveCell.CurrentRegion.Rows.Count - 1 'Je vais à la cellule d’en dessous de l’en-tête1
For i = 1 To nblignes

ActiveCell.Value = ActiveCell.Offset(0, -2).Value + ActiveCell.Offset(0 - 1).Value 'Prix TTC + TVA
ActiveCell.Offset(1, 0).Select 'Je continue sur la cellule d’en-dessous

Next 'etc.

Range("A1").Select 'Je retourne en A1

End Sub


ça bloque à nblignes...pourquoi ????
 

Pièces jointes

Solution
bonjour
Sur ta proposition qui est loin d'être optimisée
j'ai rajouté un
ActiveCell.Offset(1, 0).Select
après la première boucle
et il manquait la virgule dans
ActiveCell.Offset(0, -1)

VB:
Sub Prix_TTC()

Range("A1").Select 'Je commence en A1

Do Until ActiveCell.Value = "Prix TTC" 'Je recherche la case Prix TTC
ActiveCell.Offset(0, 1).Select 'je passe ˆ la cellule dÕaprs si je nÕai pas trouvŽ Prix TT
Loop 'Je refais lÕopŽration jusquÕˆ trouver Prix TTC

nblignes = ActiveCell.CurrentRegion.Rows.Count - 1 'Je vais ˆ la cellule dÕen dessous de lÕen-tte1
ActiveCell.Offset(1, 0).Select
For i = 1 To nblignes

ActiveCell.Value = ActiveCell.Offset(0, -2).Value + ActiveCell.Offset(0, -1).Value  'Prix TTC + TVA
ActiveCell.Offset(1, 0).Select 'Je...
bonjour
Sur ta proposition qui est loin d'être optimisée
j'ai rajouté un
ActiveCell.Offset(1, 0).Select
après la première boucle
et il manquait la virgule dans
ActiveCell.Offset(0, -1)

VB:
Sub Prix_TTC()

Range("A1").Select 'Je commence en A1

Do Until ActiveCell.Value = "Prix TTC" 'Je recherche la case Prix TTC
ActiveCell.Offset(0, 1).Select 'je passe ˆ la cellule dÕaprs si je nÕai pas trouvŽ Prix TT
Loop 'Je refais lÕopŽration jusquÕˆ trouver Prix TTC

nblignes = ActiveCell.CurrentRegion.Rows.Count - 1 'Je vais ˆ la cellule dÕen dessous de lÕen-tte1
ActiveCell.Offset(1, 0).Select
For i = 1 To nblignes

ActiveCell.Value = ActiveCell.Offset(0, -2).Value + ActiveCell.Offset(0, -1).Value  'Prix TTC + TVA
ActiveCell.Offset(1, 0).Select 'Je continue sur la cellule dÕen-dessous

Next 'etc.

Range("A1").Select 'Je retourne en A1

End Sub

ma proposition :
Il n'est pas nécessaire de sélectionner la cellule pour effectuer des actions dessus ( pas de sélect ou activate)
Code:
Sub jm()
    'déclaration de variable
    Dim cell As Range
    'Pour chaque cellule comprise enttre la cellule A2 et la dernière cellule occupée de la colonne A
    For Each cell In Range("A2:A" & Range("A1000").End(xlUp).Row)
       'j 'effectue l'addition
        cell.Offset(0, 2) = cell + cell.Offset(0, 1)
        ' je passe à la ligne suivante
    Next
End Sub
 
Dernière édition:
Bonjour Gok73, JM27,

« L'addition SVP !! »

oui, voilà, ça vient ! (on n'est pas aux pièces, hein ? 😜 😁)

Image.jpg


bienvenue sur le site XLD ! 🙂

soan
 
Merci pour ton aide JM27 👍
Je sors juste d'une semaine de formation VBA...et c'est très court une semaine !!!
Le formateur a beaucoup insisté sur les activecell (qu'il maîtrise très bien d'ailleurs) donc automatiquement j'essaie d'appliquer ce qu'il m'a enseigné. Les révisions vont être longues 😁🤣
 
bonjour
désolé mais ton formateur a tout faux.(dans ce cas)
Si tu fais des gros traitements avec des activecell , tu vas avoir des temps de traitement très longs.
de plus tu peux travailler aussi sur des feuilles sans les sélectionner , mais en les nommant uniquement!!
 
Dernière édition:
@Gok73

c'est moi qui régale, alors voici ton fichier en retour. 😀

VB:
Sub Prix_TTC()
  Dim HT%, lig&: lig = 2: Application.ScreenUpdating = 0
  Do
    With Cells(lig, 1)
      HT = .Value: If HT = 0 Then Exit Sub
      .Offset(, 2) = HT + .Offset(, 1)
      lig = lig + 1
    End With
  Loop
End Sub

c'est pour ton exemple avec des prix entiers.

si ensuite tu utilises des prix avec des centimes, mets : Dim HT@, lig&
au lieu de : Dim HT%, lig&.

ou éventuellement : Dim HT#, lig&



quelques caractères de déclaration de type :

% : Integer
@ : Currency
# : Double

ainsi, Dim HT@ est équivalent à : Dim HT As Currency



cela dit, pourquoi faire une macro là où une simple formule suffirait ?
surtout dans un tableau structuré !
formule en C2 :

=Tableau1[[#Cette ligne];[Prix HT]]+Tableau1[[#Cette ligne];[TVA]]

(formule qui est recopiée automatiquement en dessous)

soan
 

Pièces jointes

Dernière édition:
Bonjour Gok73, JM27, soan (tu ne te refuses rien),

Bien d'accord JM27 mais le formateur a peut-être sa pédagogie à lui 🙄

En VBA les boucles avec modifications des cellules prennent beaucoup de temps s'il y a beaucoup de lignes.

Il faut donc les éviter, en plus c'est très facile sur un tableau structuré :
VB:
Sub Prix_TTC()
Cells.Find("Prix TTC", , xlValues).Offset(1) = "=@[Prix HT]+@[TVA]"
End Sub
A+
 

Pièces jointes

Mais la solution précédente nécessite que la colonne du tableau soit vide pour que la formule se propage.

Donc utilisez ceci qui fonctionnera dans tous les cas :
VB:
Sub Prix_TTC()
With [Tableau1[Prix TTC]]
    .Formula = "=@[Prix HT]+@[TVA]"
    .Value = .Value 'supprime les formules
End With
End Sub
 

Pièces jointes

Bonjour job75,

tu as écrit : « soan (tu ne te refuses rien) »

tu as pas vu le nom du restaurant ? c'est : « LE SWANN » ! 😊

alors c'est mon propre restaurant, à moi soan ! 😜 😛 😁​

donc j'ai rien à payer : c'est moi qui encaisse ! 🤑 🤑 🤑

(si seulement ça pouvait être vrai ! 🙄)

soan
 
Merci pour ton aide JM27 👍
Je sors juste d'une semaine de formation VBA...et c'est très court une semaine !!!
Le formateur a beaucoup insisté sur les activecell (qu'il maîtrise très bien d'ailleurs) donc automatiquement j'essaie d'appliquer ce qu'il m'a enseigné. Les révisions vont être longues
Mais la solution précédente nécessite que la colonne du tableau soit vide pour que la formule se propage.

Donc utilisez ceci qui fonctionnera dans tous les cas :
VB:
Sub Prix_TTC()
With [Tableau1[Prix TTC]]
    .Formula = "=@[Prix HT]+@[TVA]"
    .Value = .Value 'supprime les formules
End With
End Sub

Merci à tous pour votre aide !
Je viens de découvrir 4 programmes différents en l'espace de 3 mails pour le même résultat !! Dingue !
Je crois que je vais des cures de Doliprane pour les semaines à venir ! 😛
Dans tous les cas, il faudra bien qu'à un moment je commence à entrer dans les détails...pour l'instant, je me concentre sur la base et je prends note de toutes vos lignes !!

Merci encore !!👍👍
 
- 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

Réponses
2
Affichages
707
Réponses
4
Affichages
586
Retour