VBA-Passage de ligne en ligne après calcul

Bonjour à tous,

Je suis nouveau sur le forum et je suis aussi novice sur VBA et n'ai pas suivi de cours dessus mais j'essaie de me renseigner au maximum, je suis plus à l'aise sur les formules qu'en VBA.

Fichier

En fait, j'ai créé un fichier salaire, où le tout se fait par le biais de la colonne AD (net à payer, à renseigner manuellement) et je dois calculer le salaire brut (colonne N) par le biais de ce salaire net. Les impôts (déjà avec formule) sont d'un taux progressif alors ce qui complique un peu les choses (nous n'allons pas nous focaliser dessus car il y a déjà une formule qui le calcule), alors faire le calcul depuis une formule est impossible pour moi (pour cause de références circulaires).

Jusqu'à présent, les salaires bruts ont été faits par tâtonnement pour avoir le net voulu (automatique) dans colonne X (qui devrait être égal à la colonne AD "Net à payer" aussi - manuel), mais ce n'est pas du tout professionnel et fastidieux de le faire pour chaque employés alors, je voudrais l'automatiser.

J'ai fait une petite macro où j'ai obtenu le résultat voulu sur la ligne 6, mais je ne sais pas comment faire la boucle pour que ce soit automatique jusqu'en bas (colonne Y), et je voudrais tout simplement que cette macro descend ligne par ligne quand la cellule de la colonne Y (Equilibre) est à zéro.

Sub Salaire_brut()

Range("Y8").Copy
Range("N8").PasteSpecial Paste:=xlPasteValues

While Range("Y8").Value <> 0
Range("N8") = Range("N8").Value + Range("Y8").Value

Wend

End Sub

Vous remerciant à l'avance pour vos aides

Bonjour,

Commence peut-être par là :

https://www.excel-pratique.com/fr/vba/boucles.php

Bonjour,

Merci pour le retour rapide, je vais me plonger dessus, et reviendrai.

Bonjour à tous,

J'ai galéré pour trouver la solution suivant le cours que Pedro22 m'a indiqué, mais finalement, j'ai pu arriver à avoir le résultat voulu

Merci beaucoup.

C'était simple mais pour nous les nuls, c'est un peu compliqué

Si vous pouvez me proposer un code mieux que le mien, ce sera gentil de me le proposer pour que je puisse aussi avancer

Sub Salaire_brut()

Dim i As Integer

For i = Range("Z1").Value To Range("Z2").Value

Range("Y" & i).Copy
Range("N" & i).PasteSpecial Paste:=xlPasteValues

While Range("Y" & i).Value <> 0
Range("N" & i) = Range("N" & i).Value + Range("Y" & i).Value

Wend

Next

End Sub

Bonjour ASR_1111, Pedro,

je te retourne ton fichier modifié :

saisie des salaires nets :

* en AD6 : 125 000 ➯ en N6 : 136 875

* en AD7 : 215 000 ➯ en N7 : 243 541

* en AD8 : 200 000 ➯ en N8 : 228 541

* en AD9 : 145 000 ➯ en N9 : 156 875

etc...


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

Bonjour dhany,

Merci pour ton retour, j'ai regardé le fichier, c'est un truc de ouf!!! Est-ce que tu peux m'expliquer les étapes?

Le fichier fonctionne et j'ai le résultat voulu, mais à partir de 368 000, la celllule "équilibre" ne donne plus zéro.

Et, peux tu me donner le tuyau comment faire apparaître le résultat à chaque validation par entrée?

tu a écrit :

à partir de 368 000, la celllule "équilibre" ne donne plus zéro.

exact ; voici la nouvelle version :

c'est ok à partir de 368 000 : tu peux aller jusqu'à 2 milliards, et même dépasser un peu plus : jusqu'à 2 147 000 000 ; mais évite quand même d'aller au-delà ! sinon plantage : dépassement de capacité ➯ ton boss pourra plus te payer ton salaire !


les étapes sont celles que tu as toi-même décrites ; le résultat apparaît à la validation par entrée car j'ai utilisé la procédure événementielle Worksheet_Change() ; regarde le code VBA du module de Feuil1 (SALAIRES).

dhany

@ASR_1111

tu a écrit :

Est-ce que tu peux m'expliquer les étapes?

fais Alt F11 pour aller sur la fenêtre de « Microsoft Visual Basic », puis regarde cette image :

screen

dans ton vrai fichier, fais un double-clic sur Feuil1 (SALAIRES) (ou un clic simple puis Entrée) ➯ ça ouvre à droite une page blanche : c'est là où tu dois copier / coller le code VBA ; tu peux faire ce copier / coller à partir d'ici :

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim lig&, vx&
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Column <> 30 Then Exit Sub
    lig = .Row: If lig < 6 Then Exit Sub
    vx = Val(.Value)
  End With
  Application.ScreenUpdating = 0
  With Cells(lig, "N")
    .ClearContents: If vx = 0 Then Exit Sub
    .Value = .Offset(, 11)  '1ère valeur initiale
    Do
      .Value = .Value + .Offset(, 11) 'ajustement
    Loop Until .Offset(, 11) = 0
  End With
End Sub

ensuite, y'a pas de bouton OK à cliquer ; fais Alt F11 pour retourner sur Excel ; c'est tout :

tu peux utiliser ton vrai fichier comme le fichier exemple.

dhany

Bonjour,

Une autre proposition avec Valeur cible...

Cdlt.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
    If Target.ListObject Is Nothing Then Exit Sub
    If Target.Count > 1 Then Exit Sub
    Set rng = Me.ListObjects(1).ListColumns(30).DataBodyRange
    If Not Intersect(Target, rng) Is Nothing Then
        If IsEmpty(Target) Then Target.Offset(, -16).Value = Empty: Exit Sub
        Application.ScreenUpdating = False
        Target.Offset(, -16).Value = Target.Value
        Target.Offset(, -5).GoalSeek goal:=0, changingcell:=Target.Offset(, -16)
    End If
End Sub

Bonsoir.

Désolé car je n'ai pas pu me connecter ces derniers temps, nous sommes très pris puisque c'est janvier et que c'est aussi la clôture mensuelle, dans mon travail, c'est là où ça chauffe le plus

Merci à vous les amis, ça fonctionne , ce sont des trucs que je souhaiterai vivement maîtriser comme vous, un jour...

J'apprécie beaucoup vos aides, merci

Bonjour ASR_1111,

merci pour ton retour, et pour avoir passé le sujet en résolu !

bonne continuation, et bon courage pour ton job !

dhany

Merci.

Bon courage à vous aussi et très heureux que vous aidez les gens avec enthousiasme.

Rechercher des sujets similaires à "vba passage ligne calcul"