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

https://www.cjoint.com/c/HBcpAL3ffHu

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à, , malheureusement je n'ai pas tout compris

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 Sub

Bonjour,

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 Sub

si 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 Sub

En 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 Sub

Par contre sur le dernier que tu viens de me donner, il y a un message d'erreur

capture d ecran 2018 02 03 a 09 38 06

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

Rechercher des sujets similaires à "incompatibilite type"