Macro pour copier cellules aléatoires

Caledonia66 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
Caledonia66 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   526
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   526
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   526
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   526
 
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   Statut Membre Dernière intervention  
 
Merci beaucoup
c'est super ! ça marche impec !!!
A+
0
Caledonia66 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   526
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   526
 
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   Statut Membre Dernière intervention  
 
OK
Merci beaucoup.
En plus tes explications sont au top.
Bref merci
0
Caledonia66 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   526 > Caledonia66 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   526
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   526 > Caledonia66 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   > Gyrus Messages postés 3334 Date d'inscription   Statut Membre Dernière intervention  
 
Oui
A+
0
Caledonia66 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   > Gyrus Messages postés 3334 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   > Gyrus Messages postés 3334 Date d'inscription   Statut Membre Dernière intervention  
 
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