Détecter la cellule vide et sortir de la procédure

Bonjour j'ai développé un code qui a pour instructions de supprimer les lignes contenant le mot NULL, de passer à la cellule suivante quand le contenu de la cellule est différent du mot NULL ou est numérique et de sortir de la procédure SUB si la cellule est vide ( à la fin de mon tableau de données). Malheureusement, le programme ne s'arrête pas à la première case vide. Il continue puis un BUG. Je ne vois pas l'erreur pouvez vous m'aider svp? Merci

16test.xlsm (11.44 Ko)

Bonsoir,

A sélectionner on ne sait plus ce qu'on fait exactement ! Réécris ta procédure en supprimant tout Select et tout ActiveCell et tu feras dispaître l'erreur ! Et tu raccourciras ta procédure !

Merci MFerrand je ne savais pas que c'était inutile(je travaille sur un programme de simulation du cours d'un indice si tu es d'accord je voudrai te le soumettre une fois fini). J'ai essayé de faire de mon mieux avec tes indications. Je ne sais pas si je peux encore amélioré. Cependant, elle ne fonctionne toujours pas et dans les variables locales Zone n'affiche plus les coordonnées des cellules c'est dire "A1:B45" par exemple.

Voici ce que j'ai fait

Sub Mac()

Dim Cellule As Range

Dim Vide As Boolean

Dim Zone As Range

Set Zone = Range("B1:" & Range("B1").SpecialCells(xlCellTypeLastCell).Address)

For Each Cellule In Zone

If Cellule = "null" Then

Cellule.EntireRow.Delete Shift:=xlUp

ElseIf Cellule <> "null" Or IsNumeric(Cellule) = True Then

ActiveCell.Offset(1, 0).Select

ElseIf IsEmpty(Sheets(1).Cells(ActiveCell.Row, 1)) Then

Vide = True

Exit For

End If

Next

End Sub

Tu testes uniquement la colonne B ou toutes les colonnes ?

Il serait bon que tu donnes un éclairage un peu plus précis sur tes intentions. Il y a pas mal d'incohérences que l'on ne peut lever et qui font se demander ce que tu veux faire en fait !

Mes données portent sur deux colonnes mais je travaille uniquement avec la colonne B qui contient le cours de l'indice (la colonne A contient les dates). Ces données sont actualisées quotidiennement. Certains jours il n'y a pas eu de cotation donc pour ces dates on a NULL à la place des valeurs. Étant donnée que je dois travailler avec ces données, je les traite; il me faut donc supprimer les lignes contenant le mot NULL, passer à la cellule suivante quand le contenu de la cellule est différent du mot NULL ou est numérique et de sortir de la procédure SUB ou FOR si la cellule est vide ( c'est à dire une fois arrivée à la fin de mon tableau de données). J'espère avoir été assez claire

Bonjour,

"NULL" ou "null" ? VBA différencie la casse par défaut...

Et il s'agit bien d'une valeur texte ?

On va conserver tes variables Cellule et Zone. Vide est inutile, et tu ne l'utilises d'ailleurs pas en fait !

Tu n'as que 2 colonnes et tu ne t'intéresses qu'à une, pas la peine de mobiliser SpecialCells..., End(xlUp) suffira...

On n'a pas à détecter la fin de ton tableau puisqu'on la définit avant, ni à s'occuper de valeurs autres que "null", puisqu'on supprime dans ce cas et pas dans les autres.

On ne va d'ailleurs pas supprimer le lignes une par une, on efface pour les supprimer en bloc à la fin (et si des lignes intermédiaires étaient vides, elles seront supprimées du même coup).

Et on va prendre la précaution de couvrir "NULL" et "null".

Sub Mac()
    Dim Cellule As Range, Zone As Range
    With Sheets(1)
        Set Zone = .Range("B1:B" & .Range("B" & .Rows.Count).End(xlUp).Row)
    End With
    Application.ScreenUpdating = False
    For Each Cellule In Zone
        If UCase(Cellule) = "NULL" Then Cellule.ClearContents
    Next Cellule
    Zone.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

Cordialement.

C'est "null"

Merci je vais essayer et je te reviens. Merci

ça fonctionne merci infiniment MFerrand

Quelques petites questions encore.... à quoi sert

Application.ScreenUpdating = False

UCase

SpecialCells(xlCellTypeBlanks)

    Application.ScreenUpdating = False

bloque la mise à jour de l'affichage, la propriété revient à True automatiquement en fin de macro.

Cela accélère l'exécution.

UCase est une fonction qui tranforme en majuscules tous les caractère alphabétiques d'une expression. On l'utilise souvent pour des comparaisons lorsqu'on est pas sûr de la casse, en passant tout en majuscules et en comparant avec une expression en majuscules, on évite les problèmes. On pourrait faire pareil en convertissant tout en minuscules (la fonction qui le fait est LCase).

SpecialCells(xlCellTypeBlanks) renvoie les cellules vides d'une plage. Ici on s'en sert pour supprimer d'un seul coup toutes les lignes correspondant à ces cellules vides.

Cordialement.

Rechercher des sujets similaires à "detecter vide sortir procedure"