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
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 :
- 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).
- 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 SubNB : 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 calcul2. 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 Sub3. 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