Microsoft 365 Incrémenter un nombre sans affecter le texte dans la même cellule (VBA)

Etoto

XLDnaute Barbatruc
Hello la team,

Je repasse vers vous concernant un problème qui m'arrive sur Excel.

J'ai une plage de donnée sous format texte, et j'aimerais pouvoir modifier le contenu des cellules avec une incrémentation, j'explique :

Données de départRésultat souhaité
Baba01-Baba
Beba02-Beba
Toto03-Toto
Lala04-Lala

Je voudrais éviter d'utiliser des fonctions car je n'ai pas vraiment la possibilité de rajouter des colonnes. Est-ce possible de le faire en VBA ? Je me dis qu'avec une boucle, cela doit vite s’exécuter, avez-vous des idées ?

Merci d'avance pour votre aide.
 

Phil69970

XLDnaute Barbatruc
Bonjour à tous

@Etoto
En VBA je te propose ceci :

VB:
Sub Test()
Application.ScreenUpdating = False
Dim Derlig&, Var$, Cptr&, Tiret$

Derlig = Range("A" & Rows.Count).End(xlUp).Row

For i = 2 To Derlig
    Var = Range("A" & i)    'Ancien nom
    Cptr = Cptr + 1         'Numero
    Tiret = "-"             'Le tiret
    If Cptr <= 9 Then       'Le 0 si moins de 10
        Range("C" & i) = "0" & Cptr & Tiret & Var   'On assemble colonne C
    Else
        Range("C" & i) = Cptr & Tiret & Var         'On assemble colonne C
    End If
Next i

End Sub

Le résultat en colonne C ==> colonne modifiable si besoin

Merci de ton retour

@Phil69970
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Modifier l'affichage de la cellule, sans affecter le texte qu'elle contient, à mon avis ce n'est possible qu'en créant un format personnalisé.

Mais, à ma connaissance, on ne peut pas mettre de formule dans un format personnalisé, donc ici ça voudrait dire qu'il faudrait créer un format personnalisé pour chaque cellule...
 

Etoto

XLDnaute Barbatruc
Bonjour,

Modifier l'affichage de la cellule, sans affecter le texte qu'elle contient, à mon avis ce n'est possible qu'en créant un format personnalisé.

Mais, à ma connaissance, on ne peut pas mettre de formule dans un format personnalisé, donc ici ça voudrait dire qu'il faudrait créer un format personnalisé pour chaque cellule...
Hello,

Non, le texte peut être affecté mais je ne voulais pas qu'il faille créer une nouvelle colonne pour une formule, desole pour ma formulation.

Bonjour à tous

@Etoto
En VBA je te propose ceci :

VB:
Sub Test()
Application.ScreenUpdating = False
Dim Derlig&, Var$, Cptr&, Tiret$

Derlig = Range("A" & Rows.Count).End(xlUp).Row

For i = 2 To Derlig
    Var = Range("A" & i)    'Ancien nom
    Cptr = Cptr + 1         'Numero
    Tiret = "-"             'Le tiret
    If Cptr <= 9 Then       'Le 0 si moins de 10
        Range("C" & i) = "0" & Cptr & Tiret & Var   'On assemble colonne C
    Else
        Range("C" & i) = Cptr & Tiret & Var         'On assemble colonne C
    End If
Next i

End Sub

Le résultat en colonne C ==> colonne modifiable si besoin

Merci de ton retour

@Phil69970
Merci beaucoup, je testerai demain quand j'aurai le fichier, merci !
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Juste pour le fun, une version réservée à Office 365 (peut-être aussi excel 2019 ?).
Le code est dans Module1:
VB:
Sub Indexer()     'Uniquement en Office 365
Const formul = "=TEXTE(SEQUENCE(NBVAL(xxxx);1;1;1);REPT(0;(ENT(LOG(NBVAL(xxxx);10))+1)))&CAR(45)&xxxx"
Dim n&
   Application.ScreenUpdating = False
   If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
   Columns("c").Copy Columns("XFD")
   n = Cells(Rows.Count, "xfd").End(xlUp).Row
   Range("c2").Resize(n - 1).Clear
   Range("c2").Formula2Local = Replace(formul, "xxxx", Range("xfd2:xfd" & n).Address)
   Columns("c").Resize(n) = Columns("c").Resize(n).Value
   Columns("XFD").Delete
End Sub
 

Pièces jointes

  • Etoto- indexer cellules- v1 (O365)(1).xlsm
    31.7 KB · Affichages: 6
Dernière édition:

Etoto

XLDnaute Barbatruc
Hello,

Merci pour votre aide, les deux méthodes fonctionnent bien.

J'ai adapté ton code @Phil69970 à mon fichier et cela fonctionne très bien, vu que j'ai plusieurs colonnes à traité, j'ai rajouté une Inputbox pour dire à Excel quelle colonne prendre et vu que mes en-têtes à la troisième ligne, j'ai modifié le nombre minimum affecté à i.

VB:
Sub Rename_V2()
Application.ScreenUpdating = False
Dim Derlig&, Var$, Cptr&, Tiret$, Colns$

Colns = InputBox("Insérer la colonne souhaitée", "Sélection de colonne", "A")

If Colns = "" Then Exit Sub

Derlig = Range(Colns & Rows.Count).End(xlUp).Row

For i = 3 To Derlig
    Var = Range(Colns & i)    'Ancien nom
    Cptr = Cptr + 1         'Numero
    Tiret = "-"             'Le tiret
    If Cptr <= 9 Then       'Le 0 si moins de 10
        Range(Colns & i) = "0" & Cptr & Tiret & Var   'On assemble colonne A (Modifiable)
    Else
        Range(Colns & i) = Cptr & Tiret & Var         'On assemble colonne A (Modifiable)
    End If
Next i

End Sub

Merci beaucoup !
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Une autre façon
(ici pour la colonne A)
Code:
Sub test()
Dim t, tt()
t = Cells(1).CurrentRegion.Resize(, 1).Value
ReDim tt(UBound(t))
For i = 1 To UBound(t, 1)
tt(i - 1) = Format(i, "00-") & t(i, 1)
Next
Cells(1).CurrentRegion.Resize(, 1).Value = Application.Transpose(tt)
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Ici version paramétrée
Dans cet exemple, on traite la 5ième colonne ;)
VB:
Sub La_Cinquieme_Colonne()
Top_Numero 5
End Sub
Private Sub Top_Numero(colonel_Moutarde As Long)
Dim t, tt()
t = Cells(colonel_Moutarde).CurrentRegion.Resize(, 1).Value
ReDim tt(UBound(t))
For i = 1 To UBound(t, 1)
tt(i - 1) = Format(i, "00-") & t(i, 1)
Next
Cells(colonel_Moutarde).CurrentRegion.Resize(, 1).Value = Application.Transpose(tt)
End Sub
NB: Vous êtes autorisé à renommer ce que vous voulez renommer ;)

PS: Version sans garde-fou
Vaut mieux que la colonne ne soit pas vide par exemple
ou qu'elle contienne des formules.
 

Statistiques des forums

Discussions
314 487
Messages
2 110 119
Membres
110 676
dernier inscrit
Hoolaurent