Pointage des X devenant des P ( RESOLU )

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

JBARBE

XLDnaute Barbatruc
Bonjour à tous,

J'ai fait une macro qui marche mais qui doit ramer sur plusieurs lignes !

Je m'explique : Lorsque je clic sur le bouton "pointage" alors que le solde total est vide, celui-ci se rempli !

Ensuite j'ai la colonne à côté "pointage des P" qui se rempli lorsque je mets des "X" dans la colonne A et que le clic à nouveau sur le bouton " pointage"!

Je voudrais savoir si une macro plus rapide peut-être faite avec les fonctions qui lui sont attribués dans mon exemple !

Code:
Option Explicit

Sub Pointage_des_X()
Dim I As Long
 Application.ScreenUpdating = False
 Range("Effacer").ClearContents
 Range("H1") = Range("E1")
 If Cells(4, 1) = "" Then
   Cells(4, 9) = Range("H1") + Cells(4, 6) - Cells(4, 5)
  Cells(4, 9).NumberFormat = "###0.00 ""€"";[Red]-###0.00 ""€"""
  ElseIf Cells(4, 1) = "P" Then
   Cells(4, 9) = Range("H1") + Cells(4, 6) - Cells(4, 5)
  Cells(4, 9).NumberFormat = "###0.00 ""€"";[Red]-###0.00 ""€"""
  Cells(4, 8) = Range("H1") + Cells(4, 6) - Cells(4, 5)
  Cells(4, 8).NumberFormat = "###0.00 ""€"";[Red]-###0.00 ""€"""
  Range("H1") = Cells(4, 9)
  ElseIf Cells(4, 1) = "X" Then
     Cells(4, 8) = Range("H1") + Cells(4, 6) - Cells(4, 5)
     Cells(4, 8).NumberFormat = "###0.00 ""€"";[Red]-###0.00 ""€"""
     Cells(4, 9) = Range("H1") + Cells(4, 6) - Cells(4, 5)
     Cells(4, 9).NumberFormat = "###0.00 ""€"";[Red]-###0.00 ""€"""
      Cells(4, 1) = "P"
      Range("H1") = Cells(4, 8)
  End If
For I = 5 To 65536
   If Cells(I, 2) = "" Then Exit Sub
   If Cells(I, 1) = "" Then
     Cells(I, 9) = Cells(I - 1, 9) + Cells(I, 6) - Cells(I, 5)
     Cells(I, 9).NumberFormat = "###0.00 ""€"";[Red]-###0.00 ""€"""
   ElseIf Cells(I, 1) = "X" Then
     Cells(I, 8) = Range("H1") + Cells(I, 6) - Cells(I, 5)
     Cells(I, 8).NumberFormat = "###0.00 ""€"";[Red]-###0.00 ""€"""
     Cells(I, 9) = Cells(I - 1, 9) + Cells(I, 6) - Cells(I, 5)
     Cells(I, 9).NumberFormat = "###0.00 ""€"";[Red]-###0.00 ""€"""
     Range("H1") = Cells(I, 8)
     Cells(I, 1) = "P"
     ElseIf Cells(I, 1) = "P" Then
     Cells(I, 8) = Range("H1") + Cells(I, 6) - Cells(I, 5)
     Cells(I, 8).NumberFormat = "###0.00 ""€"";[Red]-###0.00 ""€"""
     Cells(I, 9) = Cells(I - 1, 9) + Cells(I, 6) - Cells(I, 5)
     Cells(I, 9).NumberFormat = "###0.00 ""€"";[Red]-###0.00 ""€"""
     Range("H1") = Cells(I, 8)
   End If
Next I
 Application.ScreenUpdating = True

End Sub

J'ai modifié la macro parce qu'elle ne tenait pas compte des P déjà fait ! 18 h 30

Merci à l'avance !
 

Pièces jointes

Dernière édition:
Re : Pointage des X devenant des P

Re
@ JBARBE



Nous sommes, peut être, d'accord sur une boucle, bien que je pense, comme tous le monde, qu'il faudrait limiter la casse (.End(3).row ou exit sub, ou.... ),mais limiter la casse.
Pär contre, si tu sélectionne tes deux colonnes, que tu applique le mondialement célèbre format ###0.00 "€";[Red]-###0.00 "€"
J'aimerais comprendre pourquoi le re mettre puis la prochaine fois le re re mettre puis le coups suivant le re re re.....
Lignes inutiles, temps rallongé..

