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 Sub

Je 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 With

Rapide, 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

Rechercher des sujets similaires à "vide problematique"