Récupérer le nom de la dernière feuille pour la comparer

Résolu/Fermé
Yoyo01000 Messages postés 1639 Date d'inscription samedi 2 février 2019 Statut Membre Dernière intervention 7 mars 2022 - 9 janv. 2022 à 20:04
Yoyo01000 Messages postés 1639 Date d'inscription samedi 2 février 2019 Statut Membre Dernière intervention 7 mars 2022 - 10 janv. 2022 à 09:46
Bonsoir le forum et meilleurs voeux !

Je bloque sur un sujet d'où mon appel à votre aide :

Via VBA, je génère la copie d'une feuille avec ses données.
Dans la feuille générée, étant la dernière à droite, celle-ci à comme valeur le Nom de la personne et la date du jour.
Comme ceci : NOM-09 janv
De ce côté, c'est OK.

Cependant, si je génère une nouvelle feuille le jour-même, bien évidemment j'ai une erreur, puisqu'il est impossible d'avoir 2 feuilles avec le même nom.

Au moment de générer une seconde feuille le jour-même, il faudrait que je trouve une astuce pour qu'elle soit toujours sous la forme NOM-09 janv en ajoutant par exemple (2).

Mais je ne trouve pas la solution pour que le code ajoute (2) si la feuille générée a déjà le même nom que la dernière feuille de droite...

Voici le code complet :
Sub Copie_Colle_Fiche()

    Sheets("VIERGE").Visible = True
    Range("P4").Value = Now

'Date manuelle :
'If Range("P4").Value = "" Then
'    MsgBox "Champ [Date] obligatoire", vbExclamation
'    Range("P4").Interior.Color = 255
'Else
'    Range("P4").Interior.Color = RGB(255, 255, 255)
'End If

If Range("A6").Value = "" Then
    MsgBox "Champ [Description de l'ICP] obligatoire", vbExclamation
    Range("A6").Interior.Color = 255
Else
    Range("A6").Interior.Color = RGB(255, 255, 255)
End If

If Range("A13").Value = "" Then
    MsgBox "Champ [Solution proposée] obligatoire", vbExclamation
    Range("A13").Interior.Color = 255
Else
    Range("A13").Interior.Color = RGB(255, 255, 255)
End If

If Range("A6").Value = "" Or Range("A13").Value = "" Then
Exit Sub
End If

If Range("A6").Value <> "" And Range("A13").Value <> "" Then
    Sheets("VIERGE").Copy After:=Sheets(Sheets.count)
    ActiveSheet.Name = Left([D4], InStr(1, [D4], " ") - 1) & "-" & Format(Date, "dd mmm")
    Columns("AC:AR").Select
    Selection.EntireColumn.Hidden = True
    Columns("AT:BG").Select
    Selection.EntireColumn.Hidden = False
    Range("B2").Select
    Sheets("VIERGE").Range("P4") = ""
    Sheets("VIERGE").Range("A6") = ""
    Sheets("VIERGE").Range("A13") = ""
End If


Et le code concernant ma requête :
If Range("A6").Value <> "" And Range("A13").Value <> "" Then
    Sheets("VIERGE").Copy After:=Sheets(Sheets.count)
    ActiveSheet.Name = Left([D4], InStr(1, [D4], " ") - 1) & "-" & Format(Date, "dd mmm")


Merci d'avance, le forum !


Configuration: Windows / Chrome 97.0.4692.71

2 réponses

Le Pingou Messages postés 12182 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 7 novembre 2024 1 448
9 janv. 2022 à 22:51
Bonsoir,
Dans un premier temps, avant de créer votre nouvelle feuille vous récupérez la date de la feuille en cours et si même date du jour alors vous créer un nouveau nom que vous utiliserez pour modifier le nom de la feuille copiée.
0
Yoyo01000 Messages postés 1639 Date d'inscription samedi 2 février 2019 Statut Membre Dernière intervention 7 mars 2022 165
10 janv. 2022 à 09:44
Bonjour Le Pingou,

j'avais commencé à me pencher sur cette idée, après avoir posté mon sujet sur le forum !

C'est en effet une alternative qui aurait pu me simplifier la tâche !

Mais au final, je vais utiliser le code de via55.

Je garde toutefois cette idée, pour la mettre en oeuvre, et peut-être l'utiliser aussi.

Merci à toi, bonne journée.
0
via55 Messages postés 14495 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 7 novembre 2024 2 734
Modifié le 10 janv. 2022 à 00:10
Bonsoir à vous deux

Essaye de compléter ainsi ton code :
Sheets("VIERGE").Copy After:=Sheets(Sheets.Count)
nbf = 0 ' remise à 0 variable
' nom feuille possible Nom + date
 nom = Left([D4], InStr(1, [D4], " ") - 1) & "-" & Format(Date, "dd mmm")
 ' longueur de la chaine nom
lng = Len(nom)
'boucle depuis 5 feuilles avant la dernière jusqu'à la dernière A MODIFIER EN + ou en - SI NECESSAIRE
For n = Sheets.Count - 5 To Sheets.Count
' si la gauche du nom de la feuille est identique au nom possible on incrémente la variable nbf de 1
If Left(Sheets(n).Name, lng) = nom Then nbf = nbf + 1
Next
'Si une ou des feuilles existent avec déjà ce même début de nom alors on ajoute au nom possible entre parenthèses le n° de la prochaine feuille (= nbre de feuilles  avec même début +1)
If nbf > 0 Then nom = nom & " (" & nbf + 1 & ")"
ActiveSheet.Name = nom

Cdlmnt
Via

0
Yoyo01000 Messages postés 1639 Date d'inscription samedi 2 février 2019 Statut Membre Dernière intervention 7 mars 2022 165
10 janv. 2022 à 09:46
Bonjour via55,

je n'ai qu'un mot à dire : excellent !

Merci pour le code et les annotations dans celui-ci, qui vont me permettre à bien le comprendre !

Bonne journée à toi !
0