rocket4
Messages postés47Date d'inscriptionlundi 18 décembre 2000StatutMembreDernière intervention31 janvier 2012
-
21 sept. 2011 à 15:08
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
21 sept. 2011 à 16:19
voici un code qui me permet de generer en boucle des numeros d'ordre dans une colonne , de la ligne 22 à la ligne 100 , lorsque je souhaite supprimer de cette colonne le dernier numero d'ordre généré et bien le numero suivant généré reprend le meme numero et la meme place que celui qui a été supprimé alors que je souhaiterai qu'il y ait une continuité , (si par exemple le dernier numero generé sur cette colonne est le 118000 et que je decide de retirer ce numero de cette colonne et bien le suivant occupera la meme place que le numero supprimé et devrait etre 118001, et ce n'est pas le cas , ce fait ce produit uniquement si je supprime le dernier numero generé , je suis un peu désemparé ne sachant pas trop comment apporter cette modif
voici le code :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B22:B100" & Range("A65536").End(xlUp).Row)) Is Nothing And Target.Count = 1 Then
If Cells(Target.Row, Target.Column + 1) = "" Then
If WorksheetFunction.Max(Range("C22:C100" & Range("A65536").End(xlUp).Row)) = 0 Then
Cells(Target.Row, Target.Column + 1) = 111000
Else
Cells(Target.Row, Target.Column + 1) = WorksheetFunction.Max(Range("C22:C100" & Range("A65536").End(xlUp).Row)) + 1
End If
End If
End If
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 21 sept. 2011 à 16:19
Pas bonjour non plus
Est-ce que le code, tel que présenté, fonctionne ?
J'ai des doutes, notamment sur cette syntaxe :
Range("B22:B100" & Range("A65536").End(xlUp).Row)
Cells(Target.Row, Target.Column + 1)
peut être avantageusement remplacé par
Target.Offset(0, 1)
Si tu supprimes une donnée, 118000, comment veux-tu que Excel sache qu'il faut s'en souvenir ?
Le programme fait ce que tu lui demandes; il ajoute 1 à la plus grande valeur rencontrée.
118000 ressemble à de la comptabilité : En compta, on n'efface jamais rien, on justifie tout. Donc il faudrait laisser la ligne, mais, soit la cacher, soit lui associer un commentaire d'explication.
Autre solution : Une fonction qui renvoie le plus grand chiffre d'une zone et mémorise cette donnée autre part (*) + n'accepte pas de valeur inférieure à celle précédemment mémorisée + renvoie ce nombre.
(*) dans une feuille invisible dédiée aux données du programme, par exemple.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)