problème macro pour incrémenter

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

phnguyen

XLDnaute Nouveau
Bonjour, j'essai depuis hier matin de faire une macro pour incrémenter les chiffres d'une colonne par rapport à une autre case de façon continue je vais essayer de vous décrire ça, j'ai regarder de long en large votre forum, jy ai trouvé beaucoup d'astuce mais pas le meme probleme.

A B
2328 1000
2328 1000
3328 1001
3328 1001
3328 1001
4328 1002
4328 1002
4328 1002
4328 1002

Le résultat devra être ce que j'ai dans la colonne B ( les chiffres 1001,1002)
Je voudrais par rapport à la colonne A et par rapport au chiffre le plus à gauche par exemple ici on a dans l'ordre 2 2 puis 3 3 3 et 4 4 4 il faudrait que les chiffres dans la colonne B par exemple au tout début une fenêtre qui nous demande de définir le chiffre de départ et ensuite de copier 2 fois si c'est 2 de copier 3 fois si c'est 3 et ainsi de suite tout en incrémentant le résultat.

J'avais commencé avec des formules pour ensuite les intégrer mais je m'en sort pas, avec les fonction Gauche décaler et si mais je n'y arrive pas, si quelqu'un pouvait se pencher dessus merci
 
Re : problème macro pour incrémenter

Bonjour Phnguyen et bienvenue, bonjour le forum,

Une proposition VBA :
Code:
Sub Macro1()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim i As Integer 'déclare la variable i (Incrément)
Dim x As Integer 'déclare la variable x (incrément)
Dim g As Byte 'déclare la variable g (première carcactère à Gauche)

i = 1000 'initialise la variable i
With Sheets("Feuil1") 'prend en compte l'onglet ("Feuil1")
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne 1 (A)
    g = Left(.Cells(1, 1), 1) 'définit le premier caractère à gauche g de la cellule A1
    .Cells(1, 2).Value = i 'place i en B1
    For x = 2 To dl 'boucle de la ligne 2 à dl
        If Left(.Cells(x, 1), 1) = g Then 'condition : si le premier caractère à gauche est égal à g
            .Cells(x, 2).Value = i 'place i dans la colonne B
        Else 'sinon
            g = Left(.Cells(x, 1), 1) 'redéfinit le premier caractère à gauche g
            i = i + 1 'incrémente i
            .Cells(x, 2).Value = i 'place i dans la colonne B
        End If 'fin de la condition
    Next x 'prochaine ligne de la boucle
End With 'fin de la prise en compte de l'onglet "Feuil1"
End Sub
 
Re : problème macro pour incrémenter

Merci pour cette réponse rapide Robert, et c'est parfaitement ce que je voulais
Par contre j'ai essayé d'adapter un peu tous ça mais j'ai pas réussi
je voudrais que la macro s'applique au lieu de A1 a la colonne U2 et le résultat à la place de B1 dans la colonne V2
et que si il rencontre le chiffre 1 tout à gauche de laisser un blanc
si tu pouvais me dire les paramètres à modifier merci
 
Re : problème macro pour incrémenter

Bonjour phnguyen, bonjour le forum,

Ton histoire de premier caractère égal à 1 complique un peu. J'espère avoir compris. Le code :
Code:
Sub Macro1()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim i As Integer 'déclare la variable i (Incrément)
Dim x As Integer 'déclare la variable x (incrément)
Dim g As Byte 'déclare la variable g (première carcactère à Gauche)
i = 1000 'initialise la variable i
With Sheets("Feuil1") 'prend en compte l'onglet ("Feuil1")
    dl = .Cells(Application.Rows.Count, 21).End(xlUp).Row 'définit la dernière ligne éditée de la colonne 21 (U)
    g = Left(.Cells(2, 21), 1) 'définit le premier caractère à gauche g de la cellule A2
    .Cells(2, 22).Value = IIf(g = 1, "", i) 'place en V2 un vide si g=1 , sinon i
    For x = 3 To dl 'boucle de la ligne 2 à dl
        If Left(.Cells(x, 21), 1) = g Then 'condition : si le premier caractère à gauche est égal à g
            .Cells(x, 22).Value = IIf(g = 1, "", i) 'place en V2 un vide si g=1 , sinon i
        Else 'sinon
            i = IIf(g = 1, i, i + 1) 'incrémente i si g est différent de 1
            g = Left(.Cells(x, 21), 1) 'redéfinit le premier caractère à gauche g
            .Cells(x, 22).Value = IIf(g = 1, "", i) 'place en V2 un vide si g=1 , sinon i
        End If 'fin de la condition
    Next x 'prochaine ligne de la boucle
