VbNullString qui ne fonctionne pas

Bonjour à tous,

Je teste un programme ou la condition première de déclenchement du programme est si la valeur d'une cellule est vide (sans texte) dans la colonne 75.

Or a ma grande surprise le code va s’exécuter sur des cellules qui contiennent du texte.

Alors je sais pas d'ou cela peut venir?

J'ai testé avec = "" mais aussi vbnullstring et la fonction is empty. Même résultat!

Vous pensez à quoi comme origine du problème??

Veuillez trouver le code ci-dessous et le fichier de test.

Sub clear_etoile_empty()

Dim rebalayer As Boolean, numLigne As Long, nbLignes As Long, i As Long, nbDoublons As Long
Dim Default As VbMsgBoxStyle
Dim Response As VbMsgBoxResult
Dim WsDepart As Worksheet
Dim WsDestination As Worksheet

'procedure doublon

nbDoublons = 0

rebalayer = True
Application.ScreenUpdating = False
Application.StatusBar = True

numLigne = 1

recommencer:

While numLigne < Cells(Rows.Count, "C").End(xlUp).Row  'on boucle tant qu'on a qqlchose dans la cellule colonne A

nbLignes = Cells(Rows.Count, "C").End(xlUp).Row 'on récupère le nombre de lignes
'Debug.Print nbLignes & " lignes"
If Cells(numLigne, 3) = "" Then
  'On fait rien
  'Debug.Print "Ligne " & numLigne & " vide"
 Else
    For i = nbLignes To numLigne Step -1 'on remonte dans les lignes jusqu'à attendre la ligne "testée"
       If numLigne <> i Then 'on ne teste pas une ligne avec elle-même
          If Cells(i, 75).Value = vbNullString Then
            If Cells(numLigne, 45) = Cells(i, 45) Then
                If Cells(numLigne, 76) = Cells(i, 76) And Cells(numLigne, 77) = Cells(i, 77) And Cells(numLigne, 79) = Cells(i, 79) Then
                    Rows(numLigne).Interior.Color = RGB(255, 204, 204)
                    '.EntireRow.Delete
                    nbDoublons = nbDoublons + 1
               End If
            End If
        End If
      End If
    Next i
End If
numLigne = numLigne + 1
Application.StatusBar = "Traitement ligne " & numLigne

Wend
Application.ScreenUpdating = False
Application.StatusBar = False
Debug.Print nbDoublons
MsgBox ("Le nombre de ligne surlignées " & nbDoublons)
'fin procedure supp doublon

End Sub

Merci de vôtre aide. Bonne journée

Bonjour

A tout hasard

dans la doc microsoft

vbNullString ==> Chaîne dont la valeur est 0 et non vide....

et Différent d’une chaîne de longueur nulle ("")

et cette syntaxe ne marche pas ?

If Cells(i, 75).Value = "" Then

Cordialement

FINDRH

Hello nonesofar13,

Peux-tu indiquer une ligne où l'on rentre dans la condition, alors qu'on ne devrait pas? Perso ta condition fonctionne parfaitement

(debug.print à l'appui).

Hello FINDRH, d3d9x,

Alors ci-dessous une capture d’écran qui indique les lignes pour lequelles on rentre dans la condition alors qu'on ne devrait pas. Etant donné que la cellule contient une valeur string.

Bizarrement If Cells(i, 75).Value = "" Then ne fonctionne pas

d3d9x :

Perso ta condition fonctionne parfaitement

C'est toi qui m'avait aidé sur ce code il y à 2 mois de cela .

Merci d'avance.

capture excel pratique 22042016

Sur mon Excel, la 75ème colonne est la colonne à gauche de ce que tu as indiqué xD Normal?

Oui je reconnais ce code, il y a que toi qui utilises plus de 100 colonnes sur tes fichiers

La ligne 165 est en doublon avec la ligne 475. Sauf que de mémoire dans ta demande initale, il fallait supprimer le doublon le plus haut. Ici le doublon le plus haut est la ligne 165 -> la ligne est en rouge même si la colonne 75 n'est pas vide.

On teste sur la ligne i

If Cells(i, 75) = vbNullString Then

On colore la ligne numLigne

Rows(numLigne).Interior.Color = RGB(255, 204, 204)

Techniquement la fonction n'a aucun problème ^^

Sur mon Excel, la 75ème colonne est la colonne à gauche de ce que tu as indiqué xD Normal?

Exactement je me suis trompé en utilisant la fonction stylo de la capture d'écran mea culpa correction en PJ

Ce que je ne comprends pas est pourquoi on teste des cellules non vides ??alors qu'on a la condition

If Cells(i, 75) = vbNullString Then

capture excel pratique 22042016

J'ai reregardé nos derniers messages, tu sembles avec beaucoup adapté et réduit le code que j'avais réalisé. Vu que le code initial fonctionnait parfaitement, une de tes adaptation n'a pas fonctionné ^^

En effet dans le code que je t'avais proposé:

If Cells(numLigne, 1) = "" Or Cells(numLigne, 75) = "" Then
        'On fait rien
       Debug.Print "Ligne " & numLigne & " vide"
Else

Hello d3d9x,

Désolé j'ai pas répondu plus tôt j'ai pas trop eu le temps.

    If Cells(numLigne, 1) = "" Or Cells(numLigne, 75) = "" Then
                   'On fait rien
                   Debug.Print "Ligne " & numLigne & " vide"
                   Else

Cela veut dire qu'on va traiter les cellules

Cells(numLigne, 75) = ""

pleines? Et donc il faudrait pour traiter les vides mettre

Cells(numLigne, 75) <>""

??

Ou je me trompe

Merci d'avance,

Bonne journée.

Non non mon code était rédigé de la manière suivante:

Si la cellule est vide alors
    on affiche un message de débeugage (la ligne X est vide) et on ne fait rien d'autre
Sinon
   on réalise nos actions
Fin Si
If Cells(numLigne, 1) = "" Or Cells(numLigne, 75) = "" Then
    Debug.Print "Ligne " & numLigne & " vide"
Else
    ... tri et suppression éventuelle
    ...
    ...
End If

Bonjour,

Ok en fait mon idée était de reprendre la même logique sauf que je l'applique aux cellules uniquement vide.

La logique est la même en fait c'est tester les lignes entre elles.

Comme ton code fonctionne bien je pensais l'adapter à la situation

Si la cellule est vide alors
    on affiche un message de débeugage (la ligne X est vide) et on ne fait rien d'autre
Sinon
   on réalise nos actions
Fin Si

Je dois pouvoir écrire dans le bloc sinon un test qui s'applique que sur les cellules vides? Ou bien cela ne fonctionne pas?

Ou bien je supprime ce test

     Si la cellule est vide alors
    on affiche un message de débeugage (la ligne X est vide) et on ne fait rien d'autre

Bien cordialement

Rechercher des sujets similaires à "vbnullstring qui fonctionne pas"