Autres Macro avec une ligne "fantome"

kknd04

XLDnaute Junior
Bonjour,

J'ai un dossier excel, il correspond a la gestion de ma petite boulangerie.
Dans ce dossier, j'ai une macro qui me permet copier les informations entrées dans la feuille CA. Fin de journée dans différentes feuilles, avec une vérification sur la feuille Données au cas ou la ligne serait déjà remplie afin d'éviter les erreurs.

Le problème, c'est que a la ligne 285 en date du 10/10/2019 de la feuille données, excel saute la ligne et vérifie les entrées a la ligne 286.

Pouvez vous me conseiller a se sujet?

Merci d'avance
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
J'ai écrit un petit logiciel permettant d'instrumenter les macros : https://www.excel-downloads.com/res...-fichier-log-pour-un-debug-de-macro-vba.1142/
En exportant le module de ce logiciel et en l'important dans votre logiciel, il permet de tracer des variables pendant l'éxécution des macros.
L'idée étant de tracer en temps réél les numéros de lignes et trois autres variables intéressantes ( il faut trouver lequelles )
Ensuite en épluchant la feuille Log, de repérer la ligne qui correspond à 284 et de regarder l'évolution des variables entre 284 et 286.
Vous pouvez essayer en parrallèle, vous avez une meilleure connaissance du déroulement théorique des macros. A 2 on est plus fort que seul.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Je n'ai peut être pas compris ce que vous vouliez dire par "il saute une ligne". Mais j'explique quand même ce que j'ai fait.
J'ai instrumenté les macros en enregistrant DateEnCours, Ldte, Cattc traité, ""
J'ai fait une petite macro qui change la date et execute ValiderDate
VB:
Sub Essai()
Log_Init
    Dim d
    For d = 43735 To 43755 ' correspond à 27/09 à 17/10'
        [CellB2] = d
        ValiderLaDate
    Next d
End Sub
et le fichier log me donne ça que je compare aux données de Données :
A.jpg

