Signaler

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

Posez votre question Did - Dernière réponse le 27 févr. 2013 à 14:46 par Did
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 =)

Utile
+0
plus moins
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!
Utile
+0
plus moins
Bonjour

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

http://cjoint.com/?3BAs6FtFPbr
Utile
+0
plus moins
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 ;)
Utile
+0
plus moins
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 !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !