2 variables donnent nom à feuille

news

XLDnaute Impliqué
Bonjour à tous du forum,

j'ai 2 variables pour nommer onglet et ajouter nouvelles feuilles.
en effectuant la macro, est ajouté 24 feuilles aulieu d' ajouter que 5 feuilles !! :(

Sub test() ' nouvelles feuilles ajoutées avec nom repris des cellules C2:C20 et B2:B20
.....
Set plage = Range("C2:C" & Range("C65536").End(xlUp).Row)
Set plage05 = Range("B2:B" & Range("B65536").End(xlUp).Row)
For Each cn05 In plage05
c05 = cn05.Value
For Each cn In plage
c = IIf(Len(cn.Value) > 32, Left(cn.Value, 31), cn.Value & " & JF" & cn05.Value)
Sheets.Add After:=Sheets(n)
On Error Resume Next
ActiveSheet.Name = c

Sheets("data").Rows("1:65536").Copy
Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Next cn
Next cn05
End Sub

Comment éviter la boucle des 2 variables et que le nombre correct des feuilles se trouvant sous colonne(C2:C) est ajouté ?

merci d'avance de vos astuces,

'
 

Pièces jointes

  • data,_nom_feuille.xls
    46.5 KB · Affichages: 51
  • data,_nom_feuille.xls
    46.5 KB · Affichages: 50
  • data,_nom_feuille.xls
    46.5 KB · Affichages: 50
Dernière édition:

news

XLDnaute Impliqué
Re : 2 variables donnent nom à feuille

Bonsoir à tous du forum,

Bonsoir Catrice,
Peux tu indiquer ce que tu veux obtenir en final à partir de l'exemple donné ?
... euh je pense que c'est tout, des données que j'ai mises en bas.

En C2:C on met les données, p.ex. ( A, B, C, D, E, F, divers, étranger, pays, ... )
pour chaque ligne complétée est créée une feuille, dont repris le nom figurant des lignes C2:C & JF & le nombre figurant sous B2:B,
et dans Range ("B1") de chaque nouvelle feuille créée figure les 5 dernières lettres de droite du nom de l'onglet.

Sub Range_named_from_WorkSheet() ' le nom de la feuille est affichée dans Range("B2")
Dim AnyString, MyStr
ActiveSheet.Select
AnyString = ActiveSheet.Name
MyStr = Right(AnyString, 5) ' renvoie les 5 dernières lettres de droite
Range("B2").Value = MyStr
End Sub

Dans ces nouvelles feuilles créées, est repris le contenu des lignes("3:65536") de la feuille("exemple_data").

La macro ne fonctionne pas bien, comme trop de feuilles sont créées,
ne devrait que créer 5 nouvelles feuilles:
A JF01
B JF02
C JF03
D JF04
E JF05

la macro devienne pour moi déjà très complexe, et avec toutes les codes y mettre correctement,

'
 
Dernière édition:

Catrice

XLDnaute Barbatruc
Re : 2 variables donnent nom à feuille

Bonsoir,

Pas sur d'avoir tout compris mais une interpretation dans le fichier joint
 

Pièces jointes

  • data,_nom_feuille.zip
    21.5 KB · Affichages: 17
  • data,_nom_feuille.zip
    21.5 KB · Affichages: 24
  • data,_nom_feuille.zip
    21.5 KB · Affichages: 20
Dernière édition:

news

XLDnaute Impliqué
Re : 2 variables donnent nom à feuille

Bonjour à tous du forum,

merci Catrice de réponse et d'avoir pris si tard le temps encore pour résoudre,

En effet ce n'est pas si évident pour exprimer ce que la macro doit effectuer.

La formule =SI(C2="";"";SI(C2>"";B1+1)) j'ai inclus dans VBA,
y manque encore:
a.) d'une vérification si la longueur du nom de la feuille est plus grand que 32 caractères,
alors s'ouvre une Msgbox("longueur du nom de feuille est trop long, va être réduite à 26 caractères") et réduire le texte du nom de la feuille à 26 caractères (= Left(Value, 26))
comme y est ajouté encore au nom de la feuille & JF" & Format(X.Offset(0, -1), "00")

b.) le doublon de feuilles, si une feuille existe déjà:
si double de feuilles, alors ne pas ajouter diretement des feuilles ("Feuil1", "Feuil2", ... ), mais affichez d'abord MsgBox. ( voir ci-joint explications dans Module2 du fichier )
 

Pièces jointes

  • data,_nom_feuille,05.zip
    20.8 KB · Affichages: 17
  • data,_nom_feuille,05.zip
    20.8 KB · Affichages: 15
  • data,_nom_feuille,05.zip
    20.8 KB · Affichages: 15
Dernière édition:

Catrice

XLDnaute Barbatruc
Re : 2 variables donnent nom à feuille

Bonjour,

Ci-joint un exemple qui traite les 2 dernieres contraintes.
Voir Module 2.