En fait la macro ne saute pas de ligne ( c'est peut être ici mon incompréhension de ce que vous dites )
En fait la macro analyse bien toutes les lignes mais à partir du 09/10 la macro traite Cattc de la ligne N+1 et non N.
Il s'agit donc d'une erreur d'indice. Je ne sais pas si ça vous évoque quelque chose.
Je vais regarder comment vous gérer les indices de lecture/écriture.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Peut être l'origine du problème.
Dans la feuille CA. RESULTATS 2020 pour Octobre, il semblerait qu'il y ait une erreur de formule.
On passe de l'indice 283 à 285. Il y a un saut de ligne, l'indice 284 est sauté.
Est ce une piste ?
1574164901704.png

Le résultat est meilleur :
D.jpg

( Les valeurs sont bonnes, c'est moi qui les ai modifiées )
Il n'y a plus de décalage, le #Valeur vient du MsgBox Round(fR.Cells(X.Row, colM),2) car la cellule est vide.

A vous lire.
 

kknd04

XLDnaute Junior
Bonjour,

Effectivement, ce problème est résolu, j'étais persuadé que la verif se faisait sur la feuille données...

Je vais peut être abuser, mais si vous pouviez m'aider sur un autre problème que j'ai mis de coté depuis quelques temps car je ne comprend pas ce qu'il ce passe.
Je vais essayer d’être plus précis que précédemment.

Dans le même dossier il y a des feuilles nommées AC. xxxx, ce sont mes feuilles d'achat, ou je rentre mes achats et qui me permettent d'avoir les coûts dans mes recettes.
Dans la feuille données liste, sont listés tous ces produits pour les avoir dans une liste déroulante dans les fiches recette, et en face, les prix moyen des produits.

Dans la feuille "données listes" colonnes C,D,E, sont donc listés les produit de toutes les feuilles AC. sauf deco et emballages, en cliquant sur la cellule D2 la liste se met a jour,sauf que, les prix de la feuille "AC. recettes intermédiaires" sont toujours a 0 et je ne comprend pas car la macro prend en charge toutes ces feuilles en "même temps"

Du coup je renvois un dossier avec des recettes intermédiaire pour que la feuille "recette intermédiaires" soit avec des valeurs.

En D59 sur la feuille données liste, on constate que la crème amande est a 0.00 alors même que sur la feuille recettes intermédiaires elle est a 2.39 en cellule BG2.



Merci d'avance de votre aide, mais je comprendrais que vous ne souhaitiez pas voir un autre soucis avec ce que vous avez deja beaucoup fait.

Cordialement
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
L'erreur se trouve là !
Module Données liste Ligne 21 : tabloR(2, k + 1) = IIf(IsError(tablo(1, j + 2)), "'-", tablo(1, j + 2))
Je vous passe les milliards de recherches et d'essais. Mais si dans AC. Recette Intermediaire, sur la ligne 2 vous faites Copier, Coller valeur pour faire disparaitre les formules alors ça marche.
Donc c'est ce IIf(IsError(tablo(1, j + 2)), "'-", tablo(1, j + 2)) qui ne marche pas si c'est une formule.
Je vais essayer de comprendre pourquoi sur cette feuille ça ne lui plait pas.
A+
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Pouvez vous essayer ça.
1- Vérifier que Données Liste ne marche pas pour être sur ( Creme Amande=0 )
2- Dans la feuille AC. Recette Intermediaire, cellule BH4 ( prix/kg creme amande) vous entrer en "dur" 4.78
3- Vérifier que Données Liste marche ( Creme Amande=2.39 )
Et là je ne comprends plus. Donc vérifiez de votre coté pour bien être sur du phénomène.
Sur ce, bonsoir.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Dernier point avant d'aller dormir.
Si on fait pareil que précédemment avec le 11.47 ça marche aussi.
Pouvez vous me confirmez que seule la feuille AC. Recette Intermediaire possède des prix et parts issus d' autres feuilles ?
Dans les autres feuilles AC.xx prix et parts sont en "dur".
Quand on fait un point d'arrêt dans la macro, en fait tablo est faux. C'est le transfert dans le tableau qui est mauvais. Il ne peut pas transferer ces valeurs.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Je ne suis pas arriver à identifier le problème.

Ce qui est sur c'est que le transfert des lignes dans tablo est faux si des cellules copièes contiennent des formules venant d'autres pages.
Une solution passagère pour contourner le problème est de creer une feuille "bidon". De copier les deux lignes 2 et 3 de la feuille AC.xxx dans cette feuille bidon en paste.value puis d'utiliser ces deux lignes pour le transfert dans table, car les valeurs seront alors en "dur".

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.EnableEvents = False
    Set fa = ActiveSheet
    If Target.Address = "$D$2" Then
        fa.Range("C5:E" & Application.Max(5, fa.Range("C" & Rows.Count).End(xlUp).Row)).ClearContents
        k = 0
         For Each f In Worksheets
            If Left(f.Name, 3) = "AC." And f.Name <> "AC. Deco" And f.Name <> "AC. Emballage" Then
            
                SELECTIONNER LIGNES 2 ET 3 DE LA FEUILLE AC EN COURS, LES COPIER
                COLLER DANS FEUILLE BIDON LIGNE 1 ET 2 EN COLLER VALEURS
                UTILISER CES DEUX LIGNES POUR LE TRANSFERT DANS TABLO.
        
                ' A MODIFIER : tablo = f.Range(f.Cells(2, 1), f.Cells(3, f.Cells(2, Columns.Count).End(xlToLeft).Column))
                For j = 2 To UBound(tablo, 2) Step 5
                    ReDim Preserve tabloR(1 To 3, 1 To k + 1)
                    tabloR(1, k + 1) = tablo(2, j)
                    tabloR(2, k + 1) = IIf(IsError(tablo(1, j + 2)), "'-", tablo(1, j + 2))
                    k = k + 1
                Next j
            End If
Si vous trouvez la cause, n'oubliez pas de m'en informer, je suis curieux.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour, cela va vous faire de la lecture !
J'ai trouvé un autre bug.
Concernant la crême d'amande, vous voyez bien qu'un prix de 11.47 pour 2.4 parts ne peut pas faire 2.39 au kg. Alors pourquoi un tel résultat ?
Parce ce que en BF16 vous avez ... un espace ! :mad: d'où un NBVAL = 2 et un résultat de 2.39 ( soit 4.78/2 )
La formule du prix moyen sera bien meilleure en faisant =SOMME(BH5:BH112)/NB.SI(BH5:BH112;">0") , de cette façon elle serait mieux sécurisée.

Après moult essais, je pense vraiment que dans tablo il n'y a pas des nombres mais des formules ré-évaluées. Pour un emême configuration j'ai trouvé des 0 ou des "-", donc il ré-évalue la formule mais par rapport à une autre page. Et là, je donne ma langue au chat.
Je vous préconise ma solution de page bidon, ou encore de mettre la formule en ligne 1, puis de faire un copier ligne 1 valeur en ligne 2.
J'arrête là an attendant de vos nouvelles.
 

kknd04

XLDnaute Junior
Bonsoir,

J'ai fais toutes les solutions, et cela fonctionne parfaitement.

Donc le problème viens de la macro qui "copie" les cellules en recalculant si elles comportent des formules.
Bin pour comprendre ca... pour un néophyte comme moi...

En tout cas, merci beaucoup, je n'ai plus d'épineS sous le pied grâce a vous.

J'ai opté pour la copie ligne 1 a ligne 2, plus simple qu'une nouvelle page bidon il me semble.

Je suis désolé de prendre tant de temps a répondre, mais j'ai du mal a me dégager du temps en ce moment, en plus j'étais absent hier.

Encore un grand merci pour votre aide.
 

Discussions similaires

Réponses
7
Affichages
346

Statistiques des forums

Discussions
312 193
Messages
2 086 061
Membres
103 110
dernier inscrit
Privé