Macro pour copier cellules aléatoires

Fermé
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015 - 6 juil. 2015 à 10:15
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015 - 24 juil. 2015 à 10:24
Bonjour
Etant débutant en programmation sous excel, j'aurais besoin d'aide pour une macro.
Voila le problème :
Dans le tableau d'origine sur la ligne 1 , j'ai une colonne dont la cellule indique
"maison "et je cherche à copier les cellules placées sous la cellule "maison" et les coller dans le tableau de destination .le problème est que la cellule "maison" n'est pas toujours sur la même colonne.
Merci par avance .
Cordialement
A voir également:

10 réponses

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
6 juil. 2015 à 10:31
Bonjour,

Voici une macro pour rechercher l'en-tête "maison" sur la ligne 1 de la feuille1 puis copier les données de la colonne correspondante dans la colonne A de la feuille 2.
Sub ChercheMaison()
Dim DerCol As Integer, Col As Integer
Dim C As Range
Dim DerLig As Long
With Worksheets("Feuil1")
DerCol = .Cells(1, Columns.Count).End(xlToLeft).Column
Set C = .Range(.Cells(1, 1), .Cells(1, DerCol)).Find("maison", , xlValues, xlWhole)
If Not C Is Nothing Then
DerLig = .Cells(Rows.Count, C.Column).End(xlUp).Row
C.Resize(DerLig).Copy Worksheets("Feuil2").Range("A1")
End If
End With
End Sub

A+
0
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015
6 juil. 2015 à 15:19
Bonjour
Merci de votre réponse ,mais je n'arrive pas à l'adapter à ma macro :

Workbooks.Open Filename:=ThisWorkbook.Path & "\1.xlsx"
Windows("1.xlsx").Activate
Range("AL2:AL16").Select
Range("AL16").Activate
Selection.Copy
Windows("2.xls").Activate
Range("C5").Select
ActiveSheet.Paste

Le problème c'est que le contenu le fichier d'ou j'extrai les données : 1.xlsx
change au fur et a mesure des exports et les données qui sont ici dans les cellules AL2 à AL16 peuvent se retrouver dans la colonne AM dans le fichier suivant. bref ce qui est constant c'est l'entête de colonne :" maison".
si tu peux m'aider merci par avance
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
6 juil. 2015 à 17:22
Il manque à savoir :
- la macro se trouve-t-elle dans le classeur 2.xls ?
- quel est le nom de la feuille où sont copiées les données de 1.xlsx ?
- quel est le nom de la feuille où sont collées dans 2.xlsx ?

A+
0
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015
7 juil. 2015 à 08:49
Bonjour
_La macro se trouve dans le classeur 2.xls
_la feuille de 1.xlsx est feuil1
_la feuille de 2.xlsxest feuil1
Merci par avance de votre aide
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
7 juil. 2015 à 09:40
Bonjour,

Essaie comme cela
Sub ChercheMaison()
Dim DerCol As Integer, Col As Integer
Dim C As Range
Dim DerLig As Long
Application.ScreenUpdating = False
Workbooks.Open Filename:=ThisWorkbook.Path & "\1.xlsx"
With ActiveWorkbook.Worksheets("Feuil1")
DerCol = .Cells(1, Columns.Count).End(xlToLeft).Column
Set C = .Range(.Cells(1, 1), .Cells(1, DerCol)).Find("maison", , xlValues, xlWhole)
If Not C Is Nothing Then
DerLig = .Cells(Rows.Count, C.Column).End(xlUp).Row
C.Resize(DerLig).Copy ThisWorkbook.Worksheets("Feuil1").Range("C5")
End If
End With
ActiveWorkbook.Close
End Sub

