Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Création d'onglet à partir d'une sélection

10 réponses
Avatar
did85
Bonjour,
j'ai récupéré quelques codes de site parlant de création d'onglet
automatisé, et je me suis inspiré de ce forum également, mais je suis
confronté à un problème.

Le projet:
J'ai défini une liste de mot nommé "Lame" dans l'onglet "base" avec la
commande "décaler"
Le code : Lame=DECALER(Base!$B$2;;;NBVAL(Base!$B:$B)-1)

Ensuite cette liste (qui est ma base des noms des lames), je viens
l'implémenter manuellement au fur et à mesure que je reçois des lames (entre
10 et 50 par semaine)

Maintenant je souhaite créer un onglet par lame nouvelle dans lequel, j'ai
le nom du fournisseur, la date de l'affutage de la lame, son diamètre, son
nombre de coupes. Pour se faire j'ai utilisé un code vba d'un site (que je
remercie pour ses exemples), et que j'ai adapté à un bouton de commande :

Private Sub CmdCreerOngletLame_Click()
Dim Cell As Range, Nom$, Sht As Worksheet

For Each Cell In Selection
NomLame = Cell.Value
If NomLame <> "" Then ' on contrôle que la cellule de la sélection
n'est pas vide
On Error Resume Next
Set Sht = Sheets(NomLame) 'L'onglet prend le nom de la sélection
On Error GoTo 0
If Sht Is Nothing Then Sheets.Add.Name = NomLame 'Après contrôle
que l'onglet n'exisre pas, on l'ajoute
End If
Next Cell
End Sub

Cette macro fonctionne, mais je n'arrive pas à restreindre uniquement à la
sélection de ma liste de nom "Lame". Je ne voudrais pas que l'on puisse créer
un onglet autre que celui d'un nom de cette liste, en sélection une cellule
en dehors de la liste de nom.

Ma question : Comment adapter ce code pour restreindre la sélection à la
liste de nom "Lame" prédéfinie.

Merci et désolé pour la longueur du post

10 réponses

Avatar
Daniel
Bonjour.
Remplace :
For Each Cell In Selection
par :
For Each Cell In Range("Lame")
Cordialement.
Daniel

"did85" a écrit dans le message de news:

Bonjour,
j'ai récupéré quelques codes de site parlant de création d'onglet
automatisé, et je me suis inspiré de ce forum également, mais je suis
confronté à un problème.

Le projet:
J'ai défini une liste de mot nommé "Lame" dans l'onglet "base" avec la
commande "décaler"
Le code : LameÞCALER(Base!$B$2;;;NBVAL(Base!$B:$B)-1)

Ensuite cette liste (qui est ma base des noms des lames), je viens
l'implémenter manuellement au fur et à mesure que je reçois des lames
(entre
10 et 50 par semaine)

Maintenant je souhaite créer un onglet par lame nouvelle dans lequel, j'ai
le nom du fournisseur, la date de l'affutage de la lame, son diamètre, son
nombre de coupes. Pour se faire j'ai utilisé un code vba d'un site (que je
remercie pour ses exemples), et que j'ai adapté à un bouton de commande :

Private Sub CmdCreerOngletLame_Click()
Dim Cell As Range, Nom$, Sht As Worksheet

For Each Cell In Selection
NomLame = Cell.Value
If NomLame <> "" Then ' on contrôle que la cellule de la sélection
n'est pas vide
On Error Resume Next
Set Sht = Sheets(NomLame) 'L'onglet prend le nom de la
sélection
On Error GoTo 0
If Sht Is Nothing Then Sheets.Add.Name = NomLame 'Après
contrôle
que l'onglet n'exisre pas, on l'ajoute
End If
Next Cell
End Sub

Cette macro fonctionne, mais je n'arrive pas à restreindre uniquement à la
sélection de ma liste de nom "Lame". Je ne voudrais pas que l'on puisse
créer
un onglet autre que celui d'un nom de cette liste, en sélection une
cellule
en dehors de la liste de nom.

Ma question : Comment adapter ce code pour restreindre la sélection à la
liste de nom "Lame" prédéfinie.

Merci et désolé pour la longueur du post


Avatar
did85
Merci Daniel pour ta réponse, mais il y a queque chose que je ne doit pas
faire correctement.
En effet, j'ai transformé la macro ainsi :

Private Sub CmdCreerOngletLame_Click()
Dim Cell As Range, Nom$, Sht As Worksheet

For Each Cell In Range("Lame")
NomLame = Cell.Value
If NomLame <> "" Then ' on contrôle que la cellule de la sélection n
'est pas vide
On Error Resume Next
Set Sht = Sheets(NomLame) 'L'onglet prend le nom de la sélection
On Error GoTo 0
If Sht Is Nothing Then Sheets.Add.Name = NomLame 'Après contrôle
que l 'onglet n'exisre pas, on l'ajoute
End If
Next Cell
End Sub

Effectivement, je ne crée plus d'onglet qui se trouve en dehors de la liste
nommée "Lame", mais je ne crée plus d'onglet du tout. J'ai vidé complètement
la liste des noms de lame pour voir ce que le système faisait.

