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 -
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
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:
- Macro pour copier cellules aléatoires
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Formule excel pour additionner plusieurs cellules - Guide
- Comment copier une vidéo youtube - Guide
- Super copier - Télécharger - Gestion de fichiers
- Verrouiller cellules excel - Guide
10 réponses
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.
A+
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+
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
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
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+
- 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+
Bonjour,
Essaie comme cela
A+
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+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Remplace cette ligne :
par celles-ci :
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
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+
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+
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+
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+
Pour la copie, tu dois appliquer la ligne de code suivante :
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 :
A+
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+
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+
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+
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
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
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+
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+
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+
A+
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+
ç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+
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
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