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

XL 2019 Dysfonctionnement d'un fichier Excel depuis les dernières mise à jour Windows

JoBar57

XLDnaute Junior
Bonjour le forum,

La dernière version du fichier joint (TESTs10), qui a beaucoup évolué grâce surtout à Yeahou (encore merci), ne fonctionne plus depuis la dernière mise à jour de Windows en janvier et ce, aussi bien sur mon ordi perso que sur celui du boulot. Alors que la version précédente (TESTs9) fonctionne.
Lorsque je planifie (vacances, Fériés, Récup fériés, ...) cela ne s'affiche plus sur le planning car dans la base de données je me retrouve avec une ligne dans laquelle ne figure plus que l'année 1900 et rien d'autre.
Je n'arrive pas à déterminer ce qui provoque le dysfonctionnement et donc corriger le problème.
Les différences entre ces deux fichiers concernaient il me semble surtout la fonction TJF pour la mise à jour automatique des jours fériés et l'utilisation de la TJF pour une MFC conditionnelle.

Résultat (correct) obtenu dans dans TESTs9



Résultat obtenu dans dans TESTs10 ( en rouge ce qui aurait dû figurer dans les colonnes)


Quelqu'un aurait-il une idée du pourquoi et du remède ?

Merci d'avance pour le temps et l'énergie consacrée à mon problème
 

Pièces jointes

  • TESTs9 - Calcul des V - F - RF par salarié.xlsm
    174.2 KB · Affichages: 17
  • TESTs10 - Calcul des V - F - RF par salarié.xlsm
    174 KB · Affichages: 16
Solution
Re,

Voila, j'ai trouvé !
le problème vient de la MFC de la feuille Planning, lorsqu'on ajoute une ligne vide, le recalcul impacte la feuille planning, TJF utilisée dans une MFC renvoie une erreur car la valeur traitée n'est pas une date, ce qui est un comportement normal, la MFC renvoyant une erreur arrête l'exécution du code, mais sans reporter l'erreur. Il suffirait de gérer l'erreur dans la MFC pour régler le problème mais j'en ai profité pour modifier TJF et gérer le cas. Voila votre fichier modifié avec en primeur la nouvelle version 4.2 de TJF qui renvoie l'information au lieu d'une erreur si la valeur testée n'est pas une date.

Bien cordialement, @+
Bonjour Jobar57, le forum

tes deux fichiers contiennent et utilisent la même version de TJF donc le problème ne vient pas de là.
explique le mode opératoire précis pour reproduire le problème, car si l'utilisation de ton fichier te parait évidente, ce n'est pas le cas de personnes qui ne le connaissent pas ou très peu.

Cordialement, @+
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Je me demande s'il n'y a pas une petite coquille dans la procédure CommandButton1_Click : tu testes la cellule B3, alors qu'elle ne sera jamais vide puisque c'est le titre de la colonne.

Essaye de remplacer la ligne d'assignation de la variable dlt par celle-ci :
VB:
dlt = Sheets("Entrées").Range("d" & Rows.Count).End(xlUp).Row


[edit]
MDR J'ai cru que ça marchait, mais j'ai dû exécuter la version 9 en fait...
[/edit]
 
Dernière édition:
en désactivant le calcul auto pendant la mise à jour cela fonctionne.
il y a quelque chose qui a changé entre les deux fichiers, une dépendance quelconque qui génère une erreur non reportée lors de l'ajout d'une ligne vide dans le tableau structuré.
VB:
Private Sub CommandButton1_Click()
Dim Dlt&
If ComboBox1 = "" Or ComboBox2 = "" Or TextBox2 = "" Or TextBox2 = "jj / mm / aaaa" Or TextBox3 = "" Or TextBox3 = "jj / mm / aaaa" Then
MsgBox ("toutes les informations ne sont pas remplies")
Else
    If Sheets("Entrées").Range("B3") = "" Then
    Sheets("Entrées").Range("B3") = ComboBox1
    Else
    Application.Calculation = xlCalculationManual
    Sheets("Entrées").ListObjects("Tableau1").ListRows.Add
    End If
  
    With Sheets("Entrées")
        Dlt = .Range("D" & .Rows.Count).End(xlUp).Row
        .Range("b" & Dlt) = ComboBox1
        .Range("c" & Dlt) = ComboBox2
        .Range("d" & Dlt) = CDbl(DateValue(TextBox2.Value))
        .Range("e" & Dlt) = CDbl(DateValue(TextBox3.Value))
        Application.Calculation = xlCalculationAutomatic
        .Calculate
    End With
  
    Unload UserForm1
  
End If

