Problème VBA (résultat)

Bonjour à tous,

J'ai 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)).

1 - Le cumul des heures journalier fonctionne très bien.

2 – La mise en mémoire aussi (je peux revenir à une date antérieur ou supérieur), si je passe ne semaine 2 et reviens en semaine 1 je retrouve mes informations. No soucis.

Mais

Le récap d’heures effectuer y a un problème.

(S6 :X6) cellule de récap.

1 - Avec un module (vba) ça fonctionne que si je presse sur la touche supprime du secteur

(Récapitulatif : Matin / Après-Midi). (L6 : Q26).

2- j’ai un décalage de cellule sur la droite ???

Je joins un fichier fictif pour l'exemple.

Merci d'avance

13planning-v-4.zip (246.63 Ko)

Bonjour

Assez bizarrement, je retrouve ce planning dans ce fil --> https://forum.excel-pratique.com/excel/probleme-vba-avec-sierreur-197295 et ouvert sous le nom "Hubert1959" devenu "Invité"

Quid ?

A+

Re bonjour,

Oui c'est totalement le cas

J’avais laissé tomber faute d'avoir pu mener à bien ma recherche et du coup je me suis désinscrit du groupe.

J’ai pensé que c’était impossible.

Du coup je me suis dit que je devais quand même essayer de trouver la solution.

Je me suis réinscrit et bien sûr il est impossible de reprendre son ancien code.

J’ai dû tout refaire à zéro.

La pagaille quoi !.

Bonjour,

Oui c'est totalement le cas
J’avais laissé tomber faute d'avoir pu mener à bien ma recherche et du coup je me suis désinscrit du groupe.
J’ai pensé que c’était impossible.

Je vous confirme que vous pouviez recréer votre compte en utilisant le même pseudo


Concernant votre demande, une remarque concernant le code IFERROR que vous avez placé dans le module. Prenez la bonne habitude de pas utiliser un nom de fonction utilisé par excel pour nommer vos modules ou vos codes. C'est une manière d'avoir des plantages ou parfois de supprimer une fonctionnalité et de ne pas comprendre le pourquoi.
Donc là supprimez le module et la sub.

Pour votre "décalage", je suppose que vous parlez de la cellule en S6 qui ne reprend pas les totaux ?
Si oui, je vous donne les étapes à suivre que j'ai préparées

Crdlt

Hello,

Merci pour tous ces conseils (car j'apprends en même temps), car les cours en VBA ne remplacent pas l’expérience humaine.

J’ai modifier le nom du module.

Néanmoins, je remarque les deux défauts suivants :

  1. Pour que le calcul du total d’heure soit effectué (cellule S6 à X6) il faut que je me place (n’importe où dans le cadre (L6 : Q26) et presser sur la touche (Suppr).
  2. La cellule S6 qui correspond à (Apolline) le calcul ne se fait pas.

CDT

Phil

re,

Je n'ai pas besoin de votre fichier en fait puisque vous l'aviez posté à l'ouverture du fil... je l'ai supprimé de votre dernier post

La cellule S6 qui correspond à (Apolline) le calcul ne se fait pas.

Si les calculs se font mais la méthode dans le code n'est pas correcte

Par rapport au fichier posté à l'ouverture du fil
, faites les changements suivants:

1. Remplacez le code Change par celui ci-dessus

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False 'désactive les évènements
With Sheets("Planning")
    .Range("S6") = Application.WorksheetFunction.Sum(.Range("L6:L26"))
    .Range("T6") = Application.WorksheetFunction.Sum(.Range("M6:M26"))
    .Range("U6") = Application.WorksheetFunction.Sum(.Range("N6:N26"))
    .Range("V6") = Application.WorksheetFunction.Sum(.Range("O6:O26"))
    .Range("W6") = Application.WorksheetFunction.Sum(.Range("P6:P26"))
    .Range("X6") = Application.WorksheetFunction.Sum(.Range("Q6:Q26"))
End With

With Sheets("Mémoire") 'mise en memoire
    .Cells(Application.Match(Range("A6"), .Range("A:A"), 0), 2).Resize(21, 22) = Range("C6:X26").Value 'copie les valeurs
End With
Application.EnableEvents = True 'réactive les évènements
End Sub

NB : j'ai laissé l'instruction EnableEvents, bien que je l'évite toujours au profit d'une autre méthode car si votre code plante entre la valeur False et True, vous perdez la fonctionnalité événementielle sur tous vos codes et ce, pour tous les fichiers ouverts.

2. Choisir semaine 1
puis faites une double click en C6 (sur Apolline) et Entrée sur votre clavier. Cela remettra à jour les données
3. Refaites la même chose
que le point 2 , mais avec la semaine 2
4. Allez dans la feuille "Mémoire"
et mettez le format Heure dans la colonne R mais uniquement entre la ligne 1 et la ligne 17535

Un plus à faire :

1. Pour que vous liste déroulante des noms ne comporte pas un vide à la fin :
- Allez dans le manu Formule --> Gestionnaire de noms
- sélectionnez "Noms"
- dans la rubrique "Fait référence à", mettez cette formule --> =DECALER(Data!$H$1;;;NBVAL(Data!$H:$H))

2. Attention avec la feuille Mémoire dans la quelle vous avez mis des bordures et des couleurs jusqu'à la dernière ligne de votre feuille. Il n'y a rien de plus mauvais pour faire grossir le poids d'un fichier. Là Sélectionnez les lignes 17536 jusque la ligne 1048576 (donc dernière ligne), puis supprimer les bordures et les couleurs jaunes.
Pour supprimer les bordures vous devrez vous y reprendre à plusieurs fois car excel ne peut pas agir toutes les lignes sélectionnées pour cette suppression
Pour supprimer les couleurs, ne mettez jamais du blanc mais sélectionnez "Aucun remplissage"

Si tout est ok, pensez à cloturer le fil

Cordialement

Re,
En refaisant un test il y a 3 choses que vous devez modifier :

1. Code Worksheet_change :

- rajoutez cette ligne juste en dessous de la ligne With Sheets("Planning")

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

- A la fin du code rajoutez cette ligne juste avant la ligne "Application.EnableEvents = True"

Call calcul

2. Code Calculate :
- Supprimez le code Private Sub Worksheet_Calculate()
- dans le module où vous aviez mis la sub Iferror, mettez le code ci-dessous

Sub calcul()
Application.EnableEvents = False 'désactive les évènements
With Sheets("Mémoire")
    Range("C6:X26") = .Cells(Application.Match(Range("A6"), .Range("A:A"), 0), 2).Resize(21, 22).Value 'copie les valeurs
End With
Application.EnableEvents = True 'réactive les évènements
End Sub

3. Combobox :
Attribuez le code "Calcul" comme suit :
- click droite sur la combo "année"
- choisir "Affecter une macro" et cliquer sur le code "Calcul"
- refaites de même pour les deux combo "Mois" et "semaine"

Une fois terminé ces modifications cela fonctionne très bien

Crdlt

Hello,

Génial, c’est exactement ce qu’il fallait.

Je commence à mieux comprendre mes erreurs en VBA.

Que cela me serve de leçon.

Je prends note chaque erreur afin de ne plus les refaire.

Du coup tout fonctionne correctement

Merci beaucoup

Excellente journée

Phil

re

Parfait et merci du retour

Pensez à cloturer le fil...

crdlt

Rechercher des sujets similaires à "probleme vba resultat"