@Staple : tu peux dormir en paix, mais tu avais bien compris que ma haine n'est que feinte, Par contre je porte Haut les couleurs du club "Des Un" 😀

Merci Efgé, je n'y avais pas pensé !

Voici la modification !
Code:
 Range("Effacer").ClearContents
 Range("Effacer").NumberFormat = "###0.00 ""€"";[Red]-###0.00 ""€"""

Code:
Sub Pointage_X()
Dim C As Range
 Application.ScreenUpdating = False
 Range("Effacer").ClearContents
 Range("Effacer").NumberFormat = "###0.00 ""€"";[Red]-###0.00 ""€"""
 Range("H1") = Range("E1")
 If Cells(4, 1) = "" Then
   Cells(4, 9) = Range("H1") + Cells(4, 6) - Cells(4, 5)
  ElseIf Cells(4, 1) = "P" Then
   Cells(4, 9) = Range("H1") + Cells(4, 6) - Cells(4, 5)
  Cells(4, 8) = Range("H1") + Cells(4, 6) - Cells(4, 5)
  Range("H1") = Cells(4, 9)
  ElseIf Cells(4, 1) = "X" Then
     Cells(4, 8) = Range("H1") + Cells(4, 6) - Cells(4, 5)
     Cells(4, 9) = Range("H1") + Cells(4, 6) - Cells(4, 5)
      Cells(4, 1) = "P"
      Range("H1") = Cells(4, 8)
  End If
For Each C In Range("A5:A65536")
   If C = "" And C.Offset(0, 1) <> "" Then
     C.Offset(0, 8) = C.Offset(-1, 8) + C.Offset(0, 5) - C.Offset(0, 4)
   ElseIf C = "X" And C.Offset(0, 1) <> "" Then
     C.Offset(0, 7) = Range("H1") + C.Offset(0, 5) - C.Offset(0, 4)
     C.Offset(0, 8) = C.Offset(-1, 8) + C.Offset(0, 5) - C.Offset(0, 4)
     Range("H1") = C.Offset(0, 7)
     C = "P"
     ElseIf C = "P" And C.Offset(0, 1) <> "" Then
     C.Offset(0, 7) = Range("H1") + C.Offset(0, 5) - C.Offset(0, 4)
     C.Offset(0, 8) = C.Offset(-1, 8) + C.Offset(0, 5) - C.Offset(0, 4)
     Range("H1") = C.Offset(0, 7)
     Else
     Exit Sub
   End If
Next C
 Application.ScreenUpdating = True
End Sub

bonne journée
 
Re : Pointage des X devenant des P

Re
Une proposition:
Remplacer la formule du range Effacer par
=DECALER(Feuil1!$H$4;;;NB(Feuil1!$B:$B);2)
Ça limite automatiquement la plage au nombre de dates présentent en colonne B

Ensuite ce code
VB:
Sub Pointage_X_FG()
Dim C As Range, R As Range
Set R = Range("Effacer")
Application.ScreenUpdating = False
R.ClearContents
R.NumberFormat = "###0.00 ""€"";[Red]-###0.00 ""€""" 'Bien que une fois fait sur toutes la colonne cela ne servent a rien
Range("H1") = Range("E1")


Cells(4, 9) = Range("H1") + Cells(4, 6) - Cells(4, 5)
If Cells(4, 1) <> "" Then
    Cells(4, 8) = Range("H1") + Cells(4, 6) - Cells(4, 5)
    Range("H1") = IIf(Cells(4, 1) = "P", Cells(4, 9), Cells(4, 8))
End If
If Cells(4, 1) = "X" Then Cells(4, 1) = "P"


For Each C In R.Offset(1, -7).Resize(R.Rows.Count - 1, 1)
    C.Offset(0, 8) = C.Offset(-1, 8) + C.Offset(0, 5) - C.Offset(0, 4)
    If C <> "" Then
        C.Offset(0, 7) = Range("H1") + C.Offset(0, 5) - C.Offset(0, 4)
        Range("H1") = C.Offset(0, 7)
    End If
    If C = "X" Then C = "P"
Next C


Application.ScreenUpdating = True
End Sub

Cordialement
 
Re : Pointage des X devenant des P

Re
Tu as bien modifier la formule du nom Effacer ?
Cordialement

Petite erreur de ma part dans la formule Effacer que j'ai rectifié !

Je ne pense pas que l'on peut faire mieux sur la rapidité de la macro !

