Erreur 11 division par zéro

Salut à tous

Je sèche depuis ce matin sur cette macro, qui me renvoie une erreur 11 division par zéro, de façon aléatoire. Parfois elle s'exécute sans problème, parfois elle plante à l'itération 3 de la boucle for, parfois à l'itération 5 ou 9 ou 15... sans que les données soit modifiées dans le classeur.

En gros, j'ai une feuille avec un tableau regroupant le nombre de repas pris par les patients de mon service sur le mois. Chaque patient possède une feuille propre qui sert à faire la facturation. La macro puise les nombres de repas dans le tableau pour remplir les factures individuelles. Rien de plus simple. Cette macro a fonctionné pendant des mois sans aucun problème, puis s'est mise à planter.

Et je ne comprends pas cette histoire de division par zéro.

Je précise qu'il n'y a pas d'erreur de comptage du nombre de patients. Si par exemple, j'ai 20 patients, j'ai 24 feuilles de calcul (20 pour les patients, et 4 pour les traitements divers de l'information). J'ai utilisé un certain nombre de Msgbox pour vérifier que toutes mes données étaient bonnes.

Merci pour votre aide.

Sub COPIEnbREPAS()
'
' COPIEnbREPAS Macro
'
nbpat = Cells(2, 6) 'récupère nombre de patients
j = 0 'compteur de feuilles masquées
nbpat2 = nbpat + 2 'les deux premières feuilles ne doivent pas être traitées
For i = 3 To nbpat2

If Sheets(i + j).Visible = False Then j = j + 1 'si la feuille est masquée, on passe à la suivante
Sheets(i + j).Activate


If Sheets(i + j).Name = Sheets("tableau").Cells(i, 1) Then 'compare nom de la feuille avec nom du patient
Cells(17, 1) = Sheets("tableau").Cells(i, 2) 'copie nombre de repas

End If


Next i

'
End Sub

Bonjour,

quelle instruction donne-t-elle l'erreur ?

sinon voici comment j'aurais écrit ce code. (non testé)

Sub COPIEnbREPAS()
    '
    ' COPIEnbREPAS Macro
    '
    nbpat = Sheets("tableau").Cells(2, 6) + 2 'récupère nombre de patients

    For i = 3 To nbpat 'on parcourt la liste des patients qui commence en ligne 3 colonne 1 de la feuille tableau
        patient = Sheets("tableau").Cells(i, 1) 'nom du patient
        If Sheets(patient).Visible = True Then 'feuille du patient visible ?
            Sheets(patient).Cells(17, 1) = Sheets("tableau").Cells(i, 2) ' on y copie le nombre de repas
        End If
    Next i 'patient suivant

    '
End Sub

Merci pour ta réponse. Oui, ton code peut fonctionner (avec quelques aménagements, bien entendu, tu n'as pas vu les feuilles de calcul, donc entre autre la position du tableau n'est pas exactement ça, il commence en ligne 3).

L'erreur pointe toujours sur Next i. Ce qui me plonge dans la perplexité la plus profonde.

Edit : J'ai remplacé mon code par le tien, moyennant quelques modifications, et il fonctionne très bien. Je reconnais même qu'il est plus élégant.

Mais j'aime bien comprendre pourquoi ça merdouille, donc si quelqu'un a la réponse, je suis preneur.

bonjour,

Mais j'aime bien comprendre pourquoi ça merdouille, donc si quelqu'un a la réponse, je suis preneur.

dans ce cas, peux-tu nous mettre ton classeur ?

Oui, mais il faut auparavant que je change les noms des patients. Secret médical.

Je reviens dès que possible.

Rechercher des sujets similaires à "erreur division zero"