Copier tableau taille variable macro excel
Résolu
couc67
Messages postés
50
Date d'inscription
Statut
Membre
Dernière intervention
-
Lucas -
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
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
A voir également:
- Copier tableau taille variable macro excel
- Comment réduire la taille d'un fichier - Guide
- Tableau word - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Trier un tableau excel - Guide
- Imprimer tableau excel sur une page - Guide
4 réponses
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 :
Dernière ligne non vide :
Tu as donc maintenant la dernière ligne et dernière colonne de ton range...
Donc, pour le copier :
Au passage évite les .Select...
Méthode 2 :
Adresse absolue de la dernière cellule renseignée dans la feuille:
Ton Range devient alors :
sources...
"Laissez-moi deviner... Votre surnom, c'est «Bande Passante»? "
- Le Tribunal des flagrants délires- P.Desproges -
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 -
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.
il faut mieux éviter ?
Encore merci pour ton aide.
Oui bien sur. Une des syntaxes pour copier coller est la suivante :
Sheets(FeuilleSource).Range(Source).Copy Sheets(FeuilDestination).Range(Destination)
Tu mets juste un espace entre .copy et ta feuille de destination...
Si je reprends ton code pour exemple :
Devient :
ou alors, avec l'adresse absolue :
Voilà...
Sheets(FeuilleSource).Range(Source).Copy Sheets(FeuilDestination).Range(Destination)
Tu mets juste un espace entre .copy et ta feuille de destination...
Si je reprends ton code pour exemple :
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
Devient :
Option Explicit Sub copie_colle() 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 Sheets("Feuil2").Range("A1") End Sub
ou alors, avec l'adresse absolue :
Option Explicit Sub copie_colle() Dim AdresseAbsolue As String AdresseAbsolue = Range("A1").SpecialCells(xlCellTypeLastCell).Address Sheets("Feuil1").Range("A1", AdresseAbsolue).Copy Sheets("Feuil2").Range("A1") End Sub
Voilà...
Salut lermitte222,
Oui j'ai testé (excel 2003). Pourquoi? Qu'est ce qui ne fonctionne pas selon toi?
EDIT : on peux ajouter, juste au cas ou :
AdresseAbsolue = Sheets("Feuil1").Range("A1").SpecialCells(xlCellTypeLastCell).Address
ou alors la jouer comme ceci :
Oui j'ai testé (excel 2003). Pourquoi? Qu'est ce qui ne fonctionne pas selon toi?
EDIT : on peux ajouter, juste au cas ou :
AdresseAbsolue = Sheets("Feuil1").Range("A1").SpecialCells(xlCellTypeLastCell).Address
ou alors la jouer comme ceci :
Option Explicit Sub copie_colle() Dim AdresseAbsolue As String With Sheets("Feuil1") AdresseAbsolue = .Range("A1").SpecialCells(xlCellTypeLastCell).Address .Range("A1", AdresseAbsolue).Copy Sheets("Feuil2").Range("A1") End With End Sub
Re,
le code de pijaku fonctionne très bien.
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+
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+
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
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