En conclusion, il crée uniquement l'onglet nommé "Lame1" qui est contenu
dans la cellule B2, et ceci, même si je sélectionne une cellule non vide en
dehors de la liste "Lame" Mais, c'est le seul onglet que je créé, même si
j'ajoute des noms de lame dans la liste de l'onglet "Base"

Merci pour votre aide
Avatar
Daniel
Ca fonctionne chez moi.
Regarde mon classeur à l'adresse :
http://cjoint.com/?mcngb5wBZC
Cordialement.
Daniel
"did85" a écrit dans le message de news:

Merci Daniel pour ta réponse, mais il y a queque chose que je ne doit pas
faire correctement.
En effet, j'ai transformé la macro ainsi :

Private Sub CmdCreerOngletLame_Click()
Dim Cell As Range, Nom$, Sht As Worksheet

For Each Cell In Range("Lame")
NomLame = Cell.Value
If NomLame <> "" Then ' on contrôle que la cellule de la sélection
n
'est pas vide
On Error Resume Next
Set Sht = Sheets(NomLame) 'L'onglet prend le nom de la
sélection
On Error GoTo 0
If Sht Is Nothing Then Sheets.Add.Name = NomLame 'Après
contrôle
que l 'onglet n'exisre pas, on l'ajoute
End If
Next Cell
End Sub

Effectivement, je ne crée plus d'onglet qui se trouve en dehors de la
liste
nommée "Lame", mais je ne crée plus d'onglet du tout. J'ai vidé
complètement
la liste des noms de lame pour voir ce que le système faisait.

En conclusion, il crée uniquement l'onglet nommé "Lame1" qui est contenu
dans la cellule B2, et ceci, même si je sélectionne une cellule non vide
en
dehors de la liste "Lame" Mais, c'est le seul onglet que je créé, même si
j'ajoute des noms de lame dans la liste de l'onglet "Base"

Merci pour votre aide




Avatar
did85
Bonsoir Daniel,
j'ai regardé avec attention ton classeur.
Mais je ne trouve pas de bouton de commande pour lancer la macro.
Donc j'en ai créé un. Ta macro fonctionne, mais que je sélectionne ou non
dans la colonne B2, je me retrouve automatiquement avec les 5 onglets crées
dans ton exemple (a, b, c, d, e, f)

il y a quelque chose que je ne dois pas comprendre.

Si tu as le temps, je te fais parvenir mon fichier d'origine afin que tu
voies mon erreur, parce que (à priori), j'ai le même code que toi, mais peut
être pas au bon endroit.

Merci

Fichier joint : http://cjoint.com/?mftC2BpcUq
Avatar
Daniel
Bonsoir.
J'ai modifié le code comme suit :

Private Sub CmdCreerOngletLame_Click()
Dim Cell As Range, Nom$, Sht As Worksheet

For Each Cell In Range("Lame")
nomlame = Cell.Value
If nomlame <> "" Then ' on contrôle que la cellule de la sélection n
'est pas vide
On Error Resume Next
Var = Sheets(nomlame).Name
If Err = 9 Then
Sheets.Add.Name = nomlame
End If
On Error GoTo 0
End If
Next Cell
End Sub

Cordialement.
Daniel
"did85" a écrit dans le message de news:

Bonsoir Daniel,
j'ai regardé avec attention ton classeur.
Mais je ne trouve pas de bouton de commande pour lancer la macro.
Donc j'en ai créé un. Ta macro fonctionne, mais que je sélectionne ou non
dans la colonne B2, je me retrouve automatiquement avec les 5 onglets
crées
dans ton exemple (a, b, c, d, e, f)

il y a quelque chose que je ne dois pas comprendre.

Si tu as le temps, je te fais parvenir mon fichier d'origine afin que tu
voies mon erreur, parce que (à priori), j'ai le même code que toi, mais
peut
être pas au bon endroit.

Merci

Fichier joint : http://cjoint.com/?mftC2BpcUq


Avatar
did85
Bonsoir Daniel,

et encore merci pour ton aide.
Ta modification fonctionne dans le sens où on voudrait créer toutes les
références renseignées dans la colonne B2 ("Lame")

Par contre, j'aimerais de ne pouvoir créer que l'onglet correspondant à la
sélectionne du nom de la lame. en effet, si la personne sélection de lame 11
à lame 20, je ne voudrais créer que ces onglets. A l'heure actuelle, ton code
crée tous les onglets avec le nom contenu dans la colonne B2. Ceci est très
bien, mais j'aurais aimé le modifier de nouveau.

Si celà est impossible, ne répondez pas à ce post, et je laisserai comme tel.

En tout cas merci pour le temps passé à m'aider et bonne soirée.
Avatar
Daniel
Bonsoir.
Sélectionne la ou les cellules contenant le ou les noms de feuille à créer
et utilise la même macro en remplaçant :

For Each Cell In Range("Lame")

par :

For Each Cell In Selection