End With 'fin de la prise en compte de l'onglet "Feuil1"
End Sub
Un fichier exemple (que tu aurais ausi dû fournir dès le premier post pour éviter de perdre du tems !)
 

Pièces jointes

Re : problème macro pour incrémenter

Merci pour ton aide, c'est super 🙂

en testant j'ai trouvé quelque chose qui fait défaut, lorsqu'on a 2 2 puis 3 3 ça marche bien ça incrémente par contre quand on a 2 2 puis encore 2 2 ça incrémente pas, il faudrait que quand on a 2 2 il copie que 2 fois et quand on 3 3 il copie seulement 3 fois.

je joins le fichier modifié, j'ai rajouté un bouton et je t'ai mis en rouge ce qui allait pas et en vert ce qu'il devrait avoir

Merci pour ton aide
 

Pièces jointes

Re : problème macro pour incrémenter

Bonjour Phnguyen, bonjour le forum,

C'est à ne rien comprendre ! Tu me demande de modifier la macro pour la colonne U (ce que je fais...). Maintenant, tu envoies un fichier exemple avec la colonne A... J'ai bien compris ce que tu demande mais je voudrais être sûr de ne pas avoir à le refaire pour la colonne U ! je voudrais que tu envois un fichier définitif !
Fais un petit effort car moi je n'ai plus envie d'en faire pour rien...
 
Re : problème macro pour incrémenter

oui oui ne t'inquiete pas je garde ton fichier en exemple par la suite que je modifierai j'ai remis en colonne A pour que ce soit plus simple pour moi, avec modification que t'a faite en U ce qui m'a aider à comprendre comment tu a fais donc je pourrai faire moi même la modification merci pour ton aide
 
Re : problème macro pour incrémenter

Bonjour Phnguyen, bonjour le forum,

Le code modifié :
Code:
Private Sub CommandButton1_Click()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim i As Integer 'déclare la variable i (Incrément)
Dim x As Integer 'déclare la variable x (incrément)
Dim g As Byte 'déclare la variable g (première carcactère à Gauche)
Dim y As Byte 'déclare la variable y (incrément)

i = 999 'initialise la variable i
With Sheets("Feuil1") 'prend en compte l'onglet ("Feuil1")
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne 1 (A)
    g = Left(.Cells(1, 1), 1) 'définit le premier caractère à gauche g de la cellule A1
    For x = 1 To dl 'boucle 1 : de la ligne 1 à dl
        i = IIf(g = 1, i, i + 1) 'incrémente i si g est différent de 1
        g = Left(.Cells(x, 1), 1) 'redéfinit le premier caractère à gauche g
        For y = x To x + (g - 1) 'boucle 2 : sur le nombre définit pas g
            .Cells(y, 2).Value = IIf(g = 1, "", i) 'place en B un vide si g=1 , sinon i
        Next y
        x = x + (g - 1) 'actualise x para rapport à la boucle 2
    Next x 'prochaine ligne de la boucle 1
End With 'fin de la prise en compte de l'onglet "Feuil1"
End Sub
Le fichier :
 

Pièces jointes

Re : problème macro pour incrémenter

Mince, encore un soucis 🙁 j'ai réussi à adapter la chose, mais je suis limité en ligne dès que j'arrive à la ligne 255 j'ai une fenêtre qui pop et qui me donne une erreur sinon ça marche nickel, et mon 2ème soucis c'est la valeur de départ on ne peut que la modifier directement dans la macro, est ce que c'est possible d'avoir une fenêtre qui pop et on rentre la valeur et c'est parti, merci pour ton aide (je te joins le fichier actuel.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
22
Affichages
1 K
Retour