Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/09/2011, 10h25   #1
Invité régulier
 
Inscription : mai 2004
Messages : 61
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 61
Points : 7
Points : 7
Par défaut choisir les cellules dans lequelles faire le collage

Bonjour,

J'ai écrit une macro qui me permet de copier, sous condition, le contenu de cellules et de les coller dans un autre fichier excel.

Exemple de ce que fait la macro :

Dans le fichier2.xls => si je modifie les données de la cellule F12, je copie les données des cellules A12 et D12, puis j'ouvre le fichier1.xls

Dans le fihier1.xls je "cherche" la première ligne dispo et j'y colle le contenu des données A12 et D12 du fichier1.xls. Si la première ligne libre était la ligne 20, les données sont copiées dans les cellules A20 et B20.

Ce que je voudrais :
Pouvoir coller les données en C20 et E20.

Je n'y arrive pas du tout... Est-ce que l'un(e) d'entre vous pourrait m'aider ?

Merci d'avance !
Alfred

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Sub Worksheet_change(ByVal Target As Range)
 
'On déclare les variables ligneLong et ligneCourt
Dim ligneLong, ligneCourt
 
If Target.Column = 12 Then
    'On récupère l'adresse de la ligne modifiée
    ligneLong = Target.Address
    'On coupe l'adresse pour ne garder que le numéro de la ligne
    ligneCourt = Mid(ligneLong, 4)
    'On copie les cellules dont on a besoin dans la ligne précédement sélecionnée
    Range("A" & ligneCourt & ",D" & ligneCourt).Copy
 
    'On ouvre le fichier dans lequel on veut coller les données copiées
    Workbooks.Open ThisWorkbook.Path & "\Fichier1.xls"
    'On sélectionne la première ligne libre (sans données)
    With Sheets("Feuil1").UsedRange: NoDeLaDernLig = .Cells(.Rows.Count, .Columns.Count).Row: End With
    Sheets("Feuil1").Cells(NoDeLaDernLig + 1, 1).Select
 
    'On colle les données dans la page active
    ActiveSheet.Paste
 
    'On enregistre et on ferme la page active
    ActiveWorkbook.Save
    ActiveWorkbook.Close
 
End If
 
End Sub
Alfred23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 10h45   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 894
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 894
Points : 7 178
Points : 7 178
Bonjour,

La ligne de code ci dessous sélectionne la prochaine cellule se trouvant en A
Code :
Sheets("Feuil1").Cells(NoDeLaDernLig + 1, 1).Select
pour coller en C
Code :
Sheets("Feuil1").Cells(NoDeLaDernLig + 1, 3).Select
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/09/2011, 11h40   #3
Invité régulier
 
Inscription : mai 2004
Messages : 61
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 61
Points : 7
Points : 7
Merci pour ta réponse Jérôme !

J'avais effectivement compris que ce chiffre était le numéro de la colonne.

Sais-tu comment on peut sélectionner plusieurs colonnes ?

Merci d'avance.
Alfred
Alfred23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 13h28   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 894
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 894
Points : 7 178
Points : 7 178
Pour selectionner les colonnes C à E
Code :
Range("C" & NoDeLaDernLig  & ":E" & NoDeLaDernLig).Select
A noter que pour coller, il n'est pas utile de sélectionner une plage, seule la première cellule suffit
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 17h36   #5
Invité régulier
 
Inscription : mai 2004
Messages : 61
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 61
Points : 7
Points : 7
Merci pour ta réponse.

Je me suis mal exprimé : je ne veut pas sélectionner une plage, mais plusieurs colonnes distinctes.

EX. : sélectionner les colonnes C et E. Mais pas les colonnes C à E.

Merci pour ton aide.
Alfred
Alfred23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 19h28   #6
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 894
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 894
Points : 7 178
Points : 7 178
Penses a utiliser l'enregistreur de macro quand tu bloques sur ce genre de code
il t'aurait donné

Code :
Range("C:C,E:E").Select
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 10h17   #7
Invité régulier
 
Inscription : mai 2004
Messages : 61
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 61
Points : 7
Points : 7
Bonjour Jérôme et merci pour ta réponse.

J'utilise en effet l'enregistreur de macro pour trouver des idées, mais là ça ne colle pas à ce que je veux faire...

En fait, il faut que je modifie la ligne suivante :
Code :
Sheets("Feuil1").Cells(NoDeLaDernLig + 1, 1).Select
Cette ligne sélectionne la colonne A.
Je voudrais sélectionner la colonne A et la colonne D.

Merci pour ton aide.
Alfred
Alfred23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 10h42   #8
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 894
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 894
Points : 7 178
Points : 7 178
IL serait beaucoup plus simple de sélectionner chaque plage à copier et à coller individuellement plutôt que d'essayer de faire cela d'une seule coup.

A noter que si je copie les plages A1:A10 et C1:C10.
Lors de la copie, ces plages deviennent A1:A10 et B1:B10 car excel ne copie pas en laissant une colonne vide
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 11h11   #9
Invité régulier
 
Inscription : mai 2004
Messages : 61
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 61
Points : 7
Points : 7
OK. Merci Jérôme.

Je ne savais pas qu'excel ne copiait pas en laissant des colonnes vides.

Je stress un maximum, parce que là, je ne vois plus du tout comment m'en sortir.... Et il faut que je règle ça pour mardi.

Je vais devoir tout reprendre à zéro ?


Bon, il faut déjà que je me calme, après j'analyseraimieux les choses...

Merci.
Alfred
Alfred23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 11h54   #10
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 894
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 894
Points : 7 178
Points : 7 178
Si le but est uniquement de transférer les valeurs, le copier coller n'est pas le plus adapté.

Code :
1
2
3
4
5
6
7
8
9
10
 
dim Wrk as Workbook
 
'On ouvre le classer dans une variable objet Wrk
Set Wrk = Application.Workbooks.Open ThisWorkbook.Path & "\Fichier1.xls"
 
Wrk.Sheets("Feuil1").Range("A" & NoDeLaDernLig + 1).Value = Range("A" & ligneCourt).Value 
Wrk.Sheets("Feuil1").Range("E" & NoDeLaDernLig + 1).Value = Range("C" & ligneCourt).Value
 
Wrk.Close
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h22.


 
 
 
 
Partenaires

Hébergement Web