Cordialement.
Daniel
"did85" a écrit dans le message de news:

Bonsoir Daniel,

et encore merci pour ton aide.
Ta modification fonctionne dans le sens où on voudrait créer toutes les
références renseignées dans la colonne B2 ("Lame")

Par contre, j'aimerais de ne pouvoir créer que l'onglet correspondant à la
sélectionne du nom de la lame. en effet, si la personne sélection de lame
11
à lame 20, je ne voudrais créer que ces onglets. A l'heure actuelle, ton
code
crée tous les onglets avec le nom contenu dans la colonne B2. Ceci est
très
bien, mais j'aurais aimé le modifier de nouveau.

Si celà est impossible, ne répondez pas à ce post, et je laisserai comme
tel.

En tout cas merci pour le temps passé à m'aider et bonne soirée.


Avatar
did85
Merci,
effectivement c'était celà, par contre est ce que je peux préciser la
sélection.

C'est-à-dire restreindre à la sélection de la colonne B2 de la Base ou bien
dire je ne veux créer les onglets que de la sélection de la liste "Lame" ?

Parce que là, si je choisis en dehors de la liste des noms de lame, je crée
quand même des onglets.

Par exemple, sur la colonne A, j'ai le nom des opérateurs. Donc si je
sélectionne un nom, je crée un onglet à son nom. Mais, je voudrais limiter à
la colonne B ou bien à la liste "lame"

Merci


Bonsoir.
Sélectionne la ou les cellules contenant le ou les noms de feuille à créer
et utilise la même macro en remplaçant :

For Each Cell In Range("Lame")

par :

For Each Cell In Selection

Cordialement.
Daniel
"did85" a écrit dans le message de news:

Bonsoir Daniel,

et encore merci pour ton aide.
Ta modification fonctionne dans le sens où on voudrait créer toutes les
références renseignées dans la colonne B2 ("Lame")

Par contre, j'aimerais de ne pouvoir créer que l'onglet correspondant à la
sélectionne du nom de la lame. en effet, si la personne sélection de lame
11
à lame 20, je ne voudrais créer que ces onglets. A l'heure actuelle, ton
code
crée tous les onglets avec le nom contenu dans la colonne B2. Ceci est
très
bien, mais j'aurais aimé le modifier de nouveau.

Si celà est impossible, ne répondez pas à ce post, et je laisserai comme
tel.

En tout cas merci pour le temps passé à m'aider et bonne soirée.







Avatar
Daniel
Dans ce cas :

Private Sub CmdCreerOngletLame_Click()
Dim Cell As Range, Nom$, Sht As Worksheet


For Each Cell In Selection
nomlame = Cell.Value
If nomlame <> "" And Not Intersect(Cell, _
Range("Lame")) Is Nothing Then
On Error Resume Next
Var = Sheets(nomlame).Name
If Err = 9 Then
Sheets.Add.Name = nomlame
End If
On Error GoTo 0
End If
Next Cell
End Sub

Daniel
"did85" a écrit dans le message de news:

Merci,
effectivement c'était celà, par contre est ce que je peux préciser la
sélection.

C'est-à-dire restreindre à la sélection de la colonne B2 de la Base ou
bien
dire je ne veux créer les onglets que de la sélection de la liste "Lame" ?

Parce que là, si je choisis en dehors de la liste des noms de lame, je
crée
quand même des onglets.

Par exemple, sur la colonne A, j'ai le nom des opérateurs. Donc si je
sélectionne un nom, je crée un onglet à son nom. Mais, je voudrais limiter
à
la colonne B ou bien à la liste "lame"

Merci


Bonsoir.
Sélectionne la ou les cellules contenant le ou les noms de feuille à
créer
et utilise la même macro en remplaçant :

For Each Cell In Range("Lame")

par :

For Each Cell In Selection

Cordialement.
Daniel
"did85" a écrit dans le message de
news:

Bonsoir Daniel,

et encore merci pour ton aide.
Ta modification fonctionne dans le sens où on voudrait créer toutes les
références renseignées dans la colonne B2 ("Lame")

Par contre, j'aimerais de ne pouvoir créer que l'onglet correspondant à
la
sélectionne du nom de la lame. en effet, si la personne sélection de
lame
11
à lame 20, je ne voudrais créer que ces onglets. A l'heure actuelle,
ton
code
crée tous les onglets avec le nom contenu dans la colonne B2. Ceci est
très
bien, mais j'aurais aimé le modifier de nouveau.

Si celà est impossible, ne répondez pas à ce post, et je laisserai
comme
tel.

En tout cas merci pour le temps passé à m'aider et bonne soirée.









Avatar
did85
Daniel,
un grand merci pour tes enormes connaissances.
C'est exactement ce que je voulais.

Maintenant, je cherche comment trier les onglets dans le même temps de sorte
à ce que j'obtiennes "menu, lame1, lame2, ..., lame25, lame26, .... lamen+1"
dans l'ordre croissant.

Encore merci et bon week-end à tous.
Le mioen commence plutôt bien