[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à :
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 :
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 :
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 =)
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
-
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! -
Contributeur
-
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 ;) -
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 !