VBA - Remplacer une formule matricielle par un code

R@chid

XLDnaute Barbatruc
Bonjour @ tous,
sur le fichier ci-joint, je cherche à remplacer une formule matricielle sur l'onglet "Etat" par un code VBA.

Merci
 

Pièces jointes

  • Pointage.xlsm
    211.7 KB · Affichages: 66
  • Pointage.xlsm
    211.7 KB · Affichages: 61

job75

XLDnaute Barbatruc
Re : VBA - Remplacer une formule matricielle par un code

Re,

L'effacement de la cellule liée N2 entraîne un bug, c'est normal. Pour l'éviter :

Code:
Private Sub Worksheet_Calculate()
Dim nom$, an%, mois As Byte, t, a(), i&, n&
If [B1] <> "" And [B2] <> "" Then
  nom = [B1]
  an = Year(DateValue("1 " & [B2]))
  mois = Month(DateValue("1 " & [B2]))
  t = [Tableau1]
  ReDim a(1 To UBound(t), 1 To 6)
  For i = 1 To UBound(t)
    If Year(t(i, 1)) = an And Month(t(i, 1)) = mois And t(i, 2) = nom Then
      n = n + 1
      a(n, 1) = t(i, 1): a(n, 2) = t(i, 3)
      a(n, 3) = t(i, 4): a(n, 4) = t(i, 5)
      a(n, 5) = t(i, 6): a(n, 6) = a(n, 5) - a(n, 4)
    End If
  Next i
End If
'---restitution et mise en forme---
Application.ScreenUpdating = False
Application.EnableEvents = False
Range("A8:F" & Rows.Count).Delete xlUp 'RAZ
If n Then
  [A8].Resize(n, 6) = a
  [F1] = Application.Sum(Application.Index(a, , 6))
  [A8].Resize(n, 6).Borders.Weight = xlThin
End If
Application.EnableEvents = True
End Sub
Fichier (2).

Edit : il faudra mettre les cellules F2:F5 au format qui convient.

A+
 

Pièces jointes

  • Pointage(2).xlsm
    199 KB · Affichages: 40
  • Pointage(2).xlsm
    199 KB · Affichages: 44
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : VBA - Remplacer une formule matricielle par un code

je parle du post #8 et aussi le problème avec Me, malgré que j'ai remplacé le Me par Feuil4.
Il faut alors aussi normalement, devant, récupérer Feuil4.[B1] et Feuil4.[B2], si tu tiens à ce que ce soit une procédure de module standard plutôt que de la feuille, bien qu'elle ne soit utilisée que pour celle ci. Si Feuil4 est bien le nom de code de l'objet Worksheet représentant la feuille "Etat".
Remarque; tu peux joindre le classeur si ça ne va toujours pas, que je voie pourquoi…
Il y a peut être un problème parce que Somme = Me.[Somme] devrait être placé avant TriProfDate pour éviter des dégâts ci ce dernier provoque l'exécution de Worksheet_Calculate.
 
Dernière édition:

R@chid

XLDnaute Barbatruc
Re : VBA - Remplacer une formule matricielle par un code

Re,
@ Job75 :
pour les 2 cellules elles doivent être déverrouillées, mais je vais masquer la colonne N et protéger la feuille "Etat", comme ça on ne peut pas les modifier ou leur effacer le contenu.

@ Dranreb :
voici le fichier en pièce jointe.



Merci
 

Pièces jointes

  • Pointage2.xlsm
    213 KB · Affichages: 50

Dranreb

XLDnaute Barbatruc
Re : VBA - Remplacer une formule matricielle par un code

Pour éviter l'incompatibilité de type :
VB:
Private Sub Worksheet_Calculate()
If Not IsEmpty(Somme) Then If Me.[Somme] = Somme Then Exit Sub
ou alors déclarer Somme As Long au lieu de le laisser assumé As Variant pour qu'il ne puisse pas être Empty !
Important: Mettre IMPÉRATIVEMENT TriProfDate après la rectification de Somme: on a une saturation de la pile au bout de 2 secondes sinon.
 
Dernière édition:

Discussions similaires

  • Résolu(e)
Microsoft 365 Copier par mois
Réponses
23
Affichages
406

Statistiques des forums

Discussions
312 582
Messages
2 089 922
Membres
104 307
dernier inscrit
Diet