XL 2013 [Résolu] Dupliquer des comptes avec insertion de lettres

  • Initiateur de la discussion Initiateur de la discussion momo
  • Date de début Date de début

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 !

momo

XLDnaute Occasionnel
Bonjour à tous

Je e permets de demander votre aide sur la possibilité de créer un macro qui puisse dupliquer certains numéros pré-choisi en y insérant une lettre

Je joins un fichier afin de mieux m'expliquer

Merci d'avance à tous
 

Pièces jointes

re🙂
tout a fait possible il faut seulement déterminer les critéres ou conditions
c'est pour cela qu il faut un fichier plus representatif du but a atteindre
exemple en colonne A la liste des comptes en colonne B le resultat attendu
Bonjour Laetitia
Merci pour ton retour. Je joins le fichier tel que demandé
 

Pièces jointes

re🙂🙂
change ta macro par celle la
devrait être plus rapide
a mon avis c'est la colonne D qui contient beaucoup de données ???
colonne A suremement < 30000 lignes vu que je manipule application transpose pour la restitution

instruction FIND c'est une fonction equivalent formule excel =rechercheV

quand je parle de tablo ou tableau
en simple je remplis une plage de cellule que je stocke dans une variable tableau
Les éléments du tableau sont indexés séquentiellement
t = Range("a7:a" & Cells(Rows.Count, 1).End(3).Row)
dans ce cas mon tableau ou tablo se nomme t
le tableau est "charge" en memoire
avantage on bosse pas directement sur la feuille bien plus rapide
faire une recherche sur google si tu veus t'intéresser au manip de tableau

VB:
Sub es()
Dim t(), t1(), x As Long, i As Long, k As Long, z As Byte, car, nb As Byte, w As Byte, r, m As Object
  Application.ScreenUpdating = 0
  car = [b1]: nb = [c1]
  Set m = CreateObject("Scripting.Dictionary")
  t = Range("d2:d" & Cells(Rows.Count, 4).End(3).Row)
  For i = 1 To UBound(t): m(t(i, 1)) = t(i, 1): Next i
  t = Range("a7:a" & Cells(Rows.Count, 1).End(3).Row)
  For i = 1 To UBound(t)
  If m.Exists(t(i, 1)) Then w = 2 Else w = 1
  For z = 1 To w
  x = x + 1
  ReDim Preserve t1(1 To 1, 1 To x)
  For k = 1 To 1
  t1(k, x) = t(i, k)
  If z = 2 Then t1(k, x) = Left(t(i, k), nb) & car & Mid(t(i, k), nb + 1)
  Next k: Next z: Next i
[a7].Resize(x, 1) = Application.Transpose(t1)
End Sub


ps pour le bouton tu passe en mode creation est tu le met ou tu veus avec la souris
 
re🙂🙂
change ta macro par celle la
devrait être plus rapide
a mon avis c'est la colonne D qui contient beaucoup de données ???
colonne A suremement < 30000 lignes vu que je manipule application transpose pour la restitution

instruction FIND c'est une fonction equivalent formule excel =rechercheV

quand je parle de tablo ou tableau
en simple je remplis une plage de cellule que je stocke dans une variable tableau
Les éléments du tableau sont indexés séquentiellement
t = Range("a7:a" & Cells(Rows.Count, 1).End(3).Row)
dans ce cas mon tableau ou tablo se nomme t
le tableau est "charge" en memoire
avantage on bosse pas directement sur la feuille bien plus rapide
faire une recherche sur google si tu veus t'intéresser au manip de tableau

VB:
Sub es()
Dim t(), t1(), x As Long, i As Long, k As Long, z As Byte, car, nb As Byte, w As Byte, r, m As Object
  Application.ScreenUpdating = 0
  car = [b1]: nb = [c1]
  Set m = CreateObject("Scripting.Dictionary")
  t = Range("d2:d" & Cells(Rows.Count, 4).End(3).Row)
  For i = 1 To UBound(t): m(t(i, 1)) = t(i, 1): Next i
  t = Range("a7:a" & Cells(Rows.Count, 1).End(3).Row)
  For i = 1 To UBound(t)
  If m.Exists(t(i, 1)) Then w = 2 Else w = 1
  For z = 1 To w
  x = x + 1
  ReDim Preserve t1(1 To 1, 1 To x)
  For k = 1 To 1
  t1(k, x) = t(i, k)
  If z = 2 Then t1(k, x) = Left(t(i, k), nb) & car & Mid(t(i, k), nb + 1)
  Next k: Next z: Next i
[a7].Resize(x, 1) = Application.Transpose(t1)
End Sub


ps pour le bouton tu passe en mode creation est tu le met ou tu veus
Un Maximum de Merci et de reconnaissance pour cette aide...
 
bonjour tous 🙂🙂🙂
tu as pas mis la liste initial colonne a & b.... donc par déduction 🙁
VB:
Sub es()
Dim t(), t1(), x As Long, i As Long,  z As Byte, car, nb As Byte, w As Byte, m As Object
  Application.ScreenUpdating = 0
  car = [b1]: nb = [c1]
  Set m = CreateObject("Scripting.Dictionary")
  t = Range("d2:d" & Cells(Rows.Count, 4).End(3).Row)
  For i = 1 To UBound(t): m(t(i, 1)) = t(i, 1): Next i
  t = Range("a7:b" & Cells(Rows.Count, 1).End(3).Row)
  For i = 1 To UBound(t)
  If m.Exists(t(i, 1)) Then w = 2 Else w = 1
  For z = 1 To w
  x = x + 1
  ReDim Preserve t1(1 To 2, 1 To x)
  t1(1, x) = t(i, 1): t1(2, x) = t(i, 2)
   If z = 2 Then t1(1, x) = Left(t(i, 1), nb) & car & Mid(t(i, 1), nb + 1): t1(2, x) = t(i, 2)
Next z: Next i
[a7].Resize(x, 2) = Application.Transpose(t1)
End Sub
 
bonjour tous 🙂🙂🙂
tu as pas mis la liste initial colonne a & b.... donc par déduction 🙁
VB:
Sub es()
Dim t(), t1(), x As Long, i As Long,  z As Byte, car, nb As Byte, w As Byte, m As Object
  Application.ScreenUpdating = 0
  car = [b1]: nb = [c1]
  Set m = CreateObject("Scripting.Dictionary")
  t = Range("d2:d" & Cells(Rows.Count, 4).End(3).Row)
  For i = 1 To UBound(t): m(t(i, 1)) = t(i, 1): Next i
  t = Range("a7:b" & Cells(Rows.Count, 1).End(3).Row)
  For i = 1 To UBound(t)
  If m.Exists(t(i, 1)) Then w = 2 Else w = 1
  For z = 1 To w
  x = x + 1
  ReDim Preserve t1(1 To 2, 1 To x)
  t1(1, x) = t(i, 1): t1(2, x) = t(i, 2)
   If z = 2 Then t1(1, x) = Left(t(i, 1), nb) & car & Mid(t(i, 1), nb + 1): t1(2, x) = t(i, 2)
Next z: Next i
[a7].Resize(x, 2) = Application.Transpose(t1)
End Sub

Bonjour Leti

Très bonne déduction .... C'est exactement ce que je voulais


Merci Beaucoup Leti;;;;;;;🙂🙂
 
- 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
3
Affichages
661
Réponses
0
Affichages
909
Retour