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

Résolu
Did -  
 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 =)

4 réponses

  1. roupille008 Messages postés 34 Statut Membre
     
    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
  2. Did
     
    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
  3. Did
     
    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