[MACRO] Créer un onglet nommé avec le contenu d'une cellule
Bonjour,
J'ai une base de données qui me sert à initialiser des fiches d'informations dans un nouvel onglet à chaque fois que je lances ma macro.
Le souci est que lorsque j'enregistre la macro, le nom de l'onglet est pris en compte plutôt que la case et la feuille dans laquelle je suis allé chercher le nom, ce qui donne dans le VBA ceci :
Sheets.Add
Sheets("Feuil1").Select
Sheets("Feuil1").Name = "Entreprise1"
J'aimerais donc trouver une solution me permettant de remplacer le "Entreprise1" par une cellule dans laquelle je rentrerai le nom moi-même avant de lancer la macro et que je puisses initialiser l'onglet selon une cellule donnée de mon premier onglet.
La 2eme difficulté serait de pouvoir aller chercher des infos différentes dans mon onglet de base de donnée pour ensuite ramener ces données dans le ouvel onglet "Entreprise1" au lieu de devoir modifier ma macro comme cet exemple :
Sheets("Entreprise1").Select
J'aimerais bien que ça ne prenne en compte que la cellule que je remplirai au début avant de lancer ma macro pour que quel que soit le nom que je mettes dans la cellule, la macro puisse faire des allées et retours entre les feuilles... Avec quelque chose qui ressemblerait à ceci :
Sheets("BDD NE PAS TOUCHER").Select
Sheets(Sheets("CHOIX DE L ENTREPRISE"(A1)).Select
Sheets("BDD NE PAS TOUCHER").Select
Sheets(Sheets("CHOIX DE L ENTREPRISE"(A1)).Select
Sheets("BDD NE PAS TOUCHER").Select
Sheets(Sheets("CHOIX DE L ENTREPRISE"(A1)).Select
J'espère avoir été assez claire, sinon demandez moi...
Je peux éventuellement mettre en pièce jointe un exemple sans parties confidentielles à l'intérieur sur demande.
Cordialement
Simon VLIEGHE
Hello !
Eviter l'enregistreur de macro t'evitera de nombreux problème comme par éxemple le ".select" pour recopier des données
Je t'ai mis un fichier exemple sur lequel t'appuyer !
Bonne journée
ps: pour être rigoureux, il faudrait tester l'éxistence d'une feuille déjà nommée comme le contenu de la cellule pour éviter de retourner dans le VBE
Merci pour ta réponse rapide Guitouille !
En effet, je suis nouveau sur Excel et je vais avoir besoin d'un peu de temps pour comprendre la mécanique de la VBA, d'où mon utilisation de l'enregistreur automatique de macro...
Je l'ai deja modifié car j'avais d'autres problèmes que j'ai réussi à résoudre moi-même mais j'avoue que le détail du nom de l'onglet et du changement d'onglet pour récuperer des données sur une plage et jouer au ping pong dans le but de remplir plusieur graphiques c'était pas simple...
J'ai plus ou moins compris ton bout de code mais je vais me pencher dessus pour arriver à un résultat potable =)
Merci à toi !
Cordialement
Pas de soucis,
si tu a des soucis à adapter le code à ta feuille, hésite pas.
(pour le test d'éxistence d'une feuille du même nom aussi !)
Salut,
Ben écoute, pour que tu ais un petit aperçu d'un débutant qui essaie de faire sa première macro sur une BDD de 15000 données, je te laisses voir le nombre de fois où je dois switcher vers un nouvel onglet dont le nom sera renseigné dans le tout premier onglet ...
Interdiction de rigoler ^^
P.S. : je ne te demandes pas de prendre de ton temps pour le faire mais c'est plutôt pour comprendre comment un novice peut vite perdre la tête dans ce foulli ...
Cordialement.
En effet, l'enregistreur de macro transcrit en VBA TOUTES les manips que tu fait pendant l'enregistrement
si tu veux déjà y voir plus clair, commençont par virer les lignes inutiles :
=> toutes les lignes du style
ActiveWindow.SmallScroll Down:=24correspondent au défilement de la page avec la molette de la sourie, tu peut toutes les enlever ^^
ensuite un exemple de ton code :
Sheets("Entreprise1").Select
ActiveWindow.SmallScroll Down:=-99
Range("B9").Select
ActiveSheet.Paste
Sheets("Feuil2").Select
Range("I2:M2").Select
Application.CutCopyMode = False
Selection.Copyle Sheets("Entreprise1").Select t'ouvre la feuille, mais en as-tu besoin pour la suite? (je m'explique plus bas )
le ActiveWindow.SmallScroll Down:=-99 correspond au défilement de la page (inutile pour le fonctionnement de la macro)
ensuite tu selectionne la cellule B9 pour y coller des données copiées précédement (D2:H2 si je ne me trompe pas), tu peut te passer des selections
Sheets("BDD NE PAS TOUCHER").Range("D2:H2").Copy
Sheets("Entreprise1").Range("B9").PasteSpecial Paste:=xlPasteValuesce code te permet de copier seulement les valeurs (pas le format) de la plage D2:H2 et de les coller à partir de la cellule B9 de la feuille Entreprise1 sans toutes les lignes inutiles ^^
j'en arrive là et je sais même pas si j'ai été clair ou si ça va t'aider :s
m'enfin bon courage ! (si je peux te donner un conseil d'un débutant du vba 2014, utilise l'enregistreur de macro pour retrouver la syntaxe des fonctions / procédures plutot que de l'utiliser pour créer tes macros, ton code sera lisible et tu saura (ou presque) ce que fait réellement ta macro, oubli pas, pas de CTRL + Z avec ces joujou :p )
- Messages
- 151
- Excel
- 20/07-13
- Inscrit
- 20/03/2012
- Emploi
- Dessinateur industriel Autocad, 3d Max, Inventor, excel ( forcément ),
Bonjour,
J'ai ajouté une petite modification afin de ne pas avoir de message d'erreur si la feuil existe déjà
Sub créer_onglet()
If Sheets(1).Cells(3, 3).Value <> "" Then
Sheets.Add.Move After:=Sheets(Sheets.Count)
' Si onglet existant
If Sheets(Sheets.Count).Name = Sheets(Sheets.Count).Name Then
MsgBox ("Onglet déjà existant")
Application.DisplayAlerts = False ' désactive message de confimation de supression de feuille
Sheets(Sheets.Count).Delete
Application.DisplayAlerts = True
GoTo Fin
End If
Sheets(Sheets.Count).Name = Sheets(1).Cells(3, 3).Value
Call transfert_données(Sheets(1).Cells(3, 3).Value)
Else
MsgBox ("Entrer un nom pour l'onglet à créer")
Fin:
End If
End SubCdt
Harissa23
Voilà une aide forte Utile =) merci beaucoup à toi et je te dis à bientôt =)
Cordialement