copier coller valeur

N

Nadine

Guest
Bonjour à tous

J'ai un enorme fichier ou je rentre beaucoup de donnees dont j'ai besoin,je veux garder les chiffres de certaine colonne j'ai donc cree des macros qui me permettent d'un seul click de copier coller les valeurs mais je vais surement arriver à saturation car je cree une macro pour chaque colonne ou je dois copier les donnees.
voici le code de chaque macro

Sub CopierCollerSansLiaison2()

Application.ScreenUpdating = False

Worksheets("hebdo2").Activate

ActiveSheet.Range("p3:p7").Copy
ActiveSheet.Range("s3").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

ActiveSheet.Range("q3").Select
Range("q3").ClearContents

Application.ScreenUpdating = True

End Sub

Je vous l'ai raccourci car il y a beaucoup de plage à copier à chaque fois

j'ai donc aussi cree autant de boutons qui lance les macros que de colonne à remplir et il y a 32 colonne à remplir !!!!!

Ma question est y a t-il possibilité de ne creer qu'une seule macro qui dit que lorsqu'une colonne est remplie de passer à l'autre?

Je remercie toute personne qui pourras me répondre

Bonne journée à tous

Nadine
 
A

Alexis

Guest
Bonjour Nadine

Je suis pas sur d'être le plus apte à répondre, mais poursuoi ne pas créer une fonction copier coller et l'appeler à chaque fois qu'on atteint la dernière cellule (si celles-ci se "remplissent dans l'ordre"),

Bonne journée à tous
Alexis
 
V

Valérie

Guest
Slt Nadine et au forum,

J'avais fait qque chose d'à peu prés similaire dans un post précédent mais comme je ne sais manipuler QUE EXCEL je te ferai pas de lien je sais pas !!!

Le principe étant de faire une procédure dans laquelle tu passes les valeurs variables de ton code. Ici les cellule à copier et la cellule de destination de la copie.

Sub CopierCollerSansLiaison2()

Application.ScreenUpdating = False
Worksheets("hebdo2").Activate

With ActiveSheet
COPIEU_COLLEU .Range("p3:p7"), .Range("S3")
'Tu peux ici placer tes 31 autres ligne de copiage
'Ou refaire cette macro 31 fois avec tes plages de cellules différentes
.Range("q3").ClearContents
End With

Application.ScreenUpdating = True
En Sub

Sub COPIEU_COLLEU(ACopier As Range, Ou As Range)
ACopier.Copy
Ou.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End Sub


Le gros avantage étant que si tu souhaites ajouter une autre action à faire sur tes 32 colonnes tu peux le faire en une seule ligne de code dans COPIEU_COLLEU. Voilà j'ai tout dit du moins pour ce que j'avais à dire d'interressant !!

@+
valérie
 
@

@+Thierry

Guest
Salut les Filles et Alexis et tout le forum.

Pour Valérie, très bien vu ton COPIEU_COLLEU, non seulement marrant dans son nom mais très efficace.

Pour Nadine, on peut faire plein de trucs... Par exemple ceci avec DEUX InputBox demandant la colonne Source puis la Colonne Cible :
Sub CopieMethode1()
Dim ColSource As String
Dim ColCible As String
Dim RowSource As Integer
Dim PlageSource As Range
Dim Cell As Range
Dim i As Integer
ColSource = InputBox("Taper la lettre de la colonne à copier", "COLONNE SOURCE", "A")
ColCible = InputBox("Taper la lettre de la colonne de destination", "COLONNE CIBLE", "B")
RowSource = Sheets("Sheet1").Cells(Rows.Count, ColSource).End(xlUp).Row
Set PlageSource = Sheets("Sheet1").Range(ColSource & "1:" & ColSource & RowSource)
i = 1
For Each Cell In PlageSource
Sheets("Sheet1").Range(ColCible & i) = Cell
i = i + 1
Next Cell
End Sub


Ou encore ceci avec UNE seule InputBox qui ne demandera que la colonne de destination (la Colonne Source étant la cellule Active, on notera au passage comment on récupère la Lettre de la colonne...) :
Sub CopieMethode2()
Dim ColSource As String
Dim ColCible As String
Dim RowSource As Integer
Dim PlageSource As Range
Dim Cell As Range
Dim i As Integer

ColSource = Left$(ActiveCell.Address(0, 0), (ActiveCell.Column < 27) + 2)
ColCible = InputBox("Taper la lettre de la colonne de destination", "COLONNE CIBLE", "B")

RowSource = Sheets("Sheet1").Cells(Rows.Count, ColSource).End(xlUp).Row

Set PlageSource = Sheets("Sheet1").Range(ColSource & "1:" & ColSource & RowSource)
i = 1
For Each Cell In PlageSource
Sheets("Sheet1").Range(ColCible & i) = Cell
i = i + 1
Next Cell
End Sub


C'est deux exemples n'utilisent pas la méthode copie... Mais on peut le faire aussi, comme çà je mets en pratique ce COPIEU_COLLEU sympa !! lol et comme on parle de Colonnes Entières je ne me casse plus la tête avec les Row....

Donc, idem que la méthode2, la cellule Active détermine la Colonne de départ, et une InputBox demande la Colonne de destination.

Sub CopieMethode3()
Dim ColSource As String
Dim ColCible As String
ColSource = Left$(ActiveCell.Address(0, 0), (ActiveCell.Column < 27) + 2)
ColCible = InputBox("Taper la lettre de la colonne de destination", "COLONNE CIBLE", "B")
With Sheets("sheet1")
COPIEU_COLLEU .Columns(ColSource), .Columns(ColCible)
End With
End Sub

Sub COPIEU_COLLEU(ACopier As Range, Ou As Range)
ACopier.Copy
Ou.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End Sub


En fait ce ne sont que différentes facons d'aborder le truc... On pourrait carrément avoir un UserForm de Gestion des colonnes à copier... Enfin faut voir les besoins de Nadine...

Voilà, bon appétit à tout le monde
@+Thierry
 
Dernière modification par un modérateur:

Discussions similaires

Statistiques des forums

Discussions
314 646
Messages
2 111 528
Membres
111 190
dernier inscrit
clmtj