VB vérification de celulle vide(KO)

Résolu
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.

8 réponses

  1. Bonjour,

    Essaye isnull() à la place de isempty()

    Cordialement,
    1. 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
      1. 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
        1. 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.
          1. 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).
          2. la valeur est sous la forme xxx.xxx.xxx.xxx.
            xxx étant des lettres.
          3. Comme j'ai dis précédemment, il me dit que ma cellule est vide.... même avec le trim...
        2. 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?
          1. 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
        3. 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
          1. oups... de toute façon j'avais tester sans le OR...mais bon avec cette betise ça pouvait pas marcher....
          2. et donc est ce que ça fonctionne maintenant ?
          3. 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.
        4. 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
          1. souligné?
          2. les ranges sont liés à ma feuille puisque j'ai mis un with au dessus qui spécifie l'endroit de mes traitements.
        5. mais non,
          je pense qu'il manque le point ". " devant range (reference à ThisWorkbook.Sheets("Feuil1") )
          1. ça fonctionne merci.