VB vérification de celulle vide(KO)

Résolu
vbnetstudent Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
vbnetstudent Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -
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. eljojo_e Messages postés 1255 Statut Membre 155
     
    Bonjour,

    Essaye isnull() à la place de isempty()

    Cordialement,
    0
  2. G_33
     
    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
  3. Utilisateur anonyme
     
    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
  4. vbnetstudent Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
     
    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
    1. G_33
       
      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
    2. vbnetstudent Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
       
      la valeur est sous la forme xxx.xxx.xxx.xxx.
      xxx étant des lettres.
      0
    3. vbnetstudent Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
       
      Comme j'ai dis précédemment, il me dit que ma cellule est vide.... même avec le trim...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. vbnetstudent Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
     
    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
    1. Utilisateur anonyme
       
      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
  7. G_33
     
    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
    1. vbnetstudent Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
       
      oups... de toute façon j'avais tester sans le OR...mais bon avec cette betise ça pouvait pas marcher....
      0
    2. G_33
       
      et donc est ce que ça fonctionne maintenant ?
      0
    3. vbnetstudent Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
       
      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
  8. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. vbnetstudent Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
       
      souligné?
      0
    2. vbnetstudent Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
       
      les ranges sont liés à ma feuille puisque j'ai mis un with au dessus qui spécifie l'endroit de mes traitements.
      0
  9. ccm81 Messages postés 11033 Statut Membre 2 434
     
    mais non,
    je pense qu'il manque le point ". " devant range (reference à ThisWorkbook.Sheets("Feuil1") )
    0
    1. vbnetstudent Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
       
      ça fonctionne merci.
      0