InputBox pour renommer le nom d'une feuille
Résolu/Fermé
tchics
Messages postés
6
Date d'inscription
dimanche 27 janvier 2013
Statut
Membre
Dernière intervention
5 février 2013
-
27 janv. 2013 à 15:38
tchics Messages postés 6 Date d'inscription dimanche 27 janvier 2013 Statut Membre Dernière intervention 5 février 2013 - 5 févr. 2013 à 13:50
tchics Messages postés 6 Date d'inscription dimanche 27 janvier 2013 Statut Membre Dernière intervention 5 février 2013 - 5 févr. 2013 à 13:50
A voir également:
- InputBox pour renommer le nom d'une feuille
- Renommer plusieurs fichiers en même temps - Guide
- Trouver une adresse avec un nom de famille gratuit ✓ - Forum Mobile
- Téléchargez cette image pour trouver le nom du fichier. il correspond au nom de cette loutre. comment s'appelle-t-elle ? - Forum Windows
- Feuille de score belote excel - Forum Excel
- Comment supprimer une feuille sur word - Guide
4 réponses
Heliotte
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
92
27 janv. 2013 à 19:32
27 janv. 2013 à 19:32
Bonsoir tchics,
Je pense que le plus facile est de poser la question et seulement après tu copies la feuille et la renomme.
Une façon de faire:
Tu fais appel à cette procédure comme ceci:
Bon dimanche.
Je pense que le plus facile est de poser la question et seulement après tu copies la feuille et la renomme.
Une façon de faire:
Private Sub RecupNomOnglet(Optional ByVal NouvelleFeuille As String = "") If(NouvelleFeuille="") Then Exit Sub ' Sheets("Trame").Copy After:=Sheets(Sheets.Count) ' Entre le nom du chantier ds la cellule A1 Activesheet.Name = NomFeuille End Sub
Tu fais appel à cette procédure comme ceci:
Call RecupNomOnglet("NomDeLaNouvelleFeuille")
Bon dimanche.
tchics
Messages postés
6
Date d'inscription
dimanche 27 janvier 2013
Statut
Membre
Dernière intervention
5 février 2013
28 janv. 2013 à 11:21
28 janv. 2013 à 11:21
Bonjour Heliotte et merci de ta réponse
En creusant un peu j'ai trouvé une solution qui fonctionne apparemment
Voici le code (j'imagine qu'il doit y avoir mieux mais pour l'instant ça marche)
Je suis ouvert aux critiques ;0)
Bonne journée
En creusant un peu j'ai trouvé une solution qui fonctionne apparemment
Voici le code (j'imagine qu'il doit y avoir mieux mais pour l'instant ça marche)
Sub Creer_unite_travail() ActiveSheet.Unprotect 'affiche la trame pour selection/copier/coller puis disparait' Sheets("Trame").Visible = True Sheets("Trame").Select Sheets("Trame").Copy Before:=Sheets(1) Sheets("Trame").Visible = False Dim b As String Dim c As String Dim d As String b = InputBox("Nom de l'unité de travail ?", "Question ?", "Nom de l'unité") 'impose de répondre' If Len(b) < 1 Then MsgBox ("Vous devez obligatoirement entrer un nom d'unité de travail") End If While Len(b) < 1 MsgBox ("Vous devez obligatoirement entrer un nom d'unité de travail") b = InputBox("Nom de l'unité de travail ?", "Question ?") Wend c = InputBox("Effectif de l'unité de travail ?", "Question ?") d = InputBox("Nom du rédacteur ?", "Question ?") Range("B1").Select ActiveCell.FormulaR1C1 = b Range("B2").Select ActiveCell.FormulaR1C1 = c Range("N1").Select ActiveCell.FormulaR1C1 = d ActiveSheet.Name = b 'couleur de l'onglet aléatoire' ActiveSheet.Tab.Color = RGB(Int(256 * Rnd), Int(256 * Rnd), Int(256 * Rnd)) ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowInsertingRows:=True, AllowDeletingRows:=True End Sub
Je suis ouvert aux critiques ;0)
Bonne journée
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
Modifié par pijaku le 28/01/2013 à 12:23
Modifié par pijaku le 28/01/2013 à 12:23
Bonjour,
1- la déclaration des variables se fait toujours en tête de procédure.
2- tu doublonnes ici :
3- Les .Select sont inutiles
4- Si dans b est saisi le nom d'une feuille déjà existante, que se passe t'il avec ton code???
5- ne pas mettre, dans ton cas, de valeur par défaut dans l'inputbox b, sous risque de se retrouver avec une feuille nommée "Nom de l'unité"...
Correction envisagée :
1- la déclaration des variables se fait toujours en tête de procédure.
2- tu doublonnes ici :
b = InputBox("Nom de l'unité de travail ?", "Question ?", "Nom de l'unité") 'impose de répondre' If Len(b) < 1 Then MsgBox ("Vous devez obligatoirement entrer un nom d'unité de travail") End If While Len(b) < 1 MsgBox ("Vous devez obligatoirement entrer un nom d'unité de travail") b = InputBox("Nom de l'unité de travail ?", "Question ?") Wend
3- Les .Select sont inutiles
4- Si dans b est saisi le nom d'une feuille déjà existante, que se passe t'il avec ton code???
5- ne pas mettre, dans ton cas, de valeur par défaut dans l'inputbox b, sous risque de se retrouver avec une feuille nommée "Nom de l'unité"...
Correction envisagée :
Sub Creer_unite_travail() Dim b As String Dim c As String Dim d As String ActiveSheet.Unprotect 'affiche la trame pour selection/copier/coller puis disparait' With Sheets("Trame") .Visible = True .Copy Before:=Sheets(1) .Visible = False End With While Len(b) < 1 b = InputBox("Nom de l'unité de travail ?", "Question ?") If Len(b) < 1 Then MsgBox ("Vous devez obligatoirement entrer un nom d'unité de travail") End If If FeuilleExiste(ThisWorkbook, b) Then MsgBox "La feuille " & b & " existe déjà. Changez de nom." b = "" End If Wend c = InputBox("Effectif de l'unité de travail ?", "Question ?") d = InputBox("Nom du rédacteur ?", "Question ?") Range("B1") = b Range("B2") = c Range("N1") = d ActiveSheet.Name = b 'couleur de l'onglet aléatoire' ActiveSheet.Tab.Color = RGB(Int(256 * Rnd), Int(256 * Rnd), Int(256 * Rnd)) ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowInsertingRows:=True, AllowDeletingRows:=True End Sub 'Fonction de Bbil, sources : 'http://www.developpez.net/forums/d269391/logiciels/microsoft-office/excel/macros-vba-excel/vba-e-feuille-existe/ Function FeuilleExiste(wk As Workbook, stFeuille) As Boolean On Error Resume Next FeuilleExiste = Not (wk.Sheets(stFeuille) Is Nothing) End Function
tchics
Messages postés
6
Date d'inscription
dimanche 27 janvier 2013
Statut
Membre
Dernière intervention
5 février 2013
28 janv. 2013 à 12:29
28 janv. 2013 à 12:29
Salut pijaku et merci ,
Effectivement je doublonne et je crache si même nom de feuille. Je vais tester tout ça et te ferait un retour. Au passage mes onglet sont de couleurs aléatoires car je n'ai pas réussi à leur imposer des couleurs différentes à chaque nouvelle création.
Aurait tu une piste (je suis sur que oui ^^)
Merci
Effectivement je doublonne et je crache si même nom de feuille. Je vais tester tout ça et te ferait un retour. Au passage mes onglet sont de couleurs aléatoires car je n'ai pas réussi à leur imposer des couleurs différentes à chaque nouvelle création.
Aurait tu une piste (je suis sur que oui ^^)
Merci
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
Modifié par pijaku le 28/01/2013 à 13:32
Modifié par pijaku le 28/01/2013 à 13:32
Pour les couleurs des onglets...
- boucle sur toutes les feuilles,
- récupère les couleurs des onglets dans une variable tableau,
- boucle qui : créé aléatoirement une couleur et vérifie si cette couleur n'est pas déjà en place.
Ca donne quelque chose comme :
- boucle sur toutes les feuilles,
- récupère les couleurs des onglets dans une variable tableau,
- boucle qui : créé aléatoirement une couleur et vérifie si cette couleur n'est pas déjà en place.
Ca donne quelque chose comme :
Sub Principale() Call AppliqueNouvelleCouleurOnglet(ActiveSheet) End Sub Sub AppliqueNouvelleCouleurOnglet(Feuille As Worksheet) Dim Wsh As Worksheet, Couleurs(), i As Integer, Flag As Boolean, Couleur As Long For Each Wsh In ThisWorkbook.Worksheets ReDim Preserve Couleurs(i) Couleurs(i) = Wsh.Tab.Color i = i + 1 Next Wsh Flag = False Do While Flag = False Randomize Couleur = RGB(Int(256 * Rnd), Int(256 * Rnd), Int(256 * Rnd)) For i = LBound(Couleurs) To UBound(Couleurs) If Couleur = Couleurs(i) Then Flag = False Exit For End If Flag = True Next Loop Feuille.Tab.Color = Couleur End Sub
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
Modifié par pijaku le 28/01/2013 à 13:37
Modifié par pijaku le 28/01/2013 à 13:37
Je me rends compte que la méthode utilisée n'est pas valable...
En effet, les couleurs de type "Long" ne sont pas différenciées par excel... tu risques de te retrouver avec deux couleurs (13421619 et 13421620 par exemple) qui sont différentesz en programmation mais identique à la vue...
Je regarde cela de plus près...
De plus, la propriété ColorIndex ne laisse que 56 choix... Auras tu plus de 56 onglets??????
En effet, les couleurs de type "Long" ne sont pas différenciées par excel... tu risques de te retrouver avec deux couleurs (13421619 et 13421620 par exemple) qui sont différentesz en programmation mais identique à la vue...
Je regarde cela de plus près...
De plus, la propriété ColorIndex ne laisse que 56 choix... Auras tu plus de 56 onglets??????
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
28 janv. 2013 à 14:12
28 janv. 2013 à 14:12
Pour exemple, avec commentaires :
Sub AppliqueNouvelleCouleurOngletAleatoirement() Dim Wsh As Worksheet Dim Couleurs(55) As Integer, i As Integer, Coul As Integer Dim Dico As Object 'teste le nombre d'onglets. Si > 56 on ne peux rien faire avec ce code. If Sheets.Count > 56 Then MsgBox "Votre classeur contient trop de feuilles.": Exit Sub 'On remplit la variable tableau avec toutes les valeurs que peux prendre 'la propriété ColorIndex soit de 1 à 56 For i = 0 To 55 Couleurs(i) = i + 1 Next 'L'objet Dictionary permet de générer des listes sans doublons Set Dico = CreateObject("Scripting.Dictionary") 'On implémente notre dictionary avec les couleurs des onglets déjà existants For Each Wsh In ThisWorkbook.Worksheets Dico(Wsh.Tab.ColorIndex) = "" Next Wsh Randomize Do 'On détermine une couleur aléatoirement Coul = CInt(Rnd * 55) 'si cette couleur n'existe pas dans notre dictionary 'En même temps on vérifie qu'il s'agit d'une couleur valide pour 'la propriété ColorIndex (si > 0 et < 57) If Not Dico.exists(Coul) And Coul > 0 And Coul < 57 Then 'si tout bon alors on l'applique à notre onglet ActiveSheet.Tab.ColorIndex = Coul 'on sort de la boucle Do-Loop Exit Do End If Loop End Sub
tchics
Messages postés
6
Date d'inscription
dimanche 27 janvier 2013
Statut
Membre
Dernière intervention
5 février 2013
5 févr. 2013 à 13:50
5 févr. 2013 à 13:50
Retour un peu tardif mais retour quand même ^^
Nickel ca fonctionne très bien.
Merci pour le coup de main
Nickel ca fonctionne très bien.
Merci pour le coup de main