Sélections des lignes d'une colonne à la dernière ligne

Bonjour à tous,

Je n'arrive pas à faire quelque chose qui ne me parait pourtant pas compliqué, j'ai eu un peu de mal à mettre un titre clair, désolé.

J'ai un tabeau qui contient plusieurs lignes qui part de A1 jusqu'a Wx (x car le nombre de ligne change de semaine en semaine).

Parmis mes lignes, j'ai certaine cellule vide.

Je souhaite sélectionner toutes les valeurs (même vide) depuis C1 jusqu'à la dernière valeur W.

Donc ça peut etre C1:W620 puis la semaine suivante, C1:W403... sachant que mon C1 peut-etre une cellule vide, cependant il n'y aura jamais de cellule vide dans ma colonne W.

Ensuite je ne veux pas sélectionner les colonnes entière car ça merde lorsque je copie.

Merci pour votre aide

Vous pensez quoi de ce code ?

ActiveSheet.Range("C1", _
   ActiveSheet.Range("I1").End(xlDown)).Select

Le code entier est le suivant :

Sub Import()
'
' Vider le contenu d'une feuille
'
    Sheets("Extra").Select
    Cells.Select
    Selection.ClearContents
    Range("A1").Select
'
' Import les cellules d'un fichier externe
'
    MonClasseurActif = ActiveWorkbook.Name 'memorise le classeur actif

    Dim QuelFichier
    QuelFichier = Application.GetOpenFilename("Fichier Excel (*.xls), *.xls", Title:="Sélectionnez le fichier à importer")

    If QuelFichier <> False Then
    Workbooks.Open QuelFichier
    Range("C4").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Copy
    ActiveWindow.Close
    Windows(MonClasseurActif).Activate
    Sheets("Extra").Select
    Range("A1").Select
    ActiveSheet.Paste

    Else
        MsgBox "Vous n'avez pas sélectionné de fichier"
        Exit Sub
    End If
'
' creer feuille
'
    Sheets("Base").Select
    Sheets("Base").Copy Before:=Sheets("Base")
    Sheets("Base (2)").Select
    Sheets("Base (2)").Name = "SEC"
'
' copier données de EXTRA
'
Sheets("Extra").Select
ActiveSheet.Range("C1", ActiveSheet.Range("W1").End(xlDown)).Select
Selection.Copy
'
' coller données de EXTRA
'
    Sheets("SEC").Select
    Range("D3").Select
    ActiveSheet.Paste ' je ne comprend pas pourquoi ma macro plante à ce niveau là    <==============
'
' remplace un caractère et change le format de date
'
    Range("G:G,N:N,O:O,P:P,Q:Q").Select

    Selection.Replace What:=".", Replacement:="/", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.NumberFormat = "dd/mm/yy;@"

MaFeuilleActive = ActiveSheet.Name 'memorise la feuille active
'
' Vider le contenu d'une feuille
'
    Sheets("Extra").Select
    Cells.Select
    Selection.ClearContents
    Range("A1").Select

Sheets(MaFeuilleActive).Activate

End Sub

Ce que je ne comprend pas c'est que ça bloque à la ligne avec ce bout de code simple que j'utilise au dessus

ActiveSheet.Paste

Surtout que si je fais le coller manuellement ça fonctionne !!! une idée ?

Bonsoir Leon, bonsoir le forum,

Tout d'abord une remarque, évite autant que tu le peux les Select qui ne font que ralentir l'exécution du code... Ensuite, si j'ai bien compris, voilà comment je verrais les choses :

Public Sub Import()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim E As Worksheet 'déclare la variable E (Onglet Extra)
Dim B As Worksheet 'déclare la variable B (Onglet Base)
Dim F As Variant 'déclare la variable F (Fichier)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim S As Worksheet 'déclare la variable S (Onglet SEC)

Set CD = ThisWorkbook 'définit le classeur destination CD
Set E = CD.Sheets("Extra") 'définit l'onglet E
Set B = CD.Sheets("Base") 'définit l'onglet B
E.Cells.ClearContents 'efface toutes les cellules de l'onglet E
'définit le fichier F
F = Application.GetOpenFilename("Fichier Excel (*.xls), *.xls", Title:="Sélectionnez le fichier à importer")
If F <> False Then 'condition : si F n'est pas [Faux]
    Workbooks.Open F 'ouvre le fichier F
    Set CS = ActiveWorkbook 'définit le classeur source CS
    Set OS = CS.Sheets(1) 'définit l'onglet source OS (à adapter, j'ai choisi le premier onglet du classeur source...)
    'copie la plage allant de C4 à la dernière cellule de la plage utilisée de l'onglet OS et la colle dans A1 de l'onglet E
    OS.Range(OS.Cells(4, 3), OS.UsedRange.SpecialCells(xlLastCell)).Copy E.Range("A1")
Else 'sinon
    MsgBox "Vous n'avez pas sélectionné de fichier" 'message
    Exit Sub 'sort de la procédure
End If 'fin de la condition
CD.Activate 'active le classeur destination CD
B.Copy Before:=Sheets("Base") 'copie l'onglet Base
ActiveSheet.Name = "SEC" 'renomme l'onglet copiée
Set S = CD.Sheets("SEC") 'définit l'onglet S
'copie la plage C1:W... de l'onglet E et la colle à partir de D3 dans l'onglet S
E.Range("C1:W" & E.Cells(Application.Rows.Count, 23).End(xlUp).Row).Copy S.Range("D3")
With S.Range("G:G,N:N,O:O,P:P,Q:Q") 'prend en compte les colonne G, N à Q de l'onglet S
    'remplace le point par un slash
    .Replace What:=".", Replacement:="/", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
       ReplaceFormat:=False
    .NumberFormat = "dd/mm/yy;@" 'définit le format
End With 'fin de la prise en compte des colonnes...
E.Cells.ClearContents 'efface les cellules de l'onglet E
S.Select 'sélectionne l'onglet S
End Sub

Tu remarqueras qu'il y a beaucoup de lignes au début pour déclarer et définir les variables. Ce qui semble être une perte de temps pour écrire des ligne superflues, s'avère par la suite très pratique et simplifie considérablement l'écriture du code. Plus de Select (sauf à la fin) et des Copier/Coller en une seule ligne :

OngletSource.Range(plage).Copy OngletDestination.Range(cellule)

Salut, merci pour ta réponse, j'vais essayer ta méthode.

As-tu une idée pourquoi j'ai une erreur sur la copie avec mon code ? Tout le reste fonctionne bien et ça va assez vite pour moi, j'ai bien noté que les select sont à éviter.

Rechercher des sujets similaires à "selections lignes colonne derniere ligne"