Copier tableau taille variable macro excel [Résolu/Fermé]

Signaler
Messages postés
50
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
21 avril 2011
-
 Lucas -
Bonjour,

Je suis un peu débutant en macros excel... Je souhaiterais copier un tableau d'une feuille1 dans une feuille2 sous Excel. Le problème est que mon tableau aura toujours une taille variable (issu d'une extract)

Pour faire simple, on va le faire uniquement avec une colonne du tableau, colonne appelée NumArticle :

J'ai essayé de chercher comme déterminer la taille max de mon tableau, mais il semblerait que mon utilisation de Ubound LBound ne soit pas bonne

Auriez vous une solution ? Un grand merci d'avance


Option Explicit
Option Base 0

Sub CopierList()

Sheets("Feuil1").Select
Range("Lbound(NumArticle):Ubound(NumArticle)").Select //je pense que c'est là que ca bloque...
Selection.Copy
Sheets("Feuil2").Select
Range("A1").Select
ActiveSheet.Paste

End Sub

4 réponses

Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 590
Bonjour,
Ne pas confondre tableau = feuille et variable tableau...
Rien à voir.
Ici ton "tableau" c'est la plage occupée par tes données dans ta feuille.
Supposons :
nom de ta feuille : Feuil1
Méthode 1 :
Dernière colonne non vide :
Dim DerniereColonne As Integer 
DerniereColonne = Range("A1").SpecialCells(xlCellTypeLastCell).Column

Dernière ligne non vide :
Dim DerniereLigne As Integer     
DerniereLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row

Tu as donc maintenant la dernière ligne et dernière colonne de ton range...
Donc, pour le copier :
Dim DerniereColonne As Integer 
Dim DerniereLigne As Integer     

DerniereColonne = Range("A1").SpecialCells(xlCellTypeLastCell).Column 
DerniereLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row 
Sheets("Feuil1").Range(Cells(1, 1), Cells(DerniereLigne, DerniereColonne)).Copy


Au passage évite les .Select...

Méthode 2 :
Adresse absolue de la dernière cellule renseignée dans la feuille:
Dim AdresseAbsolue As String 
AdresseAbsolue = Range("A1").SpecialCells(xlCellTypeLastCell).Address

Ton Range devient alors :
Dim AdresseAbsolue As String 

AdresseAbsolue = Range("A1").SpecialCells(xlCellTypeLastCell).Address 
Range("A1", AdresseAbsolue).Copy


sources...
"Laissez-moi deviner... Votre surnom, c'est «Bande Passante»? "
- Le Tribunal des flagrants délires- P.Desproges -
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
50
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
21 avril 2011

Merci beaucoup Pijaku ! Ca marche parfaitement ! Par contre j'utilise toujours un .select pour activer la feuille dans laquelle je veux coller : Sheets("Feuil2").Select

il faut mieux éviter ?

Encore merci pour ton aide.
Messages postés
50
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
21 avril 2011

je comprend le principe, c'est effectivement plus simple mais je n'arrive pas à compiler : "propriété ou méthode non géré par cet objet"

c'est uniquement la ligne Sheets("Feuil2").Range("A2") qui merde
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 590
Surtout, quoiqu'il arrive, ne me demande pas pourquoi, je n'en sais rien... Mais ceci devrait régler ton problème :
Option Explicit

Sub copie_colle()
Dim AdresseAbsolue As String
With Sheets("Feuil1")
    AdresseAbsolue = .Range("A1").SpecialCells(xlCellTypeLastCell).Address
    .Range("A1", AdresseAbsolue).Copy
End With
With Sheets("Feuil2").Range("A2")
    .PasteSpecial
End With
End Sub
Messages postés
50
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
21 avril 2011

Nickel merci beaucoup !!

par curiosité, cette méthode séléctionne tout un tableau, si jamais on ne veut selectionner qu'une colonne, c'est faisable ? (comme dit, je n'en ais pas l'utilité maintenant, c'est par simple curiosité

Encore merci !
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 590
Par exemple, pour copier la 3ème colonne (C) de la feuille Feuil1 à la Feuil2 :
Option Explicit

Sub essai()
Dim Colonne As Integer, DerniereLigne As Integer
Colonne = 3 ' à adapter selon la colonne souhaitée
DerniereLigne = Cells(65536, Colonne).End(xlUp).Row
Sheets("Feuil1").Range(Cells(1, Colonne), Cells(DerniereLigne, Colonne)).Copy Sheets("Feuil2").Range("C1")
End Sub
Messages postés
50
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
21 avril 2011

OK ! Je garde ca sous la main au cas où ! Merci beaucoup pour ton aide !
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 152
Re,
le code de pijaku fonctionne très bien.
Sub copie_colle()
Dim AdresseAbsolue As String
With Sheets("Feuil1")
    AdresseAbsolue = .Range("A1").SpecialCells(xlCellTypeLastCell).Address
    .Range("A1", AdresseAbsolue).Copy Sheets("Feuil2").Range("A2")
End With
End Sub

Mais il doit être dans un module général et pas un module de feuille.
>> Insertion >> Module
C'est dans cette fenêtre que tu dois copier le code.
A+
Messages postés
50
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
21 avril 2011

C'est là que je l'ai rentré, mais merci du conseil !
Bonjour,

j'ai utilisé les deux méthodes qui fonctionnent à la base l'une comme l'autre, malheureusement quand la taille de mon tableau est plus importante que ma première copie, ça me sélectionne bien les cellules supplémentaires, mais quand la taille de mon tableau est plus petite que lors de ma première copie, la sélection continue de se faire sur la plage la plus importante

Autrement dit:
- si mon tableau s'étend de A1 à B2, j'applique ma macro et ça me copie bien les cellules de A1 à B2
- si ensuite mon tableau s'étend de A1 à B5, j'applique ma macro et ça me copie bien les cellules de A1 à B5
- mais si ensuite mon tableau s'étend de nouveau de A1 à B2 par exemple, j'applique ma macro et ça me sélectionne toujours la plage de A1 à B5, ça ne réduit plus jamais

Je ne trouve pas de solution.. Avez vous une idée? Merci