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
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
A voir également:
- Macro pour copier cellules aléatoires
- Formule excel pour additionner plusieurs cellules - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Copier une vidéo youtube - Guide
- Macro word - Guide
- Super copier - Télécharger - Gestion de fichiers
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
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.
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+
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
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
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
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
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+
- 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+
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
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
_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
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
7 juil. 2015 à 09:40
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+
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
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
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
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
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+
A+
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
7 juil. 2015 à 11:32
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
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
7 juil. 2015 à 11:41
Merci beaucoup
c'est super ! ça marche impec !!!
A+
c'est super ! ça marche impec !!!
A+
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
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
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
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+
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+
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
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+
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+
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
7 juil. 2015 à 17:38
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+
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
7 juil. 2015 à 19:58
OK
Merci beaucoup.
En plus tes explications sont au top.
Bref merci
Merci beaucoup.
En plus tes explications sont au top.
Bref merci
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
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+
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+
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
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+
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+
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
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
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
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
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+
Tout fonctionne super.
Merci pour ton aide et ta patience.
A+
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
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
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
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
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+
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+
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
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+
A+
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
10 juil. 2015 à 11:04
Je viens d'essayé avec le fichier modèle ,mais les macros ne fonctionnent plus.
A+
A+
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
10 juil. 2015 à 11:40
Tu as bien enregistré ton fichier comme Modèle Excel (prenant en charge les macros) (*.xltm) ?
A+
A+
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
10 juil. 2015 à 14:14
Oui
A+
A+
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
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+
ç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+
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
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
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