End Sub
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Bizarre, la fonction est appelée 11 fois de suite, puis elle semble rendre la main mais le code ne continu pas de s'exécuter.
Et quand on supprime manuellement la ligne qui a été ajoutée au tableau, on a les 11 fins de fonction qui s'enchaînent.

Est-ce que ce 11 correspond au nombre de lignes de la plage AG4:AJ17 faisant appel à la fonction ?

Même en supprimant toutes les cellules du classeur faisant appel à la fonction TJF, j'ai toujours le même problème du code qui semble se figer.
 
Dernière édition:
C

Compte Supprimé 979

Guest
Bonjour le fil

Je me permets d'intervenir pour quelques remarques

1) On ne code jamais les noms en "dur" comme c'est le cas dans le fichier
il faut créer une feuille "Params" dans laquelle on mettra les noms

2) Quand on code, on devrait prendre l'habitude de mette "Option Explicit" en début de chaque module ou usf
Cela évite des erreurs dans l'orthographe de variables

3) Dans un If, il n'est pas nécessaire de mettre un Else, si on sort de la procédure directement
VB:
  If ComboBox1 = "" Or ComboBox2 = "" _
    Or Not IsDate(Me.TextBox2) Or Not IsDate(Me.TextBox3) Then
    MsgBox ("toutes les informations ne sont pas remplies")
    Exit Sub
  End If

4) On évite d'alimenter un TS (Tableau Structuré) en ajoutant sur la ligne du dessous une nouvelle valeur

A+
 

TooFatBoy

XLDnaute Barbatruc
Je ne suis pas sûr, mais je crois qu'en ajoutant Sheets("Entrées").Activate ça fonctionne.

[edit]
Si, ça semble bien fonctionner avec l'activation de la feuille...
[/edit]

J'ai utilisé ça comme macro (mais ce n'est peut-être pas comme ça qu'il faut programmer ) :
VB:
Private Sub CommandButton1_Click()
'
    If ComboBox1 = "" Or ComboBox2 = "" Or TextBox2 = "" Or TextBox2 = "jj / mm / aaaa" Or TextBox3 = "" Or TextBox3 = "jj / mm / aaaa" Then

        MsgBox ("toutes les informations ne sont pas remplies")

    Else

        Sheets("Entrées").Activate
        Sheets("Entrées").ListObjects(4).ListRows.Add
        Derlig = Sheets("Entrées").ListObjects(4).ListRows.Count

        Range("Tableau1[Nom]")(Derlig).Value = ComboBox1.Value
        Range("Tableau1[Type]")(Derlig).Value = ComboBox2.Value
        Range("Tableau1[[Date début]]")(Derlig).Value = CDbl(DateValue(TextBox2.Value))
        Range("Tableau1[[Date de Fin]]")(Derlig).Value = CDbl(DateValue(TextBox3.Value))

        Unload UserForm1

    End If

End Sub
 
Dernière édition:
Re,
salut Marcel32, BrunoM45

Même en supprimant toutes les cellules du classeur faisant appel à la fonction TJF, j'ai toujours le même problème du code qui semble se figer.
@Marcel32, comme je l'ai dit, les deux fichiers utilisent la même version de TJF, je ne pense donc pas que cela vienne de la fonction, quelque chose a changé entre les deux fichiers, le truc bizarre, c'est l'erreur non reportée, le code s'arrête, point !
c'est un problème lié au recalcul puisque le désactiver enlève le problème.
pour l'instant, je n'ai pas trouvé d'oû cela vient mais je cherche, je suis curieux, problème inhabituel !
 
Re,

Voila, j'ai trouvé !
le problème vient de la MFC de la feuille Planning, lorsqu'on ajoute une ligne vide, le recalcul impacte la feuille planning, TJF utilisée dans une MFC renvoie une erreur car la valeur traitée n'est pas une date, ce qui est un comportement normal, la MFC renvoyant une erreur arrête l'exécution du code, mais sans reporter l'erreur. Il suffirait de gérer l'erreur dans la MFC pour régler le problème mais j'en ai profité pour modifier TJF et gérer le cas. Voila votre fichier modifié avec en primeur la nouvelle version 4.2 de TJF qui renvoie l'information au lieu d'une erreur si la valeur testée n'est pas une date.

Bien cordialement, @+
 

Pièces jointes

  • TESTs10 - Calcul des V - F - RF par salarié-Test.xlsm
    189.7 KB · Affichages: 5
Il y a quand même deux choses que je trouve bizarres : c'est marrant qu'en sélectionnant la feuille il n'y a plus le problème et qu'en supprimant la ligne le code reprend où il en était.
je dirais que, étant un affichage, les MFC ne sont recalculées que sur la feuille active ou au moment de l'activation ce qui serait logique, pourquoi recalculer un affichage non affiché..
 

Discussions similaires

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