VB vérification de celulle vide(KO)

Résolu/Fermé
vbnetstudent Messages postés 10 Date d'inscription jeudi 6 septembre 2012 Statut Membre Dernière intervention 6 septembre 2012 - 6 sept. 2012 à 09:28
vbnetstudent Messages postés 10 Date d'inscription jeudi 6 septembre 2012 Statut Membre Dernière intervention 6 septembre 2012 - 6 sept. 2012 à 11:21
Bonjour à tous,
Je viens vers vous parce que je suis confronté à un problème/bug/truc/machin/chose que je ne comprend pas.
Voici mon code vb qui me sert à la cope de celulle sur une feuille:
Sub CreerTableauFinal()
'
' CreerTableauFinal Macro
'
Dim c As Integer
Dim D As Integer
c = 1

Cells.Select
With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
End With
    With ThisWorkbook.Sheets("Feuil1")
        For D = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1
                If IsEmpty(Range("B" & D).Value) <> Range("B" & D).Value = "" Then
                Worksheets("Feuil1").Range("C" & D).Copy Worksheets("Feuil2").Range("A" & c)
                c = c + 1
                Else
                Worksheets("Feuil1").Range("C" & D).Copy Worksheets("Feuil2").Range("A" & c)
                c = c + 1
                Worksheets("Feuil1").Range("B" & D).Copy Worksheets("Feuil2").Range("A" & c)
                c = c + 1
                End If
        Next D
End With
End Sub


La vérification de : IsEmpty(Range("B" & D).Value) marche quand bon lui semble ce qui dans l'informatique s'appelle un random ^^

Est ce quelqu'un aurait rencontrer le même problème sur ce type de vérification?
Si oui pouvez-vous m'expliquez la solution?

Merci d'avoir pris le temps de lire mon post.
Bonne journée.
A voir également:

8 réponses

eljojo_e Messages postés 1155 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 14 octobre 2022 152
6 sept. 2012 à 09:39
Bonjour,

Essaye isnull() à la place de isempty()

Cordialement,
0
bonjour

voici cette ligne de ton code

For D = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1
If IsEmpty(Range("B" & D).Value) <> Range("B" & D).Value = "" Then

essaie avec

For D = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1
If Range("B" & D).Value = "" Then
Cordialement
0
Utilisateur anonyme
6 sept. 2012 à 09:45
Bonjour

Qu'essayes-tu de tester là ?
If IsEmpty(Range("B" & D).Value) <> Range("B" & D).Value = ""

Tel que tu as écrit ton test, tu vérifies sui une cellule est empty, tu compares le résultat de ce test (donc true ou false, -1 ou 0) au contenu de la cellule, donc tu obtiens à nouveau un booléen. Finalement, tu compares ce booléen à une chaîne vide
Je ne comprends vraiment pas
0
vbnetstudent Messages postés 10 Date d'inscription jeudi 6 septembre 2012 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 09:46
Bonjour,
Merci d'avoir répondu si rapidement mais isnull() et isempty() sont deux comportements différent en programmation.
Quand une cellule est vide, elle n'est pas nul.

J'aimerai savoir pourquoi la fonction isempty() marche pas de la même manière à chaque fois..
En faite on dirait que c'est le range.value qui bug aussi...il me dit que la cellule est vide aussi de temps en temps...C'est vraiment incompréhensible...*

Cordialement.
0
tu peux essayer aussi la methode Trim

If Trim(Range("B" & D).Value) = "" Then

Parce que si tu as un espace dans ta cellule elle apparait vide et pourtant il y a un caractère (l'espace).
0
vbnetstudent Messages postés 10 Date d'inscription jeudi 6 septembre 2012 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 09:56
la valeur est sous la forme xxx.xxx.xxx.xxx.
xxx étant des lettres.
0
vbnetstudent Messages postés 10 Date d'inscription jeudi 6 septembre 2012 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 10:03
Comme j'ai dis précédemment, il me dit que ma cellule est vide.... même avec le trim...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vbnetstudent Messages postés 10 Date d'inscription jeudi 6 septembre 2012 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 09:50
oups ça répond un peu trop vite...

G_33 si tu remarque ton teste je le regarde aussi puisque j'ai mis un OU(<>)

le père
/////
Qu'essayes-tu de tester là ?
If IsEmpty(Range("B" & D).Value) <> Range("B" & D).Value = ""

Tel que tu as écrit ton test, tu vérifies sui une cellule est empty, tu compares le résultat de ce test (donc true ou false, -1 ou 0) au contenu de la cellule, donc tu obtiens à nouveau un booléen. Finalement, tu compares ce booléen à une chaîne vide
Je ne comprends vraiment pas
////
Range("B" & D).Value me sort une valeur et cette valeur je regarde si elle est vide avec isempty.Non?
0
Oui. Mais ensuite, tu compares le résultat de ce test ( vrai ou faux) avec Range("B" & D).Value : tu compares un booléen et une valeur.Ce n'est sûrement pas ce que tu voulais faire
Tu obtiens à nouveau un résultat vrai ou faux
Ensuite , tu compares ce vrai ou faux avec "". Ce n'est sans doute pas non plus ce que tu veux.

Je suppose comme G_33 que le <> du milieu voulait être un OR
0
Ta remarque

G_33 si tu remarque ton teste je le regarde aussi puisque j'ai mis un OU(<>)

en VBA (OU) c'est OR

(<>) ça veut dire different de.

Donc dans ton code tu teste si la cellule b est vide et different de vide
0
vbnetstudent Messages postés 10 Date d'inscription jeudi 6 septembre 2012 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 11:06
oups... de toute façon j'avais tester sans le OR...mais bon avec cette betise ça pouvait pas marcher....
0
et donc est ce que ça fonctionne maintenant ?
0
vbnetstudent Messages postés 10 Date d'inscription jeudi 6 septembre 2012 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 11:15
Non mon code de base était : IsEmpty(Range("B" & D).Value)
Apres j'ai testé avec Range("B" & D).Value == ""
J'ai testé avec le trim.

Quand mon code ne fonctionne pas c'est soit le isempty qui foire alors que le .value n'est pas vide ou c'est le .value qui est vide alors qu'il ne l'est pas.
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié par ccm81 le 6/09/2012 à 10:14
bonjour à tous

peut être ici où les Range() ne sont pas liés à une feuille
 If IsEmpty(Range("B" & D).Value) <> souligne>Range</souligne>("B" & D).Value = "" Then

à tester
 If IsEmpty(.Range("B" & D).Value) <> .Range("B" & D).Value = "" Then

bonne suite
0
vbnetstudent Messages postés 10 Date d'inscription jeudi 6 septembre 2012 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 11:08
souligné?
0
vbnetstudent Messages postés 10 Date d'inscription jeudi 6 septembre 2012 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 11:16
les ranges sont liés à ma feuille puisque j'ai mis un with au dessus qui spécifie l'endroit de mes traitements.
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié par ccm81 le 6/09/2012 à 11:17
mais non,
je pense qu'il manque le point ". " devant range (reference à ThisWorkbook.Sheets("Feuil1") )
0
vbnetstudent Messages postés 10 Date d'inscription jeudi 6 septembre 2012 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 11:21
ça fonctionne merci.
0