Macro copier coller sur 1ere cellule vide

lmylvc

XLDnaute Occasionnel
Hello les amis,

je suis en train de m'instruire en matière de macro et rencontre un pb sur l'élaboration d'une macro copier coller si quelqu'un pouvait m'aider, cela m'aiderait bien dans mes futures élaborations de projets excel

Le contexte de la problématique :

J'ai 5 lignes en D28:D32 sur la feuille1

1ere contient la date du jour

la 2e 3e 4e et 5e comprennent chacune la résultante d'une formule différente donc un résultat différent

Mon besoin :

je souhaite lancer une macro par bouton qui fera cela :

1) copier les valeurs et mises en forme des cellules D28 : D32 feuille1

2) Chercher à la droite des cellules D28 : D32 sur la feuille1 les premières cellules vides

3) Coller les valeurs et la mise en forme (bordures) des valeurs D28 : D32 sur la feuille1

vOICI LE CODE? IL MANQUE LA RECHERCHE DE LA PREMIER SERIE CELLULES VIDES A DROITE DE D28:D32

Sub Macro2()
'
' Macro2 Macro
' Macro enregistrée le 30/11/2010 par
'

'
Range("A1:A7").Select
Selection.Copy
Range("B1").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

Merci d'avance

Vincent
:D
 
Dernière édition:

lmylvc

XLDnaute Occasionnel
Re : Macro copier coller sur 1ere cellule vide

Hello

J'ai fais évoluer une macro et cela fonctionne partiellement, car il copie effectivement les cellules A 1 : A7 mais les colles sur toutes les colonnes vides à droite de la colonne A

Sub Macro2()
'
' Macro2 Macro
' Macro enregistrée le 30/11/2010
'
'
Range("A1:A7").Select
Selection.Copy

Range(Range("B1"), Range("B1").End(xlToRight)).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False


End Sub

Please Help Me

Vincent
 

Efgé

XLDnaute Barbatruc
Re : Macro copier coller sur 1ere cellule vide

Bonjour lmylvc,
En utilisant "Range("B1").End(xlToRight)" vous selectionnez vers la droite en partant de B1...
Une proposition (LstCol donne le numéro de la première colonne vide sur la ligne 1 en partant du bout):
VB:
Sub lmylvc()
LstCol = Cells(1, Columns.Count).End(xlToLeft).Column + 1
Range("A1:A7").Copy
Cells(1, LstCol).PasteSpecial Paste:=xlPasteFormats
Cells(1, LstCol).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub
Cordialement
 
Dernière édition:

lmylvc

XLDnaute Occasionnel
Re : Macro copier coller sur 1ere cellule vide

Hello Efgé

Merci pour ta réponse

J'ai inséré la macro mais un message apparait en m'indiquant erreur de compilation
variable non définie :LstCol = Cells(1, Columns.Count).End(xlToLeft).Column + 1

Quelqu'un peut-il m'indiquer quoi faire, quelle variable indiquer

Merci

Vincent

Vincent
 

Gorfael

XLDnaute Barbatruc
Re : Macro copier coller sur 1ere cellule vide

Salut lmylvc et le forum
En haut de ton module tu dois avoir "Option Explicit" : Tu as obligation de déclarer tes variables.
Code:
Sub lmylvc()
dim LstCol as integer 
LstCol = Cells(1, Columns.Count).End(xlToLeft).Column + 1
Range("A1:A7").Copy
Cells(1, LstCol).PasteSpecial Paste:=xlPasteFormats
Cells(1, LstCol).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub
A+
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro copier coller sur 1ere cellule vide

Bonsoir le fil, bonsoir le forum,

En pièce jointe un exemple avec ce code sur un bouton de commande :
Code:
Private Sub CommandButton1_Click() 'bouton "Copier"
Dim pl As Range 'déclare la variable pl (PLage)
Dim dest As Range 'déclare la variable dest (DESTination)
 
ActiveCell.Select 'enlève le focus au bouton
With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
    Set pl = .Range("D28:D32") 'définit la plage pl
    Set dest = .Range("IV28").End(xlToLeft).Offset(0, 1) 'définit la cellule de destination
End With 'fin de la prise en compte de l'onglet "Feuil1"
pl.Copy dest 'copie la plage pl dans la cellule de destination
End Sub
 

Pièces jointes

  • Imylvc_v01.xls
    33.5 KB · Affichages: 332

lmylvc

XLDnaute Occasionnel
Re : Macro copier coller sur 1ere cellule vide

Hello Efgé, Gorfael & Robert

