Cellules vides
Résolu
Beubeu-Wazza
-
Arkana0 Messages postés 1980 Date d'inscription Statut Modérateur Dernière intervention -
Arkana0 Messages postés 1980 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'ai créer un code un peu barbare qui est censer enlever les # de trois de mes colonnes. Cependant lorsqu'il tombe sur une cellule vide il s'arrête. Si quelqu'un à une piste pour moi. Merci d'avance.
Option Explicit
Public Sub tag()
Dim i As Integer
i = 2
'un peu barbare
For i = i To 1000
Cells(i, 20).Select
If Cells(i, 20).Select = Null Then
i = i + 1
End If
ActiveCell = Right(ActiveCell, Len(ActiveCell) - 1)
Next i
End Sub
J'ai créer un code un peu barbare qui est censer enlever les # de trois de mes colonnes. Cependant lorsqu'il tombe sur une cellule vide il s'arrête. Si quelqu'un à une piste pour moi. Merci d'avance.
Option Explicit
Public Sub tag()
Dim i As Integer
i = 2
'un peu barbare
For i = i To 1000
Cells(i, 20).Select
If Cells(i, 20).Select = Null Then
i = i + 1
End If
ActiveCell = Right(ActiveCell, Len(ActiveCell) - 1)
Next i
End Sub
1 réponse
-
Bonjour,
Pourquoi ne pas faire un simple Ctrl+F, aller dans remplacer et renseigner # dans "rechercher" et "" dans "remplacer par" ?
En sélectionnant les colonnes concernées si le # est présent dans d'autres où il doit rester.-
-
OK,
Regarde bien la structure de ton code : (déboggage, et appuyer sur F8 pour lancer le codee en pas à pas)
Lorsqu'il tombe sur une case vide, il augmente i d'un cran. Ensuite en restant toujours sur cette même case, il applique une formule supposant au moins un caractère sur une case vide -> bug
Une correction rapide à ton code :
Option Explicit
Public Sub tag()
Dim i As Integer
i = 2
'un peu barbare
For i = i To 1000
Cells(i, 20).Select
If Cells(i, 20).Select = Null Then
i = i + 1
Else
ActiveCell = Right(ActiveCell, Len(ActiveCell) - 1)
End If
Next i
End Sub
Une correction un peu plus élaborée qui te fera gagner beaucoup de temps si tu as affaire à de longs fichiers :
Option Explicit
Public Sub tag()
Dim i As Integer
i = 2
'un peu barbare
For i = i To 1000
If Cells(i, 20).Value = Null Then
i = i + 1
Else
Cells(i,20) = Right(Cells(i,20), Len(Cells(i,20) - 1)
End If
Next i
End Sub
Le fait d'aller activer une cellule prend beaucoup plus de temps que de la travailler sans l'activer. J'avais un programme qui mettait environ un après-midi à tourner avec des Select. Il a été réduit à 1h avec cette méthode... -
-
J'aurais dû tester...
Le problème vient de ton test "If Cells(i,20).Select = Null"
Primo, c'est Cells(i,20).Value qu'il faut tester et secondo pour tester si une cellule est vide, mieux vaut indiquer "" que Null.
Ensuite le fait d'incrémenter de i si la valeur est nulle peut te faire sauter une case avec du texte., autant donc tester si une cellule n'est pas vide (si c'est le cas agir), autrement laisser la boucle tourner sans d'autres instructions.
J'ai de plus repéré quelques pépites sur mon code optimisé.
Au final ça donne ça :
Public Sub tag()
Dim i As Integer
'un peu barbare
For i = 2 To 1000
If Cells(i, 20).Value <> "" Then
Cells(i, 20).Value = Right(Cells(i, 20).Value, Len(Cells(i, 20)) - 1)
End If
Next i
End Sub -
-