Problème VBA cellules vides
Tout d'abord, bonjour à tous,
J'ai hésité quelque temps avant de poster ma demande, mais j'ai effectué au préalable de nombreuses recherches sur le sujet et sur divers forum, mais je n'arrive toujours pas à résoudre mon problème et me permets donc de vous solliciter.
Étant novice dans le domaine des macros vba (1 mois environ) je suis en train de monter une macro pour mon travail permettant de mettre en forme divers fichiers, de les enregistrer sur des serveurs et d'envoyer automatiquement des mails avec liens.
Je me heurte hélas, malgré ma macro correct, a 1 type de fichier pour qui la macro ne fonctionne pas, je m'explique:
Pour un type de fichier, j'ai créé un code vba me permettant de supprimer des lignes du tableau en fonction d'une date que j'ajoute par le biais de MsgBox, cela fonctionne, mais sur un fichier, en colonne H (colonne de dates) il y a des cases vides et de ce fait, fait planter ma macro.
Je souhaiterai donc, réussir à trier l'entièreté de ma colonne H en supprimant les dates correspondantes mais ne pas supprimer les lignes où il y a des cellules vides, ni être bloqué par ces dernières...
J'ai essayé divers méthode vu sur divers forum mais aucune ne fonctionne.
J'ai même essayé de mettre une date "bidon" sur les cellules vides (01/01/1900) et la ma macro fonctionne, mais je n'arrive pas à faire le chemin inverse en supprimant ces dates fictives pour retrouver les cases vides.
Sub Intox()
Set MaPlage = Sheets("feuil1").Range("H2:H1000")
For Each Cel In MaPlage
If Cel.Value = "01/01/1900" Then
Cel.Value = "" (j'ai essayé aussi : Sélection.ClearContents)
End If
Next
End Sub
Ca reste de la bidouille mais je ne trouve rien d'autres, donc si une âme charitable aurait une idée de remplacement ou qui pourrait m'aider à comprendre, je prends toute informations.
Vous en remerciant par avance,
Un novice nouveau
Salut
essayé de changer ca :
If Cel.Value = "01/01/1900" Then
Cel.Value = ""
avec ca :
If Cel.Text = "01/01/1900" Then
Cel.ClearContents
Bonjour,
Il te suffisait de tester si la cellule était vide pour ne pas déclencher la suppression de lignes... !
En affectant la valeur "" à la fin à ta cellule, celle-ci n'est plus vide mais contient une valeur de type String (chaîne nulle ou vide).
Si tu veux la vider il faut lui affecter la valeur Empty.
Cordialement.
Merci à vous deux pour vos réponses, explications.
Belkacem64, en modifiant en .Text ça donne exactement ce que je souhaitais, merci.
Par contre, par souci de rendre la macro plus simple en code, je me permets de vous solliciter à nouveau :
La macro entre l'ajout de la date 01/01/1900 et la suppression de cette date est la suivante :
Sub DATESUPR1 ()
Dim VarDate As Date
Dim finpaie
VarDate = Range("H2").Value
finpaie = InputBox ("Date de fin")
Do While Not (IsEmpty(ActiveCell))
If (DateDiff("d", finpaie, ActiveCell.Value) > 0) Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1,0).Select
End If
Loop
End Sub
Ce code fonctionne parfaitement, sauf bien sûr si des cellules vides s'y trouve, c'est pour cela que je passe par la "bidouille".
Est-il possible de modifier ce code pour que la macro ne bloque pas au cellules vides et passe à la suivante? J'ai déjà essayé en enlevant le "Do While" mais je n'arrive pas à étendre la sélection de la plage...
J'ai trouvé ceci :
Range("H5000").End(xlUp).Select
Range(ActiveCell, "H2").Select
Qui me permet de sélectionner ma plage de donnée correctement mais je n'arrive pas à l'ajouter dans l'une de mes Sub que ce soit DATESUPR1 ou INTOX...
Je vous remercie encore pour votre temps, et désolé si mon code paraît chaotique, je débute et il y a vraiment beaucoup de chose à voir et connaître sur le vba que seul l'expérience et l'entraide me fournira!
Salut
essayé ce code
Sub DATESUPR1()
Application.ScreenUpdating = False
Dim Start_Date As Date, End_Date As Date, c As Range
Start_Date = Range("H2").Value2
For Each c In Range("H3:H31")
End_Date = c.Value2
If (DateDiff("d", c, Start_Date) > 0) Then c.EntireRow.Delete
Next
Application.ScreenUpdating = True
End Sub
Merci une fois de plus, je testerai ça demain matin et vous ferez un retour.
Bonjour à vous,
Merci encore pour avoir résolu mon problème, je peux clôturer ce thème.
Encore merci pour votre rapidité et votre temps.