J'ai mis en oeuvre vos solutions qui fonctionnent parfaitement
Gorfael, c'est exact il fallait retirer Option Explicit
peux tu STP mettre des commentaires sous chaque ligne de code pour que je puisse mieux comprendre le code et me débrouiller à l'avenir (sans vouloir te commander)

Robert, Pource qui est de la solution,peux tu également STP si cela n'est pas abuser de ta bonté, mettre des commentaires sous les lignes de code

Encore merci pour votre aide les gars, et b ravo pour votre engagement.

Vincent

:D:D:D
 

Efgé

XLDnaute Barbatruc
Re : Macro copier coller sur 1ere cellule vide

Re lmylvc, Bonjopur Gorfael, Bonjour Robert :),
Une explication du code:
[
VB:
Sub lmylvc2()
'On défini la variable LstCol (dont la valeur peut être comprise entre -32 768 et 32 767)
Dim LstCol As Integer
'On cherche la colonne de la première cellule vide en ligne 1
LstCol = Cells(1, Columns.Count).End(xlToLeft).Column + 1
'On copie la plage de cellule
Range("A1:A7").Copy
'On colle le format de la plage dans la cellule en ligne 1 et première cellule vide en ligne 1
Cells(1, LstCol).PasteSpecial Paste:=xlPasteFormats
'On colle les valeurs de la plage dans la cellule en ligne 1 et première cellule vide en ligne 1
Cells(1, LstCol).PasteSpecial Paste:=xlPasteValues
'On efface la selection due à la copie
Application.CutCopyMode = False
End Sub

Maintenant, si tu supprime "Option Explicit" ma première proposition va bien. (Gorfael t'a proposé la déclaration de variable dans le cas d'une Option Explicit (Merci Gorfael ;))
Cordialement
 
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : Macro copier coller sur 1ere cellule vide

Salut lmylvc et le forum
Quand tu demandes des explications par MP, pense que si toi tu connais le sujet, les dépanneurs traitent plusieurs sujet à la suite. Et savoir sur lequel tu demandes des explications...

Je ne vais pas refaire les explications brillantes de Efgé, sauf pour une
Code:
LstCol = Cells(1, Columns.Count).End(xlToLeft).Column + 1
LstCol = numéro de la colonne(.column) de la première cellule non vide (End) en partant de la cellule (cells) de la ligne 1 de la colonne numéro nombre (count) de colonnes (columns) de la feuille active (par défaut) et en allant vers la gauche (xlToLeft), auquel on ajoutera 1 (+1).

Avant la version 2007, pour l'instruction End on utilisait IV ou 256 pour les colonnes (la dernière possible). Maintenant, comme on a 2 possibilités, on laisse Excel calculer ce maximum Activesheet.columns : toutes les colonnes de la feuille active et on les compte avec Count.

Pour les lignes, on replacera 65536 par Rows.Count de la même manière.

Avec End, Excel se positionne sur la cellule non vide au niveau d'une rupture vide/non vide en partant de la cellule fixée au départ. C'est à cause de ceci qui je préfère utiliser xlUp ou xlToLeft, les deux dernières dernières cellules de la ligne/colonne étant généralement non-vide, alors que les premières peuvent être dans les 4 cas (2vides ou 2 nonvides ou 1vide et 1 non vide) induisant des réactions différentes.

Option Explicit : pour que ça apparaisse automatiquement sur les modules il faut cocher :
sous VBEditor Menu Outils>>Option onglet Éditeur : déclaration des variables obligatoires.

Perso, Excel l'a toujours coché : ça oblige à déclarer ses variables (regroupées en tête de macro, c'est préférable) : la perte de temps occasionnée est largement compensée le jour où on recherchera une panne due à une erreur de frappe.
De plus, je m'oblige à les déclarer dans le type de ce qu'elles représentent : je préfère galérer à la construction du code, plutôt qu'en dépannage, parce que tout fonctionnait correctement au moment de la construction du code.
Un exemple typique est la déclaration des lignes en Integer, qui permet de fonctionner tant que la variable n'atteint pas 32769, c'est-à-dire, pas tout de suite, juste quand vous n'avez plus le code en tête, et vous cherchez l'erreur dans les données, puisque le code était bon avant qu'une fausse manip mette un espace en ligne 65536 :D (c'est de là que vient ma calvitie).
A+
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
268
Réponses
5
Affichages
305

Statistiques des forums

Discussions
314 088
Messages
2 105 678
Membres
109 413
dernier inscrit
s.amine