Pour ce qui concerne la longueur du nom, il faut adapter en fonction du nom finalement souhaité. (voir code)

Pour ce qui concerne les doublons, le fait d'ouvrir une boite de dialogue ne va t il pas ralentir l'utilisation (l'utilisateur va passer beaucoup plus de temps) et augmenter le risque d'erreur (de saisie) ?
Si des feuilles ont le meme nom, ne faut il pas les écraser avec les plus récentes ?
 

Pièces jointes

  • data,_nom_feuille6.zip
    17.6 KB · Affichages: 24
  • data,_nom_feuille6.zip
    17.6 KB · Affichages: 27
  • data,_nom_feuille6.zip
    17.6 KB · Affichages: 25

news

XLDnaute Impliqué
Re : 2 variables donnent nom à feuille

Bonjour à tous du forum,

merci Catrice pour réponse,
le code mis Left(X, 20), limite bien le nom à 20 caractères

Pour ce qui concerne la longueur du nom, il faut adapter en fonction du nom finalement souhaité. (voir code)
Les noms mis dans colonne C2:C devrait être limité à 20 caractères
déjà lors de la saisie des noms sous C2:C et afficher Inputbox pour modifier directement. ( Ceci évite qu'un nom est réduite et n'ést plus bien lisbile lors création d'une feuille avec ce nom réduite. )

For each Range in C2:C
IF Left.NumberFormat > 20 Then Inputbox ...
Next

Si des feuilles ont le même nom, ne faut il pas les écraser avec les plus récentes ? ne pas écraser ces feuilles, mais modifier le nom de cette feuille existante et de ne pas ajouter d'autre feuille,
 
Dernière édition:

news

XLDnaute Impliqué
Re : 2 variables donnent nom à feuille

d'accord on peut utiliser par validation,
mais comment y inclure dans une macro ou lors de saisie directement?

Sub format_validation()
Range("C7").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateTextLength, AlertStyle:=xlValidAlertStop, _
Operator:=xlLessEqual, Formula1:="20"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = "please insert a shorter text, till maximum 20 caracters" & Chr(10) & ""
.ErrorMessage = "please modify"
.ShowInput = True
.ShowError = True
End With
End Sub
 
Dernière édition:

news

XLDnaute Impliqué
Re : 2 variables donnent nom à feuille

Bonjour à tous du forum,

aulieu de mettre un code de validation si Range C2:C est complété,
dans macro,
est-ce qu'on peut pas mettre directement le code dans This Workbook ou dans la feuille directement,

ou d'utiliser :
Sub saisie_données
Sheets("data").OnEntry="limite_length_in_C_C"
End sub

Sub limite_length_in_C_C
IF ActiveCell > Len("20") Then
reponse = ("modifier le texte")
End
End Sub


ne sait pas trop comment y mettre tout le code à utiliser,
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : 2 variables donnent nom à feuille

Bonsoir à tous

pas tout suivi, mais si il s'agit de controler la longueur d'une saisie par vba, essaye peut être le code ci dessous, contôle la plage A1:A10, à placer dans le module de la feuille concernée :

Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 And Not Intersect(Target, Range("A1:A10")) Is Nothing Then
    If Len(Target.Value) > 20 Then MsgBox "saisie invalide"
End If
End Sub

bonne soirée
@+
 

news

XLDnaute Impliqué
Re : 2 variables donnent nom à feuille

Bonsoir à tous du forum,

avec OnEntry trouvé une formule pour résoudre

Sub length_of_data_5()
Sheets("data").Activate
Sheets("data").OnEntry = "text05"
End Sub

Sub text05()
If Len(ActiveCell.Text) > 20 Then
MsgBox ("modify it")
End If
End Sub
 

news

XLDnaute Impliqué
Re : 2 variables donnent nom à feuille

Bonsoir à tous du forum,

merci Pierrot93 pour réponse,
le code mis fonctionne très bien, en indicant si la longueur d'un texte est > 20

Je veux demander ou est la différence entre les différents codes utilisés :
Sub text()
Sheets("data").OnEntry = "text05"
End Sub

Sub text05()
If Len(ActiveCell.Text) > 20 Then
...
End Sub


ou le code :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 And Not Intersect(Target, Range("C1:C65536")) Is Nothing Then
If Len(Target.Value) > 20 Then MsgBox "modify texte"
End If
End Sub
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : 2 variables donnent nom à feuille

Bonjour News

le code avec "OnEntry" est une macro Excel4, anciennes procédures utilisé sur les versions Excel antérieures à 95 ou 97, me semble t'il. A priori elles sont maintenues pour que les fichiers existants soient compatibles avec les versions supériures.

Le code que je t'ai donné, emploie une macro évenementielle "nouvelle version".

Pas sur d'être très clair dans mes explications...

bonne journée
@+
 

Discussions similaires

Réponses
2
Affichages
129
Réponses
12
Affichages
225
Réponses
7
Affichages
292

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 846
dernier inscrit
Silhabib