A+
0
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015
7 juil. 2015 à 10:46
Impec ça marche super bien . merci beaucoup
Par contre je voudrai affiner en ne copiant pas la 1 ere cellule de la colonne (l'entete),
j'ai essayer mais je n'y arrive pas .
Merci par avance
0
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015
7 juil. 2015 à 11:07
J'ai oublier de te dire dans la copie je ne souhaite pas copier la mise en forme ,juste les données , merci par avance.
A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
7 juil. 2015 à 11:32
Remplace cette ligne :
C.Resize(DerLig).Copy ThisWorkbook.Worksheets("Feuil1").Range("C5")

par celles-ci :
C.Offset(1).Resize(Derlig - 1).Copy
ThisWorkbook.Worksheets("Feuil1").Range("C5").Resize(Derlig - 1).PasteSpecial Paste:=xlPasteValues
0
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015
7 juil. 2015 à 11:41
Merci beaucoup
c'est super ! ça marche impec !!!
A+
0
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015
7 juil. 2015 à 14:10
j'ai encore une question , je voudrait copier juste l'entête d'une autre colonne (qui est aussi toujours sur la ligne 1 mais pas au même endroit et le coller dans la cellule A1
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
7 juil. 2015 à 15:37
Tu as déjà tous les éléments de réponse avec le code précédent.

Par contre, ton explication est incomplète.
Si tu souhaites copier l'en-tête, j'en déduis que tu ne connais pas son libellé. Quel est alors l'élément qui te permet de chercher la colonne correspondante ?

Si tu ne parviens pas à te débrouiller, reviens demander des éclaircissements.

A+
0
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015
7 juil. 2015 à 15:47
Non il s'agit de copier depuis le même classeur et la même feuille ou je cherche "maison"
mais là je cherche à copier que la 1re cellule sous l'entête "toit" et le copier dans le même tableau ou je colle les données sous" maison " le problème c'est que l'entête "toit n'est pas toujours sur la même colonne et que pour "toi" je ne veux copier qu'une cellule.
J'espère que tu as compris car je me rend compte que sont peut être dur a comprendre.
Lorsque j'adapte ton code précédent çà me copie toute la colonne .
A+
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
7 juil. 2015 à 17:38
Pour la copie, tu dois appliquer la ligne de code suivante :
C.Offset(1).Copy

C est la cellule où se trouve l'en-tête recherchée ("toit").
Offset(1) représente un décalage d'une ligne.
C.offset(1) est donc la première cellule sous l'en-tête.

Et pour le collage :
ThisWorkbook.Worksheets("Feuil1").Range("C5").End(xldown).offset(1).PasteSpecial Paste:=xlPasteValues


A+
0
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015
7 juil. 2015 à 19:58
OK
Merci beaucoup.
En plus tes explications sont au top.
Bref merci
0
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015
8 juil. 2015 à 07:34
Bonjour
Je n'arrive pas à faire fonctionner le code :
j'ai remplacer par A1 ce qui donne :
A1.Offset(1).Copy
mais la ça ne marche pas idem si je remplace C par toit.
par contre comment ça marche si toit n'est pas toujours sur la même colonne.
A+
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523 > Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015
8 juil. 2015 à 08:47
Bonjour,

Oula ! oula ! ça part en vrille ...
"C" est une variable de type Range qui représente une cellule.
Le lien entre C et la cellule qui contient la valeur "maison" est réalisé avec l'instruction
Set C =( <Plage de recherche>).Find("maison",.....)
Le lien entre C et la cellule qui contient la valeur "toit" doit être réalisé avec le même type d'instruction
Set C =( <Plage de recherche>).Find("toit",.....)

Pour me permettre de t'aider efficacement, il est souhaitable que tu joignes un fichier à ton message. Pour cela, tu peux utiliser https://www.cjoint.com/
Ensuite, reviens coller ici le lien donné par le site.

Et si tu as besoin de plus de précisions sur l'utilisation de cjoint.com : https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers#q=cjoint&cur=2&url=%2F

A+
0
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015
8 juil. 2015 à 16:12
Me revoilà
J'étais en réunion....
En fait ce que je voudrai pour la deuxième partie de mon message c'est faire comme avec ton 1er code mais en ne copiant qu'une seule cellule sous l'entête de la colonne .
en recherchant par l'entête et la colonne d'où vient la copie peux bouger.
Merci par avance
0
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015
9 juil. 2015 à 10:05
c'est bon avec tes dernières explications , j'ai réussi à l'adapter et à le metre en place .
Tout fonctionne super.
Merci pour ton aide et ta patience.
A+
0
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015
10 juil. 2015 à 08:40
Bonjour
en fait j'ai mis le fichier en lecture seul (avec mot de passe ),mais je n'arrive pas à supprimer la fenêtre d'information au lancement du fichier qui nous propose de mettre le mot de passe si on veut passer en mode modification.
j'ai essayer avec :

Private Sub Workbook_Open()
Application.DisplayAlerts = False
End Sub

Je l'ai mis dans workbook Open

Mais ça ne marche pas , si tu as une solution merci
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
10 juil. 2015 à 09:37
Tu as enregistré le fichier avec l'option lecture seule avec mot de passe pour la modification.
Cela signifie que tu veux garder la possibilité de passer en mode modification.
Si l'application ne te proposait plus de passer dans ce mode, comment ferais-tu ?

As-tu regardé le principe du fichier modèle ?

A+
0
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015
10 juil. 2015 à 10:42
Non je n'ai pas encore regardé le principe du fichier modèle , mais je pensais que l'on pouvait juste supprimer la fenêtre au lancement du fichier et qu'on avait la possibilité par la suite , d'aller dans le menu et passer en mode modif (en mettant le mot de passe).le but étant de ne plus avoir cette fenêtre au démarrage.
A+
0
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015
10 juil. 2015 à 11:04
Je viens d'essayé avec le fichier modèle ,mais les macros ne fonctionnent plus.
A+
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523 > Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015
10 juil. 2015 à 11:40
Tu as bien enregistré ton fichier comme Modèle Excel (prenant en charge les macros) (*.xltm) ?

A+
0
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015 > Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016
10 juil. 2015 à 14:14
Oui
A+
0
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015 > Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016
10 juil. 2015 à 16:23
J'ai trouvé ça et ça fonctionne si on enregistre la macro en mode création:
ça bloque l'enregistrement.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ThisWorkbook.Saved = True
ThisWorkbook.Close
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Saved = True
ThisWorkbook.Close
End Sub

En tout cas , merci pour tout.
A+
0
Caledonia66 Messages postés 20 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 24 juillet 2015 > Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016
24 juil. 2015 à 09:40
Bonjour Gyrus
Mon fichier à évolué et
1_je souhaiterait copier uniquement la cellule sous l'entête de la colonne (ne pas copier toute les valeurs sous l'entête) voici ton code qui copie toute les valeurs :

With ActiveWorkbook.Worksheets("Feuil1")
DerCol = .Cells(1, Columns.Count).End(xlToLeft).Column
Set C = .Range(.Cells(1, 1), .Cells(1, DerCol)).Find("maison", , xlValues, xlWhole)
If Not C Is Nothing Then
DerLig = .Cells(Rows.Count, C.Column).End(xlUp).Row
C.Offset(1).Resize(DerLig - 1).Copy
ThisWorkbook.Worksheets("Feuil1").Range("A5").Resize(DerLig - 1).PasteSpecial Paste:=xlPasteValues
End If
End With
2_En plus je souhaiterai ajouter la fonction ne pas copier les lignes vide lorsque l'on copie toutes les valeurs sous l'entête.

Merci par avance de ton aide
0