Vba Excel, erreur de type avec boucle + if
Résolu/Fermé
Philman
-
17 mai 2010 à 11:37
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 17 mai 2010 à 15:43
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 17 mai 2010 à 15:43
A voir également:
- Vba Excel, erreur de type avec boucle + if
- Erreur 0x80070643 - Accueil - Windows
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
7 réponses
Morgothal
Messages postés
1236
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
183
17 mai 2010 à 12:11
17 mai 2010 à 12:11
Bonjour,
Je ne comprends pas, chez moi ça marche bien, si le but est bien de sélectionner la ligne "l" si jamais la cells Bl est égale à 3....
Je ne comprends pas, chez moi ça marche bien, si le but est bien de sélectionner la ligne "l" si jamais la cells Bl est égale à 3....
Bonjour,
merci de vous pencher sur mon problème!
Le premier programme fonctionne sans problème: la ligne 4 est bien en surbrillance à l'issue du programme.
Le deuxième ne fonctionne pas. A l'issue de son lancement, il devrait avoir mis la ligne 50 en surbrillance mais ce n'est pas le cas: il plante et m'affiche une erreur 13, incompatiblité de type.
Le deboggueur se positionne sur If Range("B" & l).Value = "3" Then.
Grrrr...
merci de vous pencher sur mon problème!
Le premier programme fonctionne sans problème: la ligne 4 est bien en surbrillance à l'issue du programme.
Le deuxième ne fonctionne pas. A l'issue de son lancement, il devrait avoir mis la ligne 50 en surbrillance mais ce n'est pas le cas: il plante et m'affiche une erreur 13, incompatiblité de type.
Le deboggueur se positionne sur If Range("B" & l).Value = "3" Then.
Grrrr...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
Modifié par pijaku le 17/05/2010 à 12:59
Modifié par pijaku le 17/05/2010 à 12:59
bonjour,
Essayez sans les "" :
Essayez sans les "" :
If Range("B" & l).Value = 3
Merci pour cette suggestion mais sans les guillements, cela ne marche toujours pas: cela me met le même message d'erreur: incompatibilité de type...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
Modifié par pijaku le 17/05/2010 à 13:53
Modifié par pijaku le 17/05/2010 à 13:53
Je suppose que vous n'avez placé ici qu'une partie de votre code. Donnez nous en la totalité, parce que ce bout de code fonctionne bien...
Non, j'ai donné l'ensemble du code:
Sub A()
Dim l As Integer
For l = 4 To 50
If Range("B" & l).Value = "3" Then
Rows(l).Select
End If
Next
End Sub
Ceci est placé dans un module vierge: il n'y a dans ce module que ce programme.
J'appelle ce programme depuis le menu macro et je sélectionne la macro intitulée A...
Si j'enlève la boucle et que je donne une valeur à l, cela marche! Je n'y comprends rien! Merci encore pour votre aide.
Sub A()
Dim l As Integer
For l = 4 To 50
If Range("B" & l).Value = "3" Then
Rows(l).Select
End If
Next
End Sub
Ceci est placé dans un module vierge: il n'y a dans ce module que ce programme.
J'appelle ce programme depuis le menu macro et je sélectionne la macro intitulée A...
Si j'enlève la boucle et que je donne une valeur à l, cela marche! Je n'y comprends rien! Merci encore pour votre aide.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
17 mai 2010 à 14:29
17 mai 2010 à 14:29
Alors... je n'y comprends pas grand chose...
il s'agit peut être d'un problème de format de cellule
2 pistes :
- ajouter : MsgBox l après la sélection du Rows pour voir à qu'elle ligne la procédure bloque et vérifier le format de la cellule B l concernée.
- changer le format dans le If :
il s'agit peut être d'un problème de format de cellule
2 pistes :
- ajouter : MsgBox l après la sélection du Rows pour voir à qu'elle ligne la procédure bloque et vérifier le format de la cellule B l concernée.
Sub A() Dim l As Integer For l = 4 To 50 If Range("B" & l).Value = "3" Then Rows(l).Select MsgBox l End If Next l End Sub
- changer le format dans le If :
Sub A() Dim l As Integer For l = 4 To 50 If CInt(Range("B" & l).Value) = "3" Then Rows(l).Select End If Next l End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Les deux procédures proposées s'arrêtent toutes à If Range ... avec le même message d'erreur (incompatibilité de type).
Je viens d'essayer quelque chose avec Cells plutôt que Range:
Curieusement, le programme suivant marche:
Sub A()
For l = 8 To 50
If Cells(2, l).Value = "3" Then
Rows(l).Select
End If
Next
End Sub
Mais si au lieu de faire varier la colonne, je fais varier la ligne, cela bug sur Cells et m'affiche toujours le même message d'incompatibilité de type:
Sub A()
For l = 8 To 50
If Cells(l, 2).Value = "3" Then
Rows(l).Select
End If
Next
End Sub
Cette info peut-elle aider à trouver le pb?
Merci encore!
Je viens d'essayer quelque chose avec Cells plutôt que Range:
Curieusement, le programme suivant marche:
Sub A()
For l = 8 To 50
If Cells(2, l).Value = "3" Then
Rows(l).Select
End If
Next
End Sub
Mais si au lieu de faire varier la colonne, je fais varier la ligne, cela bug sur Cells et m'affiche toujours le même message d'incompatibilité de type:
Sub A()
For l = 8 To 50
If Cells(l, 2).Value = "3" Then
Rows(l).Select
End If
Next
End Sub
Cette info peut-elle aider à trouver le pb?
Merci encore!
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
17 mai 2010 à 15:01
17 mai 2010 à 15:01
Y a t'il quelque chose de "spécial" dans ta colonne B? des cellules fusionnées? un format particulier? n'importe quoi qui puisse expliquer ce plantage...
Sinon essaye en précisant le nom de la feuille :
Sinon essaye en précisant le nom de la feuille :
With Sheets("NomDeLaFeuille") If .Cells(l, 2).Value = "3" Then .Rows(l).Select End If End With
On progresse, on progresse...
Je viens de supprimer toutes les données sur la feuille sur laquelle je testais la macro.
En attaquant avec une feuille vierge (juste un 3 qui se balade sur une des lignes )la macro qui posait problème marche correctement.
Sub A()
Dim l As Integer
For l = 4 To 50
If Range("B" & l).Value = "3" Then
Rows(l).Select
End If
Next
End Sub
Donc le problème ne vient pas de la macro mais des données présentes sur la feuille à tester (leur format?)...
Dans les cellules, il y a en fait du texte ou la mention #N/A (j'avais mis un test sur 3 pour simplifier) et ce que je veux c'est détecter les cellules avec la mention #N/A pour les supprimer. Si je teste sur #N/A ( If Range ...="#N/A") cela bug et m'affiche le fameux "incompatibilité du type", pourtant le format de toutes les cellules testées est un format standard...
Je viens de supprimer toutes les données sur la feuille sur laquelle je testais la macro.
En attaquant avec une feuille vierge (juste un 3 qui se balade sur une des lignes )la macro qui posait problème marche correctement.
Sub A()
Dim l As Integer
For l = 4 To 50
If Range("B" & l).Value = "3" Then
Rows(l).Select
End If
Next
End Sub
Donc le problème ne vient pas de la macro mais des données présentes sur la feuille à tester (leur format?)...
Dans les cellules, il y a en fait du texte ou la mention #N/A (j'avais mis un test sur 3 pour simplifier) et ce que je veux c'est détecter les cellules avec la mention #N/A pour les supprimer. Si je teste sur #N/A ( If Range ...="#N/A") cela bug et m'affiche le fameux "incompatibilité du type", pourtant le format de toutes les cellules testées est un format standard...
Bon, je viens de trouver une méthode qui marche!
Sub A()
Dim l As Integer
For l = 4 To 50
If IsError(Range("B" & l).Value) Then
Rows(l).Select
End If
Next
End Sub
Très content d'avoir la solution! Mais je ne suis pas bien sûr d'avoir compris pourquoi les autres versions ne marchaient pas...
ESt-ce que cela signifie que je ne peux tester des cellules avec des formats différents? Par exemple si je demande est-ce que la cellule B4 = 3 et que dans la cellule B4 il y a du texte, au lieu de considérer la condition comme non remplie et de passer à la suite du programme, cela bug et affiche un problème d'incompatibilité du type?
Merci en tout cas à chacun de ceux qui m'ont répondu.
Sub A()
Dim l As Integer
For l = 4 To 50
If IsError(Range("B" & l).Value) Then
Rows(l).Select
End If
Next
End Sub
Très content d'avoir la solution! Mais je ne suis pas bien sûr d'avoir compris pourquoi les autres versions ne marchaient pas...
ESt-ce que cela signifie que je ne peux tester des cellules avec des formats différents? Par exemple si je demande est-ce que la cellule B4 = 3 et que dans la cellule B4 il y a du texte, au lieu de considérer la condition comme non remplie et de passer à la suite du programme, cela bug et affiche un problème d'incompatibilité du type?
Merci en tout cas à chacun de ceux qui m'ont répondu.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
17 mai 2010 à 15:43
17 mai 2010 à 15:43
l'incompatibilité du type est juste due à l'erreur trouvée dans la colonne.
Si tu avais exprimé clairement ton souhait au premier message, ça aurait tout de même évité 6 réponses superflues...
Recherche "3" et #N/A est évidemment bien différent.....
Si tu avais exprimé clairement ton souhait au premier message, ça aurait tout de même évité 6 réponses superflues...
Recherche "3" et #N/A est évidemment bien différent.....