Incompatibilité de Type
Bonjour, en voulant modifier un code vba me permettant de dupliquer un onglet et de le renommer "registre_mois" j'ai un message du type incompatibilité de type qui apparaît, et je n'arrive pas à trouver d'ou vient le problème.
Car j'aimerais qu'à chaque début de mois, je puisse créer un nouvel onglet identique à l'original mais portant le nom de "registre_mois"
Si quelqu'un pouvait m'aider
Merci
Bonjour,
Tu cherches à affecter une valeur "String" à une variable de type "Integer" donc forcément, ça plante !
C'est dans cette ligne de code :
Max = Split(Fe.Name, "_")(1)comme Fe.Name a comme valeur "Registre_janv", avec Split(), tu affectes "janv" à la variable Max ce qui n'est pas compatible
Oh là là,
Que faut-il que je change dans mon code
Merci
Voici le code que j'utilise et qui je pense pose problème
[
Option Explicit
Sub CopycartouchesSheetRename()
Dim Fe As Worksheet
Dim Nom As String
Dim I As Integer
Dim Max As Integer
If MsgBox("Etes vous certain(e) de vouloir dupliquer cette feuille ?", vbYesNo + vbInformation, _
"Demande de confirmation REGISTRE") = vbYes Then
For Each Fe In Worksheets
If InStr(Fe.Name, "Registre_") > 0 Then If Split(Fe.Name, "_")(1) > Max Then Max = Split(Fe.Name, "_")(1)
Next Fe
ActiveSheet.Copy Before:=Worksheets("Registre")
ActiveSheet.Name = "Registre_" & Format(Date, "mmm")
Else
Sheets("Registre").Range("A1").Select
MsgBox "Operation annulee par l'utilisateur"
End If
End SubBonjour,
Theze te disait que tu compares des choux avec des carottes...
A quoi ça sert ton calcul du Max qui ne te sert pas ?
Essaie avec ça :
Sub CopycartouchesSheetRename()
Dim i As Integer
On Error GoTo suite
i = Sheets("Registre_" & Format(Date, "mmm")).Index
Exit Sub
suite:
On Error GoTo 0
If MsgBox("Etes vous certain(e) de vouloir dupliquer cette feuille ?", vbYesNo + vbInformation, _
"Demande de confirmation REGISTRE") = vbYes Then
ActiveSheet.Copy Before:=Worksheets("Registre")
ActiveSheet.Name = "Registre_" & Format(Date, "mmm")
Else
Sheets("Registre").Range("A1").Select
MsgBox "Operation annulee par l'utilisateur"
End If
End Subsi la feuille existe on quitte, sinon on demande.
eric
J'ai bien remplacé mon ancien code par ton nouveau code, quand je supprime toutes les feuilles registre (janv et fév) pas de soucis il me crée bien un nouvel onglet "registre_fév".
Par contre si je veux créer un autre onglet à partir du model, je n'ai même plus la possibilité:
si la feuille existe on quitte, sinon on demande.
eric
Est-ce qu'au début du prochain mois j'aurais la possibilité d'en créer un autre onglet "registre_mars" ou faut-il faire une autre manipulation car je n'ai pas le choix
Merci
Si tu nommes tes feuilles _mars ça va te faire une petite usine à gaz pour pas grand chose.
Tu comparais "Fév" avec 2, pour excel et pour le commun des mortels c'est différent.
Je te conseille de les nommer du n° du mois : Registre_02.
For Each Fe In Worksheets
If InStr(Fe.Name, "Registre_") > 0 Then max = Application.max(max, Val(Split(Fe.Name, "_")(1)))
Next Fe
ActiveSheet.Copy Before:=Worksheets("Registre")
ActiveSheet.Name = "Registre_" & Format(max + 1, "00")Tu dis...
eric
EDIT : avec les mois en lettres :
Dim Fe As Worksheet, dat As Date
For Each Fe In Worksheets
If InStr(Fe.Name, "Registre_") > 0 Then
On Error Resume Next
dat = Application.max(dat, DateValue("1 " & Split(Fe.Name, "_")(1) & " " & Year(Date)))
On Error GoTo 0
End If
Next Fe
ActiveSheet.Copy Before:=Worksheets("Registre")
ActiveSheet.Name = "Registre_" & Format(DateAdd("m", 1, dat), "mmm")EDIT : je viens de voir que tu avais posté sur plusieurs forums.
Merci d'attendre 24 ou 48h sans réponse pour le faire. On n'aime pas trop passer 1/2h sur un fichier pour rien car la réponse est déjà présente depuis un moment ailleurs.
Bonjour,
Testes avec ce code :
Sub CopycartouchesSheetRename()
Dim Fe As Worksheet
Dim Nom As String
Dim I As Integer
Dim J As Integer
Dim Max As Integer
Dim TblMois(1 To 2, 1 To 12)
Dim Tbl()
If MsgBox("Etes vous certain(e) de vouloir dupliquer cette feuille ?", vbYesNo + vbInformation, _
"Demande de confirmation REGISTRE") = vbYes Then
'noms des mois en abrégé et index dans le tableau
For I = 1 To 12
TblMois(1, I) = I
TblMois(2, I) = MonthName(I, True)
Next I
'stocke tous les mois déjà utilisés dans un autre tableau
For Each Fe In Worksheets
If InStr(Fe.Name, "Registre_") <> 0 Then
J = J + 1: ReDim Preserve Tbl(1 To J)
Tbl(J) = Split(Fe.Name, "_")(1)
End If
Next Fe
'comparaison des noms des mois
For I = 1 To UBound(Tbl)
For J = 1 To 12
If Tbl(I) = TblMois(2, J) Then
If TblMois(1, J) > Max Then Max = TblMois(1, J): Exit For
End If
Next J
Next I
If Max = 12 Then
MsgBox "Le mois de décembre existe déjà !"
Exit Sub
End If
ActiveSheet.Copy Before:=Worksheets("Registre")
ActiveSheet.Name = "Registre_" & TblMois(2, Max + 1)
Else
Sheets("Registre").Range("A1").Select
MsgBox "Operation annulée par l'utilisateur"
End If
End SubEn tout cas déjà merci pour ton aide
En ce qui concerne le 1er code fonctionne correctement et me renomme bien la création d'onglet "registre_mmm"
Option Explicit
Sub CopycartouchesSheetRename()
Dim Fe As Worksheet, dat As Date
For Each Fe In Worksheets
If InStr(Fe.Name, "Registre_") > 0 Then
On Error Resume Next
dat = Application.Max(dat, DateValue("1 " & Split(Fe.Name, "_")(1) & " " & Year(Date)))
On Error GoTo 0
End If
Next Fe
ActiveSheet.Copy Before:=Worksheets("Registre")
ActiveSheet.Name = "Registre_" & Format(DateAdd("m", 1, dat), "mmm")
End SubPar contre sur le dernier que tu viens de me donner, il y a un message d'erreur
J'aimerais également poser une question, si cela est possible
Existe t'il un moyen, me permettant de copier en fin de mois uniquement les lignes renseignées sur un onglet général, ceci afin de pouvoir faire des statistiques (mensuelles et annuelles)
Encore merci de ton aide
Re,
Tu parles du quel ?
Concernant le mien, je prend ton fichier posté, je remplace ton code par le mien et j'ai bien une feuille créé portant le nom "Registre_mars" sans qu'il y ai d'erreur !
Merci, c'est une erreur de ma part, tes 2 derniers codes fonctionnent, et donnent le même résultat.
Existe t'il un moyen pour copie sur un onglet regsitre_general l'ensemble des lignes uniquement renseignées des différents onglets?
As-tu remarqué que nous sommes 2 à répondre ?
Précise à qui tu t'adresse en cas de difficulté sur une réponse.
Existe t'il un moyen pour copie sur un onglet regsitre_general l'ensemble des lignes uniquement renseignées des différents onglets?
oui mais c'est une très mauvaise façon de travailler.
Saisis tout sur la même feuille et filtre sur les dates si tu veux consulter un mois précis.
eric