Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Rajout de lignes VBA ?

Hubert1959

XLDnaute Nouveau
Bonjour,

Comment faire des sommes multiple en VBA :
J'ai réussie a faire une partie pour un résultat (les entrée (hourra))
voir fichier joint

(mais j'arrive pas à intégrer les autres ligne dans le VBA) pour d'autres résultats

Des charges fixe en cellule (O5)
Des dépenses en cellule (P5)
Ce qui Reste en cellule (Q5) (N5-O5-P5)

Débutant en VBA mais je persiste

Y a surement un truc ?

Merci d'avance de m'indiquer si cela est possible
 

Pièces jointes

  • Compte V1 - Béta.xls
    723.5 KB · Affichages: 8

vgendron

XLDnaute Barbatruc
 

Dranreb

XLDnaute Barbatruc
Ce qui peut être calculé par des formules simples doivent le rester à mon avis.
Si ça gêne un peu le rapatriement des données mémorisées, à supposer qu'elle doivent pouvoir être saisies aussi dans la feuille Compte :
VB:
Private Sub Worksheet_Calculate()
   Dim LDéb As Long, NbL As Integer
   On Error Resume Next
   LDéb = Me.[LDéb]: NbL = Me.[NbL]
   On Error GoTo 0
   Application.EnableEvents = False 'désactive les évènements
   If LDéb > 0 And NbL > 0 Then
      Me.[F1].FormulaR1C1 = "=MATCH(R5C1,Mémoire!C1,0)"
      Me.[G1].FormulaR1C1 = "=DAY(DATE(R1C4,R1C1+1,0))"
      If Me.[F1].Value = LDéb And Me.[G1].Value = NbL Then Application.EnableEvents = True: Exit Sub
      Feuil4.Cells(LDéb, 2).Resize(NbL, 5).Value = Me.[B5:F35].Value
      Feuil4.Cells(LDéb, 8).Resize(22, 2).Value = Me.[H5:I26].Value
      Feuil4.Cells(LDéb, 11).Resize(13, 2).Value = Me.[K5:L17].Value
      End If
   LDéb = Me.[F1].Value: Me.Names.Add "LDéb", LDéb
   NbL = Me.[G1].Value: Me.Names.Add "NbL", NbL
   Me.[B5].Resize(31, 5).ClearContents
   Me.[B5].Resize(NbL, 5).Value = Feuil4.Cells(LDéb, 2).Resize(NbL, 5).Value
   Me.[H5:I26].Value = Feuil4.Cells(LDéb, 8).Resize(22, 2).Value
   Me.[K5:L17].Value = Feuil4.Cells(LDéb, 11).Resize(13, 2).Value
   Application.EnableEvents = True 'réactive les évènements
   End Sub
 

Hubert1959

XLDnaute Nouveau
Re bonjour,

Visiblement cela ne fonctionne pas, la seul qui fonctionne est bien celle de Mr Dranreb qui a eu la bonne solution concernant cette énigme en VBA. Notons que le VBA est pas choses facile (c'est même un peu tordu).
Rien que de vouloir finalise en essayant de Récupérer la valeur restante du mois précèdent de la cellule sur l'autre feuille est aussi une galère.
Bon ! Excel reste un super jeux pour les méninges.
Si je trouve je transmet.
pour le moment ce code ci joint fonctionne grâce a Mr Dranreb.

Pout Info :
Private Sub Worksheet_Change(ByVal Target As Range)
With Sheets("Compte")
If Not Application.Intersect(Target, .Range("I5:I26,L5:L17,B5:F35")) Is Nothing Then 'changement dans ces plages
cancel = True
.Range("N5") = Application.WorksheetFunction.Sum(.Range("I5:I26")) 'entrees
.Range("O5") = Application.WorksheetFunction.Sum(.Range("L5:L17")) ' Charge
.Range("P5") = Application.WorksheetFunction.Sum(.Range("B5:F35")) 'Depenses
.Range("Q5") = .Range("N5") - .Range("O5") - .Range("P5") 'Reste
End If
End With
With Sheets("Mémoire") 'mise en memoire
.Cells(Application.Match([A5], .[A:A], 0), 2).Resize(31, 33) = [B5:AH35].Value 'copie les valeurs
End With
End Sub

Private Sub Worksheet_Calculate()
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
With Sheets("Mémoire")
[B5:AH35] = .Cells(Application.Match([A5], .[A:A], 0), 2).Resize(31, 33).Value 'copie les valeurs
End With
Application.EnableEvents = True 'réactive les évènements
Application.ScreenUpdating = True
End Sub
 

vgendron

XLDnaute Barbatruc
Re bonjour,

Visiblement cela ne fonctionne pas, la seul qui fonctionne est bien celle de Mr Dranreb qui a eu la bonne solution concernant cette énigme en VBA. Notons que le VBA est pas choses facile (c'est même un peu tordu).
La règle c'est que si une réponse ne te donne pas satisfaction, on n'ouvre PAS un second post
et tu expliques dans le post d'origine pourquoi ca ne donne pas le résultat voulu..
mais ca.. ca passe aussi par répondre aux questions qui te sont posées..
 

Hubert1959

XLDnaute Nouveau
Bonjour,

J'ai créé un planning avec mémoire et (avec des noms fictifs et des horaires fictif), tout en VBA
Je cale sur le récapitulatif des heures (en formule classique Excel (no soucis))
Ex :
=SIERREUR(SI(L$5=$C6;$E6-$D6;"0");"0")+SIERREUR(SI(L$5=$F6;$H6-$G6;"0");"0")

C’est encore le VBA qui bloque ?
Evidement j’ai essayé plein de solution trouvé sur internet, mais j’ai toujours une erreur.
Exemple :

Range("U7").Formula = "=IFERROR(IF(L$5=$C6;$E6-$D6;0);0)+IFERROR(IF(L$5=$F6;$H6-$G6;0);0)"
Ou
[L6:Q26].Formula = "=IFERROR(IF(L$5=$C6,$E6-$D6,0),0)+IFERROR(IF(L$5=$F6,$H6-$G6,0),0)"

Avec un module

Mais rien !
Je remercie d'avance si cela est possible d’y jeter un œil SVP.

Je joins un fichier fictif pour l'exemple.

(J’essaie de respecter les règles j'étais pas trop au courant)

Merci d'avance
 

Pièces jointes

  • Planning V-Beta.xlsm
    345.1 KB · Affichages: 1

vgendron

XLDnaute Barbatruc
il va falloir choisir UN seul post pour poser la question
(pour laquelle tu as déjà une réponse)
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…