Certes la vie est chère, mais le nombre de dépenses et dans une moindre mesure les recettes (hélas!), ne dépasserons pas les 500 lignes ( fichier de 2013 ) !

Bref, ta macro comporte moins de ligne et, de fait, reste plus exploitable !

N'est-ce pas là le but recherché !

Merci encore et A+
 
Dernière édition:
Re : Pointage des X devenant des P

Re
Bonjour Job

...Bah vous n'avez jamais entendu parler de tableaux VBA (matrices) ?...
Voila, voila, j'arrive...
VB:
Sub Pointage_X_FG_3()
Dim R As Range, T As Variant, Var As Long, i As Long
Application.ScreenUpdating = False


With Range("Effacer")
    .ClearContents
    .NumberFormat = "###0.00 ""€"";[Red]-###0.00 ""€"""
End With


Var = Range("E1")
With ActiveSheet
    Set R = .Range(.Cells(4, 1), .Cells(.Rows.Count, 2).End(3)(1, 8))
End With
T = R


T(1, 9) = Var + T(1, 6) - T(1, 5)
If T(1, 1) <> "" Then
    T(1, 8) = Var + T(1, 6) - T(1, 5)
    Var = IIf(T(1, 1) = "P", T(1, 9), T(1, 8))
End If
If T(1, 1) = "X" Then T(1, 1) = "P"


For i = 2 To UBound(T, 1)
    T(i, 9) = T(i - 1, 9) + T(i, 6) - T(i, 5)
    If T(i, 1) <> "" Then
        T(i, 8) = Var + T(i, 6) - T(i, 5)
        Var = T(i, 8)
    End If
    If T(i, 1) = "X" Then T(i, 1) = "P"
Next i


R = T
Range("H1") = Var


Application.ScreenUpdating = True
End Sub

Mais est-ce aussi compréhensible ?

Cordialement
 
Re : Pointage des X devenant des P

Re
Bonjour Job


Voila, voila, j'arrive...

Mais est-ce aussi compréhensible ?

Cordialement

Certes, cette macro est une autre programmation que je n'ai jamais eu l'occasion d'apprendre( vieux bouquins Excel 2003) , mais pour peu que l'on connaisse le VBA cela reste compréhensible !

Mais dans ma demande, l'essentiel était de trouver une méthode simple et, de fait, efficace et rapide dans le calcul car il peut y avoir une demande à peu prés identique, avec des lignes pouvant s'allonger !

En tout cas, moi qui désespérait, je peux dire que je suis gâté !

Merci et bonne soirée à tous !
 
Re : Pointage des X devenant des P

Re
Bonjour Job


Voila, voila, j'arrive...
VB:
Sub Pointage_X_FG_3()
Dim R As Range, T As Variant, Var As Long, i As Long
Application.ScreenUpdating = False


With Range("Effacer")
    .ClearContents
    .NumberFormat = "###0.00 ""€"";[Red]-###0.00 ""€"""
End With


Var = Range("E1")
With ActiveSheet
    Set R = .Range(.Cells(4, 1), .Cells(.Rows.Count, 2).End(3)(1, 8))
End With
T = R


T(1, 9) = Var + T(1, 6) - T(1, 5)
If T(1, 1) <> "" Then
    T(1, 8) = Var + T(1, 6) - T(1, 5)
    Var = IIf(T(1, 1) = "P", T(1, 9), T(1, 8))
End If
If T(1, 1) = "X" Then T(1, 1) = "P"


For i = 2 To UBound(T, 1)
    T(i, 9) = T(i - 1, 9) + T(i, 6) - T(i, 5)
    If T(i, 1) <> "" Then
        T(i, 8) = Var + T(i, 6) - T(i, 5)
        Var = T(i, 8)
    End If
    If T(i, 1) = "X" Then T(i, 1) = "P"
Next i


R = T
Range("H1") = Var


Application.ScreenUpdating = True
End Sub

Mais est-ce aussi compréhensible ?

Cordialement

petit problème : le calcul de 1731,54 € se fait en arrondissant les Euros :
 

Pièces jointes

Re : Pointage des X devenant des P ( probléme non résolu complétement)

salut

avec un Tableau ? Une autre façon de gérer le compte (saisie et pointage seulement; échéancier, bilan ... à prévoir). Les formules sont recopiées lors d'ajout de lignes.
 

Pièces jointes

- 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

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Réponses
2
Affichages
201
Réponses
8
Affichages
466
Réponses
4
Affichages
177
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
169
Retour