création d'onglets à partir de données du fichier

  • Initiateur de la discussion Initiateur de la discussion Sebast
  • 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 !

Sebast

XLDnaute Impliqué
Bonsoir à toutes et à tous,

Je cherche à écrire du code pour créer un (des) onglet(s) portant le nom fait d'une combinaison mois&année (infos contenues en onglet Paramètres)
Pour cela, je compte le nombre d'onglets présents dans le fichier et j'en ajoute un puis je le nomme avec la combinaison

Problème 1 : ça bugue car je ne sais probablement pas comment "créer" un nouvel onglet (je veux ajouter et non remplacer le dernier à chaque fois)
Problème 2 : je ne sais pas comment tester l'existence éventuelle d'un onglet portant le même nom (je ne veux pas écraser)

Etant débutant en VBA, je teste des bouts de code mais là, je m'arrache les cheveux ! (altf11 pour voir mon code)
Ma demande parle-t-elle à quelqu'un sur le forum ?
Merci d'avance pour vos lumières
 

Pièces jointes

Re : création d'onglets à partir de données du fichier

Bonjour Sebast

Tu es débutant, certe, mais je ne sais pas comment tu apprends le langage !?

La méthode ".Create" de l'objet "Worksheets" n'a jamais exister en VBA !?
Code:
Sub CréerOnglet()
  Dim NBfeuilles As Integer
  Dim xmois As String, xannée As String
  NBfeuilles = Worksheets.Count
  Worksheets.Add after:=Sheets(NBfeuilles)
  'Worksheets(NBfeuilles + 1).Create  ' probablement ici instruction incomplète car +1 probablt faux ...
  xmois = Sheets("Paramètres").Range("B1")
  xannée = Sheets("Paramètres").Range("B2")
  ActiveSheet.Name = xmois & xannée
End Sub

Lorsque tu saisi le nom de l'objet conteneur puis le point, logiquement tu devrais voir apparaitre une liste
de toutes les métodes et propriétés de l'objet

Sinon tu à l'enregistreur de macro, très utile au début de la programmation

A+
 
Re : création d'onglets à partir de données du fichier

Re


BrunoM45
Si tu permets, je t'emprunte ton code et j'y rajoute mes endives 😉
Code:
Sub CréerOngletII()
Dim xmois$, xannée$
    With Sheets("Paramètres")
        .Activate
    xmois = .[B1].Text: xannée = .[B2].Text
End With
Worksheets.Add(After:=Sheets(Worksheets.Count)).Name = CStr(xmois & xannée)
End Sub

version régime (c'est d'époque après les abus de fin d'année) 😉
Code:
Sub CréerOngletIII()
Dim fParam As Worksheet: Set fParam = ThisWorkbook.Sheets("Paramètres")
Worksheets.Add(After:=Sheets(Worksheets.Count)).Name = CStr(fParam.[B1] & fParam.[B2])
End Sub

EDITION: Au cas où .. 😉
Code:
Sub CréerOngletIV()
Dim fParam As Worksheet: Set fParam = ThisWorkbook.Sheets("Paramètres")
If Application.CountBlank(fParam.[B1:B2]) = 0 Then
Worksheets.Add(After:=Sheets(Worksheets.Count)).Name = CStr(fParam.[B1] & fParam.[B2])
Else
MsgBox "Attention B1 et B2 sont vides. Veuillez renseigner ces cellules"
Exit Sub
End If
End Sub
 
Dernière édition:
Re : création d'onglets à partir de données du fichier

Bonjour,

un grand merci à vous tous pour vos précisions et solutions. Effectivement BrunoM45, je ne sais pas ce qui m'a pris d'écrire Create plutôt que Add ... l'heure peut-être, mais je vois que j'ai affaire à des insomniaques qui gardent toute leur lucidité malgré la nuit !
Côté simplicité et lisibilité, je penche pour la version créerOngletII(), plus "compréhensible" pour le novice que je suis.

En fait j'alimente via userform le mois et l'année dans l'onglet Paramètres, avec saisie obligatoire donc je n'ai pas le risque de créer un onglet sans nom (mais je reconnais ne pas vous l'avoir précisé donc c'est tout à ton honneur d'avoir anticipé un tel problème - je n'ai envoyé que le bout de code qui pose problème).

Ta version fonctionne mais il y a souci quand on relance la procédure : l'onglet existant déjà, ça conduit à un plantage.
En fait, quand je disais que je ne savais pas comment tester l'existence d'un onglet, c'était pour contrer cela : le risque d"écraser l'onglet (car après la création de cet onglet, j'y insère des données - mais là encore, je ne fais figurer que les bouts de code qui posent problème pour moi)

Donc ma question serait la suivante :
avant de créer l'onglet mois&année, comment tester si parmi les autres onglets du fichier existe déjà un onglet mois&année (et dans ce cas, je mets un msgbox demandant confirmation : ça, je sais faire mais je ne sais pas comment tester l'existence ... mes tentatives avec
for each feuille in worksheets ... feuille.name ... next feuille etc. échouent - je ne sais pas comment formuler l'existence d'un même onglet)

J'espère que ma demande est plus claire, merci d'avance si vous y voyez une solution
 
Re : création d'onglets à partir de données du fichier

Re,

Côté simplicité et lisibilité, je penche pour la version créerOngletII(), plus "compréhensible" pour le novice que je suis.
Ah bon ... j'essaye pourtant d'éclater mon code pour les novices !?

Pour le problème de création d'une feuille qui existe déjà
Code:
Sub CréerOngletII()
Dim xmois$, xannée$
    With Sheets("Paramètres")
        .Activate
    xmois = .[B1].Text: xannée = .[B2].Text
End With
On Error Resume Next
Worksheets.Add(After:=Sheets(Worksheets.Count)).Name = CStr(xmois & xannée)
if Err.Number <>0 then
  Err.clear
  msgbox "La feuille existe déjà !"
End if
On Error Goto 0
End Sub

A+
 
Re : création d'onglets à partir de données du fichier

Super,

ça marche et ça m'enlève une sacrée épine. Encore merci et ne vois pas de perfidie dans ma remarque quand je dis que la version II m'est plus lisible, je reconnais en effet que justement tu proposes plusieurs solutions et c'est très bien mais parmi celles-ci, une est plus compréhensible que les autres pour moi
 
- 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

Retour