Copier tableau taille variable macro excel
Résolu/Fermé
couc67
Messages postés
50
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
21 avril 2011
-
1 mars 2011 à 10:17
Lucas - 25 nov. 2016 à 11:22
Lucas - 25 nov. 2016 à 11:22
A voir également:
- Copier tableau taille variable macro excel
- Comment réduire la taille d'un fichier - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Trier tableau excel - Guide
- Tableau word - Guide
- Code ascii tableau - Guide
4 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 757
Modifié par pijaku le 1/03/2011 à 10:32
Modifié par pijaku le 1/03/2011 à 10:32
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 -
couc67
Messages postés
50
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
21 avril 2011
1 mars 2011 à 11:21
1 mars 2011 à 11:21
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.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 757
1 mars 2011 à 11:40
1 mars 2011 à 11:40
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à...
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
1 mars 2011 à 11:48
1 mars 2011 à 11:48
Bonjour,
Bonjour pijaku , Humm tu as testé ton dernier exemple ?
A+
Bonjour pijaku , Humm tu as testé ton dernier exemple ?
A+
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 757
Modifié par pijaku le 1/03/2011 à 11:56
Modifié par pijaku le 1/03/2011 à 11:56
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
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
1 mars 2011 à 12:09
1 mars 2011 à 12:09
Hummm.. autant pour moi,
C'était >> .Range("A1", AdresseAbsolue) qui me semblais bizarre, jusque maintenant j'ai toujours mis..
.Range("A1;" & AdresseAbsolue)
Mais tu as raison ça fonctionne aussi avec une virgule.
A+
C'était >> .Range("A1", AdresseAbsolue) qui me semblais bizarre, jusque maintenant j'ai toujours mis..
.Range("A1;" & AdresseAbsolue)
Mais tu as raison ça fonctionne aussi avec une virgule.
A+
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 757
1 mars 2011 à 12:14
1 mars 2011 à 12:14
Pas de souci.
Juste une petit remarque/question au passage, ta syntaxe avec & est elle "académique"? Parce que la mienne avec "," est surtout dûe à une recherche à tâtons...
Auquel cas, j'en changerais pour user davantage du "&".
Juste une petit remarque/question au passage, ta syntaxe avec & est elle "académique"? Parce que la mienne avec "," est surtout dûe à une recherche à tâtons...
Auquel cas, j'en changerais pour user davantage du "&".
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
1 mars 2011 à 17:25
1 mars 2011 à 17:25
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+
couc67
Messages postés
50
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
21 avril 2011
2 mars 2011 à 13:44
2 mars 2011 à 13:44
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
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