La méthode "Range" de l'objet "Worksheet" a échoué

Re bonjour!

J'ai tapé ces lignes de codes et j’obtiens l'erreur nommé dans le titre, et "Excel ne répond plus"

Pourtant j'ai déjà utilisé des codes similaires sans problèmes

For i = 6 To 1000

If Sheets("Suivi").Range("D" & i).Value = "Alésage" Then

nA = nA + 1

Next i

Vous voyez d'ou peut venir le problème?

Bonjour,

Il n'y a pas, a priori, d'erreur dans ta syntaxe. Mais ce code n'est qu'un extrait d'une macro plus vaste, dans un fichier que tu ne transmet pas. C'est donc difficile de t'aider davantage sans apporter des éléments complémentaires...

C'est pour un suivi statistique, je dois réaliser un graphique qui comporte le nombre de mesure effectué sur chaque surface.

Avec ce code je donne des valeurs à des cases que j'utilise ensuite dans mon graphique.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
Dim nA As Integer
Dim nH As Integer
Dim nH1 As Integer
Dim nCol As Integer
Dim nP As Integer
Dim nE As Integer
Dim nINT As Integer
Dim nEX As Integer
Dim nGr As Integer
Dim nPe As Integer
Dim nCh As Integer
nH = 0
nH1 = 0
nCol = 0
nP = 0
nE = 0
nINT = 0
nEX = 0
nGr = 0
nPe = 0
nCh = 0
nA = 0
For i = 6 To 1000
If Sheets("Suivi").Range("D" & i).Value = "Alésage" Then
nA = nA + 1
ElseIf Sheets("Suivi").Range("D" & i).Value = "H" Then
nH = nH + 1
ElseIf Sheets("Suivi").Range("D" & i).Value = "H1" Then
nH1 = nH1 + 1
ElseIf Sheets("Suivi").Range("D" & i).Value = "Collet" Then
nCol = nCol + 1
ElseIf Sheets("Suivi").Range("D" & i).Value = "Portée de joint" Then
nP = nP + 1
ElseIf Sheets("Suivi").Range("D" & i).Value = "Epaulement" Then
nE = nE + 1
ElseIf Sheets("Suivi").Range("D" & i).Value = "INT" Then
nINT = nINT + 1
ElseIf Sheets("Suivi").Range("D" & i).Value = "EXT" Then
nEX = nEX + 1
ElseIf Sheets("Suivi").Range("D" & i).Value = "Face: Grande" Then
nGr = nGr + 1
ElseIf Sheets("Suivi").Range("D" & i).Value = "Face: Petite" Then
nPe = nPe + 1
ElseIf Sheets("Suivi").Range("D" & i).Value = "Chemin" Then
nCh = nCh + 1
End If
Next i
Sheets("Suivi").Range("Y2").Value = nA
Sheets("Suivi").Range("Y3").Value = nCh
Sheets("Suivi").Range("Y4").Value = nCol
Sheets("Suivi").Range("AA2").Value = nE
Sheets("Suivi").Range("AA3").Value = nP
Sheets("Suivi").Range("AA4").Value = nINT
Sheets("Suivi").Range("AC2").Value = nEX
Sheets("Suivi").Range("AC3").Value = nPe
Sheets("Suivi").Range("AC4").Value = nGr
Sheets("Suivi").Range("AE2").Value = nH
Sheets("Suivi").Range("AE3").Value = nH1

End Sub

Je trouve qu'il se répète beaucoup mais je ne savais pas comment faire autrement

Bonjour à tous,

C'est certainement parce que tu es dans une macro événementielle.

Met les traitements dans un module et appelle ce module à partir de ta procédure événementielle.

Cordialement

PS : le code n'est vraiment pas optimisé. Utilise des tableaux ou un dictionnaire

Si l'objet de ton code est juste de faire du comptage de certaines chaînes de caractères, pourquoi ne pas passer par formule (NB.SI) ou avec un tableau croisé dynamique ?

j'ai essayé de le mettre dans un module puis de l'appeler, cette fois ci j'ai pas d'erreur mais le programme tourne en continue et excel ne répond plus...

par Pedro22 » il y a moins d’une minute

Si l'objet de ton code est juste de faire du comptage de certaines chaînes de caractères, pourquoi ne pas passer par formule (NB.SI) ou avec un tableau croisé dynamique ?

Oui de base c'est ce que je voulais faire mais plusieurs macro agissent sur ce fichier et les adresses des cellules changent sans arret donc ça ne fonctionnait pas

Supprime la gestion des événements en début de procédure (Application.EnableEvents = False ) et réinstalle les en fin (Application.EnableEvents = True )

Supprime la gestion des événements en début de procédure (Application.EnableEvents = False ) et réinstalle les en fin (Application.EnableEvents = True )

Super ça fonctionne merci! Tu peux détailler a quoi ça correspond?

si tu ne suspends pas la gestion des événements, en fin de ta procédure, lorsque tu écris les résultats dans ta feuille, tu génères un nouvel événement worksheet_change et tu repars pour un tour....

si tu suspends, tu écris tranquillement sans générer d'événement "change".

il faut bien sur ne pas oublier de repositionner la gestion des événements

Ok je comprend mieux mon erreur! Merci encore de vos aide

Rechercher des sujets similaires à "methode range objet worksheet echoue"