Macro cop/coll help en vba...

  • Initiateur de la discussion Initiateur de la discussion bloublou
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

bloublou

XLDnaute Occasionnel
Bonour à tous,

J'ai un petit souci qui se résume en 2 points :

- Je souhaite faire une macro qui me permette de cop/coller les zones en vert(uniquement des données, sans écraser les formules en orange) d'un fichier original("Maitre") à un fichier de copie ("Esclave) 😡

- Et mon 2ieme pb c'est que le fichier Esclave change tous les mois de nom, de type : P01FY10 ou P02FY10 ou P03FY10 etc...

Je joints un les fichiers en détails.

Si qq'un à une idée, je suis preneur 🙂

Merci de votre aide,

Cordialement
 

Pièces jointes

Re : Macro cop/coll help en vba...

Bonjour Kjin,

Pour faire une macro avec l'enregistreur de macro je peux faire la macro mais si le fichier change de nom tous les mois, je ne peux pas créer mon bouton affectée de la macrO, ou alors je suis obligé de changer à la main le code dans VBA.

@++
 
Re : Macro cop/coll help en vba...

Bonjour Bloublou, salut Kjin, bonjour le forum,

Je te propose la macro ci-dessous à placer dans un module du classeur maître. Elle ne fonctionne que si seuls les classeurs "maître" et "esclave" sont ouverts. Sinon un message indiquera qu'un autre classeur est ouvert et il faudra le fermer. Elle accepte tous les noms pour le classeur 'esclave" :
Code:
Sub Macro1()
Dim cl As Workbook 'déclare la variable cl (CLasseur)
Dim cm As Workbook 'déclare la variable cm (Classeur Maître)
Dim ce As Workbook 'déclare la variable ce (Classeur Esclave)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim x As Byte, y As Byte 'définit les variables x et y
 
Set cm = ThisWorkbook 'définit le classeur maître
 
For Each cl In Workbooks 'boucles sur tous les classeurs ouverts
    If cl.Name <> "PERSO.XLS" Then GoTo suite 'si il existe un classeur "PERSO.XLS", va à l'étiquette "suite"
Next cl 'prochain classeur de la boucle
 
If Workbooks.Count > 2 Then 'condition : si le nombre de classeurs ouverts est supérieur à 2
    MsgBox "Vous devez fermer tous les autres classeurs !": Exit Sub 'message, sort de la procédure
End If 'fin de la condition
 
For Each cl In Workbooks 'boucles sur tous les classeurs ouverts
    If cl.Name <> cm.Name Then 'condition : si ne classeur n'est pas le classeur maître
        Set ce = cl 'définit le classeur esclave
        Exit For 'sort de la boucle
    End If 'fin de la condition
Next cl 'prochain classeur de la boucle
 
GoTo after 'va à l'étiquette "after"
 
suite: 'étiquette
 
If Workbooks.Count > 3 Then 'condition : si le nombre de classeurs ouverts est supérieur à 3
    MsgBox "Vous devez fermer tous les autres classeurs !": Exit Sub 'message, sort de la procédure
End If 'fin de la condition
 
For Each cl In Workbooks 'boucles sur tous les classeurs ouverts
    If cl.Name <> "PERSO.XLS" Then 'si le nom du classeur est différent de "PERSO.XLS"
        If cl.Name <> cm.Name Then 'condition : si ne classeur n'est pas le classeur maître
            Set ce = cl 'définit le classeur esclave
            Exit For 'sort de la boucle
        End If 'fin de la condition
    End If
Next cl
 
after: 'étiquette
 
With cm.Sheets("Feuil1") 'prend en compte le classeur maître,onglet "Feuil1"
    Set pl = .Range("B2") 'définit la plage pl
    y = 2 'définit la variable y
    For x = 1 To 4 'boucle sur 4 groupes
        Set pl = Application.Union(pl, .Range(.Cells(2, y), .Cells(7, y + 2))) 'redéfinit la plage pl
        Set pl = Application.Union(pl, .Range(.Cells(10, y), .Cells(11, y + 2))) 'redéfinit la plage pl
        y = y + 4 'redéfinit la variable y
    Next x 'prochain groupe
End With 'fin de la prise en compte du classeur maître, onglet "Feuil1"
 
For Each cel In pl 'boucle sur chaque cellule cel de la plage pl
    ce.Sheets("Feuil1").Range(cel.Address).Value = cel.Value 'récupère dans le classeur esclave la valeur de la cellule cel
Next cel 'prochaine cellule de la boucle
ce.Sheets("Feuil1").Calculate'Calcule (pour mettre à jour les formules)
End Sub
 
Re : Macro cop/coll help en vba...

Bonjour Bloublou, bonjour le forum,

Une petit erreur (en rouge) à corriger. Remplacer :
Code:
For Each cl In Workbooks 'boucles sur tous les classeurs ouverts
    If cl.Name [COLOR=red]<>[/COLOR] "PERSO.XLS" Then GoTo suite 'si il existe un classeur "PERSO.XLS", va à l'étiquette "suite"
Next cl 'prochain classeur de la boucle
par :
Code:
For Each cl In Workbooks 'boucles sur tous les classeurs ouverts
    If cl.Name [COLOR=red]=[/COLOR] "PERSO.XLS" Then GoTo suite 'si il existe un classeur "PERSO.XLS", va à l'étiquette "suite"
Next cl 'prochain classeur de la boucle
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

D
Réponses
0
Affichages
685
D
B
Réponses
7
Affichages
2 K
borisforever
B
M
  • Question Question
Réponses
0
Affichages
1 K
Mirguy23
M
W
Réponses
18
Affichages
8 K
Winniechips
W
R
Réponses
5
Affichages
1 K
ricard678
R
L
Réponses
4
Affichages
2 K
Line_
L
Retour