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é
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 1Il 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 ;)