Cellule vide problématique
Bonjours à toutes et à tous,
Me voilà confronter un problème qui j'espère ne sera pas trop compliqué à résoudre par ces temps de fortes chaleurs.
Voici mon code :
Sub ins()
Worksheets("Données_Utiles").Activate
Dim cellule As Range
Dim D As Range
Dim i As Integer
Dim Mot As String
Dim Mot2 As String
Mot = "INSTRUM"
Mot2 = "Test"
i = 11
For Each cellule In Worksheets("Données_Utiles").Range("A1", Range("A1").End(xlDown))
If cellule.Value Like "*" & Mot & "*" Or cellule.Value Like "*" & Mot2 & "*" Then
cellule.Cut
Worksheets("Instrumentation").Activate
If Range("I11") <> "" Then
'Sélectionner la cellule après la dernière cellule non vide
Range("I65536").End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Else
Range("I" & i).Select
ActiveSheet.Paste
i = i + 1
End If
Set D = cellule
End If
Next
End SubJe sais qu'il n'est pas parfait et que je dois encore le peaufiner mais dans la globalité, il fonction très bien. SAUF dans une condition : mon For Each se stop si une des cellules en colonne A est vide. Et donc mes If ne fonctionnent que sur une partie des données.
Etant donné que toutes les données de l'onglet ("Données_Utiles") seront dispatchées dans ("Instrumentation") mais aussi dans d'autres onglets, cela n'est donc pas possible.
Merci par avance,
Nico
Bonjour,
C'est tout à fait normal, c'est à cause de :
For Each cellule In Worksheets("Données_Utiles").Range("A1", Range("A1").End(xlDown))et plus particulièrement de:
Range("A1").End(xlDown)déjà ça devrait planter d'après moi mais bon... tu as de la chance car tu fais déjà tourner ta macro sur la feuille en question je pense, si tu regardes de plus près, tu fais un range sur la feuille en question, mais
Range("A1").End(xlDown)est fait sur la feuille active, qui peut ne pas être la même que "Données_Utiles", en clair ça ferait une plage de cellules qui sont sur 2 feuilles différentes, grandes chances d'avoir un plantage.
pour avoir la dernière cellule remplie colonne A, il faut changer cette partie par:
Worksheets("Données_Utiles").Range("A" & Rows.Count).End(xlUp)ce qui au final donnera:
For Each cellule In Worksheets("Données_Utiles").Range("A1", Worksheets("Données_Utiles").Range("A" & Rows.Count).End(xlUp))Petit conseil:
Quand tu commences à devoir répéter Worksheets("Données_Utiles") un peu partout, il vaut mieux utiliser:
With Worksheets("Données_Utiles")
'code
End WithRapide, clair, net, explicatif, que demander de plus?
Un grand merci à toi, bonne journée!
De rien
De ton côté, merci d'avoir passé le sujet en résolu