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

Résolu
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. 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
    1. 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
      1. 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