Identifier les erreurs d'un code de calcul VBA excel

Clement_P2S - Modifié le 1 mars 2024 à 10:00
roberrtt.1211 Messages postés 6 Date d'inscription samedi 2 mars 2024 Statut Membre Dernière intervention 13 mars 2024 - 13 mars 2024 à 12:01

Bonjour,

Je souhaite faire un code qui permette d'indiquer le nombre minimum de cale de 3 mm pour une longueur donnée pour pouvoir remplir le reste avec des cales de 5 ;10 ;20 ou 50 mm selon le cas. 

La longueur est donc rentrée en "N2" de la feuille "Caisses" sur excel.

voici le code que j'ai tenté d'utiliser:

"

Private Sub Worksheet_Change(ByVal Target As Range)
    ' Vérifiez si la modification a eu lieu dans la cellule N2
    If Not Intersect(Target, ThisWorkbook.Sheets("Caisse").Range("N2")) Is Nothing Then
        ' Exécutez le code pour calculer les cales selon la nouvelle longueur
        CalculerCales ThisWorkbook.Sheets("Caisse").Range("N2").Value
    End If
End Sub

Sub CalculerCales(LDepart As Integer)
    Dim Reste As Integer
    Dim Reste20 As Integer
    Dim Reste10 As Integer
    Dim Reste5 As Integer
    
    ' Soustraire 5 mm pour la cale de fuite
    LDepart = LDepart - 5
    
    ' Initialiser le nombre de répétitions à zéro
    Dim N As Integer
    N = 0
    Reste5 = 1
    
    ' Boucle jusqu'à ce que le reste soit nul
    Do
        ' Calcul du reste pour chaque type de cale
        Reste = LDepart Mod 50
        Reste20 = Reste Mod 20
        Reste10 = Reste20 Mod 10
        Reste5 = Reste10 Mod 5
        
        ' S'il y a un reste, enlevez 3 mm et continuez
        If Reste5 > 0 Then
            LDepart = LDepart - 3
            ' Incrémenter le nombre de répétitions
            N = N + 1
        Else
            ' Écrire le nombre de répétitions dans la cellule M11
            ThisWorkbook.Sheets("Caisse").Range("M11").Value = N
            ' Sortez de la boucle
        End If
    Loop Until Reste5 = 0
End Sub"

Je suis un débutant en la matière et je ne sais pas ce qu'il faut rectifier pour faire fonctionner ce code. Je n'ai pas de message d'erreur, il ne se passe juste rien du tout quand je change la longueur.

Merci à vous si vous pouviez m'indiquer ce qu'il faut changer.

3 réponses

Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
3 mars 2024 à 10:26

Bonjour

Tout d'abord, merci à @karamel d'avoir édité ton message pour rendre ton code lisible.

Pour tes prochains posts, il faudra faire comme décrit là https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code


1
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
3 mars 2024 à 10:35

Si je comprends bien cette phrase

Je n'ai pas de message d'erreur, il ne se passe juste rien du tout quand je change la longueur.

Tu souhaites qu'il se passe quelque chose quand tu changes une valeur.

Dans ce cas, pourquoi ne pas écrire une fonction, plutôt qu'une "procédure" ?

Exemple

Function MaSomme(val1, val2)
    MaSomme = val1 + val2
End Function

Si je mets 1 dans la cellule A1, 2 dans la cellule B1 et  =MaSomme(A1;B1) dans la cellule C1, j'obtiens 3 et dès que A1 ou B1 est modifiée, C1 est mise à jour.


1

Merci du coup de main,

Ne sachant pas que je pouvais créer des fonctions je m'entêtais à faire une procédure. J'ai tout recommencé en utilisant une fonction et  c'est beaucoup plus compact et facile a utiliser.

0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656 > Clement_P2S
6 mars 2024 à 15:20

de rien

0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
3 mars 2024 à 10:51

Par contre, ton algo a un souci, il semble fonctionner comme il faut avec des grandes valeurs.

Mais si la longueur de départ est 3, Reste5 prend la valeur -2 et a ne sort jamais de la boucle.

Tu peux observer la chose en mettant un point d'arrêt et en exécutant pas à pas tout en espionnant les variables pour voir leur contenu.

 Évidement tu ne vas jamais volontairement chercher à calculer le nombre de cales sur une longueur de 3 mm, mais si tu voulais chercher pour 331 et que malencontreusement au lieu de taper un second 3 tu tapes "entrée" tu perdras ce que tu étais en train de faire.

Il faut donc te prémunir de toute mauvaise manip.


1
roberrtt.1211 Messages postés 6 Date d'inscription samedi 2 mars 2024 Statut Membre Dernière intervention 13 mars 2024
Modifié le 13 mars 2024 à 12:03

Merci pour ce lien :- https://codes-sources.commentcamarche.net/faq/11288-poster-un-essentiel-de-code .

comme cela a fonctionné pour moi. Je vais sûrement ajouter celui-ci à mes favoris.

0
Rejoignez-nous