Cellules vides

Résolu/Fermé
Beubeu-Wazza - 14 avril 2016 à 10:16
Arkana0 Messages postés 4399 Date d'inscription mercredi 11 février 2009 Statut Modérateur Dernière intervention 10 février 2023 - 14 avril 2016 à 13:44
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

1 réponse

Arkana0 Messages postés 4399 Date d'inscription mercredi 11 février 2009 Statut Modérateur Dernière intervention 10 février 2023 181
14 avril 2016 à 10:25
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.
0
Beubeu-Wazza
14 avril 2016 à 10:30
Oui pourquoi pas, j'y avais penser.
Cependant le but est d'automatiser la requête car on l'utilisera plusieurs fois. En faite je passe du fichier excel à un fichier csv. Je ne veux pas toucher au fichier Excel. Donc je fait ce code dans un fichier csv qui passera lui dans Néo4j.
0
Arkana0 Messages postés 4399 Date d'inscription mercredi 11 février 2009 Statut Modérateur Dernière intervention 10 février 2023 181 > Beubeu-Wazza
Modifié par Arkana0 le 14/04/2016 à 10:41
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...
0
Beubeu-Wazza > Arkana0 Messages postés 4399 Date d'inscription mercredi 11 février 2009 Statut Modérateur Dernière intervention 10 février 2023
14 avril 2016 à 10:57
Okai merci pour ce super conseil ! Je ne savait pas du tout. C'est intéressant de prendre en compte le temps de calcul

Cependant il s'arrête toujours à la case vide. Je ne sais pas pourquoi
0
Arkana0 Messages postés 4399 Date d'inscription mercredi 11 février 2009 Statut Modérateur Dernière intervention 10 février 2023 181 > Beubeu-Wazza
14 avril 2016 à 11:16
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
0
Beubeu-Wazza > Arkana0 Messages postés 4399 Date d'inscription mercredi 11 février 2009 Statut Modérateur Dernière intervention 10 février 2023
14 avril 2016 à 11:20
Wahou super ! Merci à toi !
Je cherchais depuis ce matin une solution pour contourner ce test. C'est vrai que ta condition est géniale !
Merci bien
0