[Réglé] double paramétrage noms de feuilles dans boucle VBA

dedef

XLDnaute Occasionnel
Bonjour,

Je suis en train d'essayer de faire une macro pour copier coller des valeurs entre 2 fichiers contenant chacun plusieurs feuilles et situés dans des dossiers différents :
dossier A qui contient :
fichier X contenant feuilles a, b, c, ...
et dossier B qui contient :
fichier Y contenant feuilles avw, bvw, cvw, ... (le même nom que les feuilles du fichier X avec des caractères en plus, toujours les mêmes)

Ma macro se lance depuis le fichier Y.

Je sais faire une boucle classique : For n = LBound(feuilles) To UBound(feuilles). Par contre, je ne sais pas comment paramétrer le fichier de destination.

Il faut que j'arrive à :
copier valeur de la feuille avw du fichier Y
coller valeur sur la feuille a du fichier X
copier valeur de la feuille bvw du fichier Y
coller valeur sur la feuille b du fichier X
copier valeur de la feuille cvw du fichier Y
coller valeur sur la feuille c du fichier X
... (j'ai plus de 20 feuilles)

Quelqu'un peut-il me dire si c'est possible?

Merci d'avance.
 
Dernière édition:

nyko283

XLDnaute Occasionnel
Re : double paramétrage noms de feuilles dans boucle VBA

Bonjour dedef,

C'est tout à fait possible, te voilà rassurer....

trèves de plaisanterie

alors pour une plage de données dans chaque feuille ( ou toute la feuille voir comments dans le code) tu peut utiliser ce code :
VB:
Sub copieFeuillesFichiers()
Dim wbk As Workbook, i As Integer
Set wbk = Workbooks.Open("C:\Documents\X.xls") ' ouvre ton fichier x modifie selon les besoins
For i = 1 To wbk.Sheets.Count ' boucle sur toutes les feuilles du fichier x
    wbk.Sheets(i).Range("a2:z30").Copy 'copie les données selon une plage ' pour copier toute la feuille remplace Range("A2:Z30") par Cells
    ThisWorkbook.Sheets(wbk.Sheets(i).Name & "vw").Range("A2").PasteSpecial _ ' A2 = point de départ du collage
    Paste:=xlPasteValues ' colle les valeur dans la plages spécifiés
Next i
Application.CutCopyMode = False ' evite le message du presse papier sur la conservation des données copier
wbk.Close False ' ferme le classeur X
Set wbk = Nothing
End Sub
 
Dernière édition:

dedef

XLDnaute Occasionnel
Re : double paramétrage noms de feuilles dans boucle VBA

Merci pour ton aide,

J'ai quand même 2 soucis, d'après ce que je comprends, :
- mon copier, ne concerne pas toutes les feuilles du fichier (et si je regarde dans VBA, elles n'ont pas toutes un numéro qui se suit!)
- mon copier se fait à partir d'une feuille ayant le nom long pour aller vers une feuille ayant le nom court : peut-on retirer des caractères?
 

nyko283

XLDnaute Occasionnel
Re : double paramétrage noms de feuilles dans boucle VBA

Alors

Pour les feuilles s'il n'y a pas trop de feuille a "sauter" tu peux rajouter une condition
j'ai rajouter la fonction left qui permet de couper une chaine de texte en partant de la gauche et de ne garder que le nbre de caractère demande.
VB:
Sub copieFeuillesFichiers()
Dim wbk As Workbook, i As Integer
Set wbk = Workbooks.Open("C:\Documents\X.xls") 
For i = 1 To wbk.Sheets.Count 
if not Wbk.sheets(i).name = "Menu" or not Wbk.sheets(i).name = "Saisie" or not Wbk.sheets(i).name = "Paramètres" then ' si l'une de ces 3 feuilles le copier coller n'aura pas lieu
   wbk.Sheets(i).Range("a2:z30").Copy 
   ThisWorkbook.Sheets(left(wbk.Sheets(i).Name,1).Range("A2").PasteSpecial _ ' recupere le 1er caractere du nom de la feuille
   Paste:=xlPasteValues 
end if
Next i
Application.CutCopyMode = False 
wbk.Close False 
Set wbk = Nothing
End Sub
 

dedef

XLDnaute Occasionnel
Re : double paramétrage noms de feuilles dans boucle VBA

Mon problème était encore un peu plus compliqué, car il me fallait sauter des feuilles sans règle autre que le nom. Par ailleurs le nombre de caractères du nom des fichiers n'est pas constant, et .
Mais à partir de tes 2 réponses, et du peu que je connais de VBA, j'ai réussi à m'en sortir.

Encore merci pour tout.
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 907
Membres
101 836
dernier inscrit
karmon