[VBA]Récupérer n° des lignes avec cellule vide

Résolu/Fermé
Did - 26 févr. 2013 à 13:41
 Did - 27 févr. 2013 à 14:46
Bonjour,

Je dois réaliser un petit fichier Excel qui va reprendre les données d'un fichier CSV.
Pas de soucis de ce côté là, j'ai ce format là :

1    0.00534
2    -0.00245
3    -0.00142
4    0.00459
4    (blank)
5    0.00359


Les chiffres représentent les cycles, les valeurs réelles les mesures effectuées.
Le cycle 4 est présent "2x" puisqu'il y a une pause de X secondes réalisées dans mon cycle.

Je crée un graphique en nuage de points représentant ces mesures, sauf qu'actuellement, comme je reprends toutes ces mesures pour faire mon graphique, il y a "un trou" dans mon graph lorsque la case est vide.

Je ne souhaite pas supprimer, puisqu'il faut mettre en avant sur le graph lorsqu'il y a eu une pause dans mon contrôle.

La solution que je pensais adopter :
- Créer une deuxième série de données, avec uniquement les cases vides, et affecter la valeur minimale de mon contrôle à chacune.
- De ce fait, sur mon graphique, un point se trouve tout en bas de mon graph, à la hauteur de la pause, et on voit bien quand une pause est survenue.

-> Déjà, est-ce une bonne idée où y-a-t'il une meilleure solution ?

Sinon je continue, j'ai trouvé ceci afin de remplacer immédiatement les valeurs de mes cases vides :
With Sheets("Donnees")
    With .Range("B1", DerniereCaseMesures).SpecialCells(xlCellTypeBlanks)
       .Value = "vide"
    End With
End With


Et cela remplace TOUTES les valeurs en un seul passage !

J'imaginais donc pouvoir récupérer grâce à cela les numéros de ligne où une cellule est vide.
C'est ok pour la première avec ceci :
Sheets("Donnees").Range("B1", DerniereCaseMesures).SpecialCells(xlCellTypeBlanks).Row


Sauf qu'ensuite je suis bloqué, je ne sais pas comment récupérer les autres !

Je me suis dis qu'avec un ".Rows" cela me les donnerait toutes, mais non, ça ne fait rien (ma variable reste <vide>).

-> Comment réaliser cette opération ?


Merci d'avance de m'avoir lu et de prendre du temps pour moi =)

A voir également:

4 réponses

roupille008 Messages postés 33 Date d'inscription lundi 18 février 2013 Statut Membre Dernière intervention 4 avril 2013
26 févr. 2013 à 14:51
yop!

Voilà ce que je ferai:

Sub remplacer_vide_par_zero

Dim a as integer
a=1
do while a< 9999999
'ce 9999999 correspond au nombre de ligne de ta feuille

if cells(a,2)="" then
cells(a,2)=0

end if
a=a+1
loop
End sub



Ou alors tu fait un rechercher/remplacer où tu cherche "" et tu remplace par zéro.

Voilà, c'est ce qui me vient à l'esprit.

Salut!
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
26 févr. 2013 à 18:59
Bonjour

Une bidouille pour le principe et sans vba....

https://www.cjoint.com/?3BAs6FtFPbr
0
Bonjour,

Merci pour les réponses !

J'aime bien ton petit graphique, c'est une bonne idée =)

J'ai avancé d'un pas sinon, j'ai trouvé "EntireRow", et dans l'exemple ils parlaient de "Address", j'ai donc essayé ceci :
test2 = Selection.SpecialCells(xlCellTypeBlanks).Rows.Address(False, False)


Et je récupère donc un String contenant :
"B51,B102,B153,B204,B255,B306,B357,B408,B459"


Il ne me reste donc "plus qu'à" virer ces B, découper les nombres grâce à la virgule, et enfin affecter ces valeurs à ma nouvelle courbe de graphique.

Une question arrive, hier soir j'ai essayé d'affecter tour à tour (boucle) une valeur à ma série 2 du graphique, en utilisant ".XValues", mais bien sûr, cela remplace les anciennes valeurs.

Y-a-t'il une possibilité d'ajouter une valeur en gardant les anciennes (genre .Add ou qqchose du genre) ??

Merci en tout cas ;)
0
Voilà je suis arrivé à ce que je voulais =)

' Récupération des adresses de lignes vides
adrLignVide = Selection.SpecialCells(xlCellTypeBlanks).Rows.Address(False, False)
        
' Suppression des lettres de colonnes
        adrLignVide = Replace(adrLignVide, "B", "")
'Extraire les données séparées par une virgule dans un tableau de chaine de caractères
            Tableau = Split(adrLignVide, ",")


Et ensuite je convertis ce tableau de String en tableau d'entier, et enfin j'affecte à ma série 2 du graphique le tableau d'entier :
For i = 0 To UBound(Tableau)
                ' Boucle de conversion en entier
                TableauEntier(i) = CInt(Tableau(i)) - (i + 1)
            Next i
ActiveChart.SeriesCollection(2).XValues = TableauEntier()


Parfait merci pour l'aide apportée et j'espère qu'avec cela j'aiderai quelqu'un également !

Résolu !
0