Macro trouver solution plus simple
Résolu/Fermé
james405
Messages postés
154
Date d'inscription
mercredi 27 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2014
-
Modifié par jipicy le 4/05/2010 à 10:18
james405 Messages postés 154 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 10 juin 2014 - 5 mai 2010 à 09:39
james405 Messages postés 154 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 10 juin 2014 - 5 mai 2010 à 09:39
A voir également:
- Macro trouver solution plus simple
- Trouver adresse mac - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Iphone 14 simple - Guide
- Macro word - Guide
- Comment trouver le mot de passe wifi sur son téléphone - Guide
7 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
Modifié par pijaku le 4/05/2010 à 10:22
Modifié par pijaku le 4/05/2010 à 10:22
Salut,
Ta solution ici :
Boucler sur tous les classeurs ouverts et dans chaque classeur boucler sur toutes les feuilles.
Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --
Ta solution ici :
Boucler sur tous les classeurs ouverts et dans chaque classeur boucler sur toutes les feuilles.
Sub BouclePlagesCellules() 'Définit une variable qui va représenter un classeur Dim Wb As Workbook 'Définit une variable qui va représenter une feuille de calcul Dim Ws As Worksheet 'Définit une variable qui va représenter une cellule Dim Cell As Range 'Boucle sur chaque classeur de l'application Excel For Each Wb In Application.Workbooks 'Boucle sur chaque feuille de chaque classeur For Each Ws In Wb.Worksheets 'Boucle sur chaque cellule de la plage A1:A10 For Each Cell In Ws.Range("A1:A10") 'Si la cellule contient la valeur 3, on multiplie la valeur par 2 'ici ça n'est qu'un exemple. Tu remplaces par .copy vers Classeur(4)... If Cell.Value = 3 Then Cell.Value = Cell.Value * 2 Next Cell Next Ws Next Wb End Sub
Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --
james405
Messages postés
154
Date d'inscription
mercredi 27 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2014
4 mai 2010 à 11:00
4 mai 2010 à 11:00
Bonjour PIjaku,
Je viens d'essayer avec cela
Sub mo()
'Définit une variable qui va représenter un classeur
Dim Wb As Workbook
'Définit une variable qui va représenter une feuille de calcul
Dim Ws As Worksheet
'Boucle sur chaque classeur de l'application Excel
For Each Wb In Application.Workbooks
'Boucle sur chaque feuille de chaque classeur
For Each Ws In Wb.Worksheets
'Boucle sur chaque cellule de la plage A1:A10
Range("A1:U400").Copy
Windows("synthèse.xls").Activate
Sheets("Feuil3").Select
Range("A15").Activate
Selection.Paste
Next Ws
Next Wb
End Sub
et cela ne fonctionne pas (je ne suis pas très fort en excel). la question que je me pose, c'est est ce qu'avec cette macro, le contenue de mes onglet (pour les cellules A1 U400) vont bien se coller les uns à la suite de l'autre sur mon onglet Feuil3??
Merci pour ton aide,
James
Je viens d'essayer avec cela
Sub mo()
'Définit une variable qui va représenter un classeur
Dim Wb As Workbook
'Définit une variable qui va représenter une feuille de calcul
Dim Ws As Worksheet
'Boucle sur chaque classeur de l'application Excel
For Each Wb In Application.Workbooks
'Boucle sur chaque feuille de chaque classeur
For Each Ws In Wb.Worksheets
'Boucle sur chaque cellule de la plage A1:A10
Range("A1:U400").Copy
Windows("synthèse.xls").Activate
Sheets("Feuil3").Select
Range("A15").Activate
Selection.Paste
Next Ws
Next Wb
End Sub
et cela ne fonctionne pas (je ne suis pas très fort en excel). la question que je me pose, c'est est ce qu'avec cette macro, le contenue de mes onglet (pour les cellules A1 U400) vont bien se coller les uns à la suite de l'autre sur mon onglet Feuil3??
Merci pour ton aide,
James
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
4 mai 2010 à 12:19
4 mai 2010 à 12:19
le contenue de mes onglet (pour les cellules A1 U400) vont bien se coller les uns à la suite de l'autre sur mon onglet Feuil3?? non. Ils vont tous se coller en A15.
Dans ton code remplace :
par :
Dans ton code remplace :
For Each Ws In Wb.Worksheets 'Boucle sur chaque cellule de la plage A1:A10 Range("A1:U400").Copy Windows("synthèse.xls").Activate Sheets("Feuil3").Select Range("A15").Activate Selection.Paste Next Ws
par :
For Each Ws In Wb.Worksheets Range("A1:U400").Copy Windows("synthèse.xls").Sheets("Feuil3").Range("A65536").End(xlUp).Offset(1, 0) Next Ws
james405
Messages postés
154
Date d'inscription
mercredi 27 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2014
4 mai 2010 à 13:49
4 mai 2010 à 13:49
d'accord je vais essayer comme ca, juste pour l'info
End(xlUp).Offset(1, 0) a quoi servent ces deux mots ?
Merci encore pijaku !!
End(xlUp).Offset(1, 0) a quoi servent ces deux mots ?
Merci encore pijaku !!
james405
Messages postés
154
Date d'inscription
mercredi 27 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2014
4 mai 2010 à 14:00
4 mai 2010 à 14:00
méthode non géré par cet objet .. J'ai bien vérifier les noms et a l'endroit mis en gras ici, il me met erreur execution 138 :
Sub mo()
Dim Wb As Workbook
Dim Ws As Worksheet
Dim cell As Range
For Each Wb In Application.Workbooks
For Each Ws In Wb.Worksheets
Range("A7:U200").Copy Windows("synthèse.xls").Sheets("Feuil3").Range("A65536").End(xlUp).Offset(1, 0)
Next Ws
Next Wb
End Sub
Me serais je trompé autre part?
Sub mo()
Dim Wb As Workbook
Dim Ws As Worksheet
Dim cell As Range
For Each Wb In Application.Workbooks
For Each Ws In Wb.Worksheets
Range("A7:U200").Copy Windows("synthèse.xls").Sheets("Feuil3").Range("A65536").End(xlUp).Offset(1, 0)
Next Ws
Next Wb
End Sub
Me serais je trompé autre part?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
Modifié par pijaku le 4/05/2010 à 14:21
Modifié par pijaku le 4/05/2010 à 14:21
Non ça doit venir de moi. Remplacer (sans conviction) Windows par WorkBooks :
ActiveCell.Offset(-3, 5).Value renvoie la valeur contenue dans la cellule située 3 lignes au dessus et 5 colonnes à droite de la cellule active
ActiveCell.Offset(1, -3).Value renvoie la valeur contenue dans la cellule située 1 ligne au dessous et 3 colonnes à gauche de la cellule active
Range("A7:U200").Copy WorkBooks("synthèse.xls").Sheets("Feuil3").Range("A65536").End(xlUp).Offset(1, 0)
("A65536").End(xlUp) :nous donne la dernière cellule non vide de la colonne A (en fait, VBA part de la dernière cellule colonne A (A65536) et remonte (xlUp) jusqu'à ce qu'il trouve une donnée).
Offset(ligne, colonne) :"décale" de x ligne, x colonne...
ActiveCell.Offset(-3, 5).Value renvoie la valeur contenue dans la cellule située 3 lignes au dessus et 5 colonnes à droite de la cellule active
ActiveCell.Offset(1, -3).Value renvoie la valeur contenue dans la cellule située 1 ligne au dessous et 3 colonnes à gauche de la cellule active
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
james405
Messages postés
154
Date d'inscription
mercredi 27 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2014
4 mai 2010 à 14:27
4 mai 2010 à 14:27
Cette fois pas d'erreur, mais ca ne fait absolument rien. calcul 1 seconde et fini la macro sans rien faire. pas de .paste manquant?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
Modifié par pijaku le 4/05/2010 à 14:42
Modifié par pijaku le 4/05/2010 à 14:42
non pas de paste manquant. Mais si tu veux copier quelque chose, il convient de l'activer d'abord... Donc effectivement, il ne pouvait rien se passer dans ton cas. Ta macro dit :
Pour chaque classeur ouvert
Pour chaque feuille de ce classeur
copie le range(gnagnagna) du classeur actif et colle le dans le classeur(synthèse)Feuille(3) etc...
Ca ne peux pas fonctionner puisque le classeur actif est... le classeur(synthèse)... Ceci est mieux déjà :
Pour chaque classeur ouvert
Pour chaque feuille de ce classeur
copie le range(gnagnagna) du classeur actif et colle le dans le classeur(synthèse)Feuille(3) etc...
Ca ne peux pas fonctionner puisque le classeur actif est... le classeur(synthèse)... Ceci est mieux déjà :
Sub mo() Dim Wb As Workbook Dim Ws As Worksheet Dim cell As Range For Each Wb In Application.Workbooks Wb.Activate For Each Ws In Wb.Worksheets Ws.Activate Range("A7:U200").Copy Workbooks("synthèse.xls").Sheets("Feuil3").Range("A65536").End(xlUp).Offset(1, 0) Next Ws Next Wb End Sub
james405
Messages postés
154
Date d'inscription
mercredi 27 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2014
4 mai 2010 à 15:02
4 mai 2010 à 15:02
HuHu ca marche !!!
deux petites questions : - Si par la suite je protèle certaine feuille ou un copier/coller sera a faire , cela posera t il un problème?
- Existe t il un moyen d'exclure certains onglet des classeurs??
Merci pour tout Pijaku
deux petites questions : - Si par la suite je protèle certaine feuille ou un copier/coller sera a faire , cela posera t il un problème?
- Existe t il un moyen d'exclure certains onglet des classeurs??
Merci pour tout Pijaku
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
4 mai 2010 à 16:03
4 mai 2010 à 16:03
1- oui cela posera problème... Mais tu pourras le contourner en déprotégeant...
2- oui. Exemple : copier toutes les feuilles sauf celles nommées "Feuil2" :
Sub mo()
Dim Wb As Workbook
Dim Ws As Worksheet
Dim cell As Range
For Each Wb In Application.Workbooks
Wb.Activate
For Each Ws In Wb.Worksheets
If Ws.Name <> "Feuil2" Then
Ws.Activate
Range("A7:U200").Copy Workbooks("synthèse.xls").Sheets("Feuil3").Range("A65536").End(xlUp).Offset(1, 0)
End If
Next Ws
Next Wb
End Sub
2- oui. Exemple : copier toutes les feuilles sauf celles nommées "Feuil2" :
Sub mo()
Dim Wb As Workbook
Dim Ws As Worksheet
Dim cell As Range
For Each Wb In Application.Workbooks
Wb.Activate
For Each Ws In Wb.Worksheets
If Ws.Name <> "Feuil2" Then
Ws.Activate
Range("A7:U200").Copy Workbooks("synthèse.xls").Sheets("Feuil3").Range("A65536").End(xlUp).Offset(1, 0)
End If
Next Ws
Next Wb
End Sub
james405
Messages postés
154
Date d'inscription
mercredi 27 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2014
4 mai 2010 à 16:31
4 mai 2010 à 16:31
ok! pour le 2. ne connaissant pas le nom des onglets a l'avance, je ne pourrai pas utiliser cette méthode, par contre vu que je diffuse l'outil, peut on envisager soit de mettre un "espion" ds les feuilles qui m'interresseront pour ma synthèse, soit colorer les onglet et ne copier que ceux ci ou une autre méthode qqc?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
4 mai 2010 à 16:40
4 mai 2010 à 16:40
tout est envisageable...
Exemple :
Tester le contenu d'une cellule :
Exemple :
Tester le contenu d'une cellule :
If Range("AA1").Value = "espion" Then
james405
Messages postés
154
Date d'inscription
mercredi 27 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2014
4 mai 2010 à 16:53
4 mai 2010 à 16:53
!!!!!!!!!! J'avais pas penser à ca, je partais deja dans les codes des pages etc ....
Je pense partir sur la coloration intérieur de la cellule A8 qui est la seule verte !!
Sub mo()
Dim Wb As Workbook
Dim Ws As Worksheet
Dim cell As Range
For Each Wb In Application.Workbooks
Wb.Activate
For Each Ws In Wb.Worksheets
If range("A8").interior.colorindex=10 then
Ws.Activate
Range("A7:U200").Copy Workbooks("synthèse.xls").Sheets("Feuil3").Range("A65536").End(xlUp).Offset(1, 0)
End If
Next Ws
Next Wb
End Sub
Mais ca marche pas !!
je pense qu'il me manque then qqch, mais je ne sais pas quoi
En cas merci pour ton aide pijaku !!!
Je pense partir sur la coloration intérieur de la cellule A8 qui est la seule verte !!
Sub mo()
Dim Wb As Workbook
Dim Ws As Worksheet
Dim cell As Range
For Each Wb In Application.Workbooks
Wb.Activate
For Each Ws In Wb.Worksheets
If range("A8").interior.colorindex=10 then
Ws.Activate
Range("A7:U200").Copy Workbooks("synthèse.xls").Sheets("Feuil3").Range("A65536").End(xlUp).Offset(1, 0)
End If
Next Ws
Next Wb
End Sub
Mais ca marche pas !!
je pense qu'il me manque then qqch, mais je ne sais pas quoi
En cas merci pour ton aide pijaku !!!
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
Modifié par pijaku le 5/05/2010 à 09:25
Modifié par pijaku le 5/05/2010 à 09:25
Salut,
Hum hum... Tu n'auras donc pas retenu la leçon.
Même erreur qu'un post précédent.
Il faut d'abord rendre la feuille active :
Hum hum... Tu n'auras donc pas retenu la leçon.
Même erreur qu'un post précédent.
Il faut d'abord rendre la feuille active :
For Each Wb In Application.Workbooks Wb.Activate For Each Ws In Wb.Worksheets Ws.Activate If range("A8").interior.colorindex=10 then
james405
Messages postés
154
Date d'inscription
mercredi 27 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2014
4 mai 2010 à 15:27
4 mai 2010 à 15:27
Enfin je pense plus par exemple a copier uniquement les onglets qui contiennet la lettre A par exemple