Incrémentation avec variable et plusieurs 0 devant

Bonjour à tous,

Mes collègues sont géniaux avec moi, quand je leur donne un fichier terminé selon leur cahier des charges il me redonne des choses qui modifient en grande partie mon code

Je vous explique mon soucis. J'ai un fichier de création de devis. Les devis démarrent normalement à 1 et sont incrémentés au fur et a mesure.

J'ai donc un code comme cela, simple et efficace:

    If Offre_Technique.Cells(T1_Ligne, "A") = "" Then
        T1_LigneNouvelleOffre = T1_Ligne
        T1_NuméroOffre = Données.Cells(22, "E") 'Valeur que je fixe en manuel dans un autre onglet, ou j'ai donc mis "1"
    Else
        Do While Offre_Technique.Cells(T1_Ligne, "A") <> ""
            T1_Ligne = T1_Ligne + 1
        Loop
        T1_LigneNouvelleOffre = T1_Ligne
        T1_NuméroOffre = Offre_Technique.Cells(T1_Ligne - 1, "A") + 1
    End If

Le soucis c'est que maintenant pour faire plus "Pro" il veulent la date devant et un nombre à 4 chiffres, exemple: 230001 / 230002 / 230003...

Pour mettre la variable "année" devant pas de soucis je récupère les deux premiers caractères en partant de la droite dans la date de création je sais faire. Ce qui me pose soucis c'est les 0 devant l'incrémentation.

J'ai essayé dans la case qui me sert de numéro de départ de mettre format spécial "0000" cela donne bien "0001" mais quand je récupère la donnée pour la mettre dans mon code ça me donne juste "1" (Variable Integer). J'ai essayé le .NumberFormat = "000" mais cela ne semble pas fonctionner avec une variable Integer, dois-je changer pour une variable texte même si c'est au final un chiffre ? Ou y-a-t'il une autre solution ?

Merci à tous.

Bonjour

Multiplie le chiffre de l'année par 10 000 et ajoute ton numéro

Salut Chris,

Tellement bête que je n'y ai même pas pensé on cherche parfois trop loin.

J'ai changé du coup la variable Integer par Long pour que ça fonctionne et c'est good merci.

Par contre j'ai un autre soucis du coup. J'ai testé avec des devis de 2022 pour le passage 2023, je souhaite donc qu'après 220005 par exemple je passe à 230001. Et là ça ne fonctionne pas. Voici ce que j'ai mis:

'Détermination du numéro de devis

    T1_Ligne = 2
    If Offre_Technique.Cells(T1_Ligne, "A") = "" Then
        T1_LigneNouvelleOffre = T1_Ligne
        T1_NuméroOffre = Right(Date, 2) * 10000 + 1
    Else
        Do While Offre_Technique.Cells(T1_Ligne, "A") <> "" Si case vide alors...
            T1_Ligne = T1_Ligne + 1
        Loop
        T1_LigneNouvelleOffre = T1_Ligne
        If Left(Offre_Technique.Cells(T1_Ligne - 1, "A"), 2) <> Right(Date, 2) Then 'Si 22 (Valeur forcée) <> 23 alors...
            T1_NuméroOffre = Right(Date, 2) * 10000 + 1
        Else
            T1_NuméroOffre = Offre_Technique.Cells(T1_Ligne - 1, "A") + 1
        End If
    End If

Une idée peut-être ? Je n'arrive pas à visualiser la valeur du left pour vérifier ce qui cloche...

RE

Il faut tester avant

T1_Ligne = T1_Ligne + 1
si la dernière année trouvée est inférieure à l'année en cours pour mettre 1

Il me paraitrait plus simple de partir du bas plutôt que de parcourir toutes les lignes
Et il faudrait travailler en tableau structuré ce qui facilite aussi le code

Re,

C'est vrai qu'à force cela fera beaucoup de calculs inutiles, je suis donc passé par la recherche du nombre de ligne non vides, et un check de cette cellule pour déterminer si je suis au premier devis, si je dois changer l'année ou juste incrémenter, voici mon code au cas ou cela serve à quelqu'un.

    Offre_Technique.Activate
    T1_Ligne = Application.WorksheetFunction.CountA(Range("A2", Cells(Rows.Count, "A").End(xlUp)))
    MsgBox T1_Ligne
    If T1_Ligne = 1 And Offre_Technique.Cells(T1_Ligne + 1, "A") = "" Then
        T1_LigneNouvelleOffre = 2
        T1_NuméroOffre = Right(Date, 2) * 10000 + 1
    Else
        T1_Ligne = T1_Ligne + 2
        T1_LigneNouvelleOffre = T1_Ligne
        If Left(Offre_Technique.Cells(T1_Ligne - 1, "A"), 2) = Right(Date, 2) Then
            T1_NuméroOffre = Offre_Technique.Cells(T1_Ligne - 1, "A") + 1
        Else
            T1_NuméroOffre = Right(Date, 2) * 10000 + 1
        End If
    End If

En tout cas merci pour ton aide ;)

Rechercher des sujets similaires à "incrementation variable devant"