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
Bonjour,

je n'arrive pas à associer une boucle à une instruction if...

Pourquoi, le programme suivant fonctionne:

Sub A()

Dim l As Integer

l = 4

If Range("B" & l).Value = "3" Then
Rows(l).Select

End If


End Sub


Mais pas celui qui consiste à faire le travail pour chaque cellule de B4à B50:

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

Ce programme bug et affiche le message: "Incompatibilité de type".
Merci d'avance pour vos contributions.
A voir également:

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
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....
0
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...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 17/05/2010 à 12:59
bonjour,
Essayez sans les "" :
If Range("B" & l).Value = 3
0
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 11
17 mai 2010 à 13:50
Bonjour,

Cela fonctionne très bien chez moi.
Avez-vous précédemment utilisé la variable l ?
0
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...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
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...
0
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.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
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.
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 
0

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!
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
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 :
With Sheets("NomDeLaFeuille")
If .Cells(l, 2).Value = "3" Then
.Rows(l).Select 
End If 
End With
0
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...
0
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.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
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.....
0