Sélection plage commençant par cellule vide

Bonjour,

Je souhaiterais sélectionner une plage de cellules. Plage("I3:I15"), sachant que I3 est fixe mais qu'elle peut être vide ou pleine et I15 complètement aléatoire, mais toujours pleine. Des lignes peuvent se rajouter , I15 peut vite devenir I16 ou I17, etc.. . .…

Aussi j'ai pensé, pouvoir sélectionner de I3 jusqu'à la dernière cellule non-vide, mais encore une autre fois c'est un vœu pieux, car tous mes essais ont été vains.

Cette question a déjà été traitée sous une autre forme, mais j'avais auparavant fait une erreur en nommant certaines plages manuellement et ceci a créé des blocages pour la suite du script.

Merci à tous ceux qui peuvent me donner un coup de main.

23essais.xlsm (22.65 Ko)

Bonjour,

Vianney a écrit

Je souhaiterais sélectionner une plage de cellules. Plage("I3:I15"), sachant que I3 est fixe mais qu'elle peut être vide ou pleine et I15 complètement aléatoire, mais toujours pleine. Des lignes peuvent se rajouter , I15 peut vite devenir I16 ou I17, etc.. . .…

Copies ce code dans un nouveau module et lances la macro.

Option Explicit
Public Sub Sélection_Plage()

Dim sH As Worksheet
Dim derLigne As Integer
Dim Plage As Range

    Set sH = Worksheets("x")
    With sH
        derLigne = Range("C" & Rows.Count).End(xlUp).Row
        Set Plage = .Range(Cells(3, 9), Cells(derLigne, 9))
        MsgBox Plage.Address
        Plage.Select
    End With

End Sub

Rebonjour,

J'ai essayé le code, il fonctionne, mais il sélectionne au moins une vingtaine de cellules après la dernière cellule non-vide. La plage ne peut être limitée vers le bas, car dans des dossiers que ce script doit traiter, j'ai vu des dizaines de lignes pouvant aller jusqu'à 150 lignes au moins. Pour l'instant il y a 13 lignes, demain il peut y avoir 21, un autre moment 5 lignes si les critères changent. C'est vraiment aléatoire.

Merci encore.

Re,

Tu supprimes le texte sous le tableau

Cdlt

Re,

Pour plus de sécurité, tu appliques ce code. qui redéfinit le usedrange de la feuille.

(dans ta feuille, CTRL + Fin = S30, après l’exécution du code CTRL + Fin donne la dernière cellule de ton tableau)

Cdlt

Option Explicit
Public Sub Sélection_Plage()

Dim sH As Worksheet
Dim derLigne As Integer
Dim Plage As Range

    Set sH = Worksheets("x")
    With sH
        'On redéfinit le usedrange de la feuille
        Range(Cells.SpecialCells(xlCellTypeLastCell).EntireRow, _
            Cells.Find("*", , , , xlByRows, xlPrevious).EntireRow).Offset(1, 0).Delete
        Range(Cells.SpecialCells(xlCellTypeLastCell).EntireColumn, _
            Cells.Find("*", , , , xlByColumns, xlPrevious).EntireColumn).Offset(0, 1).Delete
        ActiveWorkbook.Save
        'Sélection dernière ligne de la colonne C
        derLigne = Range("C" & Rows.Count).End(xlUp).Row
        'On définit la plage I3:I derligne
        Set Plage = .Range(Cells(3, 9), Cells(derLigne, 9))
        MsgBox Plage.Address
        Plage.Select
    End With

End Sub

Salut,

C'est là qu'on voit la différence entre les pros et les amateurs. Le code que tu m'as envoyé fonctionne parfaitement, mais c'est un fichier test. J'ai quelques petites difficultés avec le vrai fichier que je ne puis t'envoyer pour des raisons de données personnelles. Je pense que le seul problème est que la cellule de départ est I12 dans le vrai fichier et I3 dans essais (j'aurais du penser à cela). Je suppose que c'est là qu'il faut transformer quelque chose :

derLigne = Range("C" & Rows.Count).End(xlUp).Row

Set Plage = .Range(Cells(3, 9), Cells(derLigne, 9))

mais comme la cellule de départ n'est pas nommé, je ne sais pas le corriger dans le vrai fichier. J'ai changé les chiffres de Range, mais peine perdue. Je t'envoie le fichier test qui fonctionne parfaitement, sans le texte en-dessous.

Merci pour tout.

26essais.xlsm (21.10 Ko)

Re,

Modifies le code précédent avec celui-ci dessous.

Et compares les, tu verras les différences.

Option Explicit
Public Sub Sélection_Plage()

Dim sH As Worksheet
Const Début As Byte = 12    'ligne 12
Dim derLigne As Integer     'Dernière ligne
Dim Plage As Range

    Set sH = Worksheets("x")
    With sH
        'On redéfinit le usedrange de la feuille
        Range(Cells.SpecialCells(xlCellTypeLastCell).EntireRow, _
            Cells.Find("*", , , , xlByRows, xlPrevious).EntireRow).Offset(1, 0).Delete
        Range(Cells.SpecialCells(xlCellTypeLastCell).EntireColumn, _
            Cells.Find("*", , , , xlByColumns, xlPrevious).EntireColumn).Offset(0, 1).Delete
        ActiveWorkbook.Save
        'Sélection dernière ligne de la colonne C
        derLigne = Range("C" & Rows.Count).End(xlUp).Row
        'On définit la plage I12:I derligne
        Set Plage = .Range(Cells(Début, 9), Cells(derLigne, 9))
        MsgBox Plage.Address
        Plage.Select
    End With

End Sub
49essais-v1.xlsm (21.34 Ko)

Salut,

Cela fonctionne à merveille. Jamais je n'aurais pu trouver une telle réponse. Merci à toi.

La macro la plus difficile de mon script total est terminée. Je voudrais remercier Jean-Eric, Bandzai64, Amadeus pour leur intervention dans ce script. Vous avez travaillé pour une association et cela va aider pas mal de personnes.

Merci pour tout.

Ce message est terminé, je dois y mettre fin, mais j'ai une encore une question pour ce script. C'est une réponse par Oui ou par Non, car je n'ai pas encore étudié la question.

Le classeur est composé de plusieurs feuilles, chaque feuille a sa propre macro. Les macros s'activent chaque fois que l'on clique sur la feuille (Si on clique 10 fois en 10secondes, la macro s'exécute 10 fois). Pensez-vous qu'il y a un moyen de mettre ces macros en exécution que lorsqu'il y a quelque chose à sauvegarder sur la feuille ?

Merci d'avance.

Rechercher des sujets similaires à "selection plage commencant vide"