Effacer cellule vide dans excel depuis vb.net

raynald31 Messages postés 31 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 27 novembre 2014 - 12 mars 2012 à 15:17
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 14 mars 2012 à 08:06
Bonjour,
je cherche a supprimer toutes les cellules vides dans toutes les feuilles d'un classeur excel depuis une appli vb.net.
Au préalable , j'ouvre un classeur existant que je rempli avec les données d'un datagridview.
le datagridview comporte 3 colonnes - dates - val 1 - val 2
Je créé, pour chaque mois des dates trouvées dans le datagridview, une feuille dans le classeur avec comme nom le mois et l'année des données.
Jusque là tout va bien sauf que mes données dans les feuilles sont avec des blancs. Ce qui est normal vu que je fais ( ...ligne + 1, c + 1..) .
Alors j'aimerai savoir comment je peux faire soit pour éviter les blancs soit pour les éffacer.
j'ai vraiment cherché sur google , hein !!

merci d'avance.

mon code ci-dessous :
Private Sub OuvrirFichier()

'Déclaration des variables
Dim appExcel As Excel.Application 'Application Excel
Dim wbExcel As Excel.Workbook 'Classeur Excel
Dim wsExcel As Excel.Worksheet 'Feuille Excel

'Ouverture de l'application
appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
wbExcel = appExcel.Workbooks.Open("C:\TEMP\toto.xls")
'wsExcel correspond à la première feuille du fichier


Dim c, ligne, i, s, r As Integer
Dim strSheetName As String
Dim blnFound As Boolean
appExcel.Visible = True
Dim oRng As Excel.Range
Dim firstCell As Excel.Range
Try
For ligne = 0 To DataGridView1.RowCount - 1
For c = 0 To DataGridView1.ColumnCount - 1
Dim monmois = Mid(DataGridView1(0, ligne).Value, 4, 2)
Dim monann = Mid(DataGridView1(0, ligne).Value, 7, 5)
Dim madate = monmois & monann

strSheetName = madate
i = wbExcel.Sheets.Count
For j = 1 To i
If wbExcel.Worksheets(j).Name = strSheetName Then
wbExcel.Sheets(strSheetName).select()
blnFound = True
Exit For
Else
blnFound = False
End If
Next
If blnFound = False Then
wsExcel = wbExcel.Worksheets.Add()
wsExcel.Name = strSheetName
oRng = wsExcel.Range("A1", "C1")

oRng(ligne + 1, c + 1) = DataGridView1.Rows(ligne).Cells(c).Value

Else
wsExcel = wbExcel.ActiveSheet
oRng = wsExcel.Range("A1", "C1")
oRng(ligne + 1, c + 1) = DataGridView1.Rows(ligne).Cells(c).Value

End If
Next c
Next ligne
For s = 0 To wbExcel.Sheets.Count - 1

wsExcel = wbExcel.ActiveSheet
For r = 0 To wsExcel.Rows.Count - 1
Dim maval As String
'firstCell = wsExcel.Range("A1", "C1")
maval = wsExcel.Cells(r, 0).value
If maval = "" Then
wsExcel.Cells(r, 0).Delete()
End If
'Dim lastCell As Excel.Range
'lastCell = firstCell.End(Excel.XlDirection.xlDown)

'Dim entireColumn As Excel.Range
'entireColumn = wsExcel.Range(firstCell, lastCell)

'If firstCell.Value Is Nothing Then
'entireColumn.EntireRow.Delete()
'End If

' For r = 0 To wsExcel.Rows.Count - 1

'If oRng.Value Is Nothing Then
'oRng.Delete()
'End If
Next r
Next s

Catch ex As Exception
MsgBox(ex.Message)
End Try

End Sub



désolé je débute !!! &n

5 réponses

raynald31 Messages postés 31 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 27 novembre 2014
12 mars 2012 à 15:19
oups j'ai oublié de supprimer la partie de code qui ne fonctionne pas
après next ligne.


désolé je débute !!! &n
0
Utilisateur anonyme
13 mars 2012 à 03:19
Bonjour,

Après avoir lu et relu, j'ai beaucoup plus de questions que de réponses.

Pourquoi vouloir supprimer des cellules vides par programmation ? C'est probablement l'opération la plus périlleuse que l'on peut faire à la main sur Excel quand on peut voir ce que l'on fait et profiter de Ctrl-Z quand ça tourne mal.

Ton code est pénible à comprendre, un peu d'indentation svp.

Pourquoi déclarer tes variables à l'intérieur des boucles ? C'est inutile, cela bouffe peut-être beaucoup de mémoire pour pas grand chose et cela ralentit l'exécution. Si tu déclares ta variable une seule fois à l'extérieur de ta boucle, c'est amplement suffisant.

C'est quelle instruction là-dedans qui provoque les blancs ?

Les blancs en question sont-ils du texte, des espaces ou carrément des cellules vides sans texte, ni espace, ni aucune donnée?

Comment est alimenté ton datagridview ? Si son contenu c'est une table de données, pourquoi passer par un datagridview ? Tu pourrais arriver sans doute au même résultat en interrogeant directement la table.
0
raynald31 Messages postés 31 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 27 novembre 2014
13 mars 2012 à 23:24
merci bien de ta réponse , je vais faire un truc plus propre.
Car en effet pourquoi passer par un datagridview.
Les blancs sont des lignes vides.
Je vais refaire ça correctement.
Mais je suis quand même curieux de savoir comment on peut, dans un tableau Excel, supprimer des lignes vides.
0
Utilisateur anonyme
14 mars 2012 à 01:36
Bonjour,

Sub EffaceLaQuatrièmeLigne()
    Range("a4").EntireRow.Delete
End Sub

Sub EffaceLaCinquièmeColonne()
    Range("e1").EntireColumn.Delete
End Sub


P.S. La suppression de cellules peut avoir des effets bizarres sur les formules et les calculs, du genre un calcul de la somme d'une ligne ou d'une colonne qui "ramasse" des données sur la colonne voisine et autres chinoiseries du genre. Excel est un peu imprévisible quand il refait ses formules et ses calculs après une suppression de cellules. On dirait qu'il en devient déboussolé.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 mars 2012 à 08:06
Bonjour,

Ton problème n'est pas celui de VB.Net, mais la connaissance du VBA/ERxcel que tu veux piloter depuis VB.Net.
On ne peut piloter "à distance" que ce que l'on saurait gérer directement.
J'ai lu et relu, depuis ton premier message. J'y ai notamment relevé que la suppression n'est nécessaire qu'en raison d'insertions mal gérées.
Je me réfère plus particulièrement à ceci :
Jusque là tout va bien sauf que mes données dans les feuilles sont avec des blancs. Ce qui est normal vu que je fais ( ...ligne + 1, c + 1..) .
Alors j'aimerai savoir comment je peux faire soit pour éviter les blancs soit pour les éffacer.

Une solution (qui concernerait Excel, piloté ou non) donnée ici ne servirait par les utilisateurs de VBA/Excel (qui ne viendraient jamais chercher leur solution dans la section VB.Net) !
Je te promets ceci : je répondrai avec plaisir à ta question si :
- elle était posée dans la section qui concerne la difficulté rencontrée (qui est une difficulté VBA et non VB.Net)
- si elle était "épurée" de ce qui n'est pas nécessaire (la source de ce que tu ajoutes à la feuille excel importe peu. Que les données proviennent d'une grille ou non , ton problème est celui de la localisation de l'endroit où les insérer et rien d'autre !)
- si tu voulais bien indenter ton code (afin qu'il soit lisible)

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Rejoignez-nous