Correction sur code

rocket4 Messages postés 47 Date d'inscription lundi 18 décembre 2000 Statut Membre Dernière intervention 31 janvier 2012 - 21 sept. 2011 à 15:08
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 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


je vous remercie pour vos suggetions

a++

1 réponse

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
Rejoignez-nous