Ajouter une 'incrémentation au identifiants..
Résolu
FEPOL
-
Josiel -
Josiel -
Bonjour chers amis,
Nouveau venu dans le monde du VBA, je me trouve confronté à un pb dans la gestion d'un tableau sur deux colonnes.
Nous aidons les jeunes à trouver un stage, un emploi, une formation, etc...
Mais souvent ils postulent sur trois, quatre, ou cinq offres, mais avec un seul numéro d'adhérent.
Ainsi, lors de la récupération des données du site et pour les exploiter sur Excel, je souhaite ajouter une racine d'incrémentation à l'identifiant.
Je précise....Le tableau contient deux colonnes, A: l'identifiant et B: l'intitulé de poste.
Je souhaite réaliser une macro qui va trier le fichier sur les identifiants, puis ajouter la racine"-0" à la premiere occurence, puis si un ientifiant existe en deux exemplaires, le second aura la racine "-1", s'il y en à encore un il aura la racine "-2", etc..., puis quand le suivant change il reçoit à nouveau "-0" pour la première occurence, etc...
Exemple :
1548752 devient 1548752-0, le suivant 1548752-1, ect...
Par avance je vous adresse toute ma reconnaissance et mes remerciements.
Bien à vous ,
Josiel..
Nouveau venu dans le monde du VBA, je me trouve confronté à un pb dans la gestion d'un tableau sur deux colonnes.
Nous aidons les jeunes à trouver un stage, un emploi, une formation, etc...
Mais souvent ils postulent sur trois, quatre, ou cinq offres, mais avec un seul numéro d'adhérent.
Ainsi, lors de la récupération des données du site et pour les exploiter sur Excel, je souhaite ajouter une racine d'incrémentation à l'identifiant.
Je précise....Le tableau contient deux colonnes, A: l'identifiant et B: l'intitulé de poste.
Je souhaite réaliser une macro qui va trier le fichier sur les identifiants, puis ajouter la racine"-0" à la premiere occurence, puis si un ientifiant existe en deux exemplaires, le second aura la racine "-1", s'il y en à encore un il aura la racine "-2", etc..., puis quand le suivant change il reçoit à nouveau "-0" pour la première occurence, etc...
Exemple :
1548752 devient 1548752-0, le suivant 1548752-1, ect...
Par avance je vous adresse toute ma reconnaissance et mes remerciements.
Bien à vous ,
Josiel..
A voir également:
- Ajouter une 'incrémentation au identifiants..
- Ajouter une application au démarrage - Guide
- Ajouter un profil netflix payant - Accueil - Guide streaming
- Ajouter une signature sur word - Guide
- Ajouter une liste déroulante excel - Guide
- Identifiants web - Guide
3 réponses
Bonjour,
J'ai essayé de faire quelque chose comme ca :
Demandez si vous ne comprenez pas !
J'ai essayé de faire quelque chose comme ca :
Sub fonction() Dim liste(9, 1) As Variant Dim inListe(9, 1) As Integer Dim inl As Boolean Dim currentIndex As Integer Dim tempIndex As Integer 'Remplissage du tableau 'Ici je rempli juste les identifiants 'le tableau sera rempli : 1,2,3,1,2,3,1,2,3,1 Do While i < 10 liste(i, 0) = 1 If i < 9 Then liste(i + 1, 0) = 2 liste(i + 2, 0) = 3 End If i = i + 3 Loop 'tri currentIndex = 0 For i = LBound(liste) To UBound(liste) inl = False 'pour chaque identifiant on vérifie si on l'a déjà rencontré For j = LBound(inListe) To UBound(inListe) If liste(i, 0) = inListe(j, 0) Then inl = True tempIndex = j End If Next j 'Si on l'a jamais rencontré on l'enregistre If inl = False Then inListe(currentIndex, 0) = liste(i, 0) inListe(currentIndex, 1) = 0 MsgBox inListe(currentIndex, 0) currentIndex = currentIndex + 1 End If If inl = True Then MsgBox liste(tempIndex, 0) & "-" & inListe(tempIndex, 1) inListe(tempIndex, 1) = inListe(tempIndex, 1) + 1 End If Next i End Sub
Demandez si vous ne comprenez pas !
Désolé pour le retard.
En espérant que cela convienne :
En espérant que cela convienne :
Sub fonction() Dim inListe(1000, 1) As Integer Dim inl As Boolean Dim currentIndex As Integer Dim tempIndex As Integer currentIndex = 0 Do while Feuil1.Cells(i, 1) <> "" inl = False 'pour chaque identifiant on vérifie si on l'a déjà rencontré For j = LBound(inListe) To UBound(inListe) If Feuil1.Cells(i, 1) = inListe(j, 0) Then inl = True tempIndex = j End If Next j 'Si on l'a jamais rencontré on l'enregistre If inl = False Then inListe(currentIndex, 0) = Feuil1.Cells(i, 1) inListe(currentIndex, 1) = 0 currentIndex = currentIndex + 1 End If If inl = True Then Feuil1.Cells(i, 1) = Feuil1.Cells(i, 1) & "-" & inListe(tempIndex, 1) inListe(tempIndex, 1) = inListe(tempIndex, 1) + 1 End If i = i + 1 Loop
Bonjour,
Ne vous excusez pas, je vous en prie, j'apprécie votre soutien et cela ne vous engage en rien, surtout pas à un délai...
Malheureusement lors de l'exécution je recois un code d'erreur 104 avec le message suivant : "La méthode'_Default' de l'objet 'Range' a échoué.
Et le pointeur reste sur la ligne du Sub.
Désolé une fois de plus de vous compliquer la tâche.
Je ne sais même pas comment vous joindre le fichier pour faire un test...
Mais il est facile à simuler, il suffit de constituer la colonne "A" avec une serie de nombres dont certains se répetent 1, 2, 3, 4, 5, ect...
Encore un chaleureux MERCI, pour votre soutien.
Ne vous excusez pas, je vous en prie, j'apprécie votre soutien et cela ne vous engage en rien, surtout pas à un délai...
Malheureusement lors de l'exécution je recois un code d'erreur 104 avec le message suivant : "La méthode'_Default' de l'objet 'Range' a échoué.
Et le pointeur reste sur la ligne du Sub.
Désolé une fois de plus de vous compliquer la tâche.
Je ne sais même pas comment vous joindre le fichier pour faire un test...
Mais il est facile à simuler, il suffit de constituer la colonne "A" avec une serie de nombres dont certains se répetent 1, 2, 3, 4, 5, ect...
Encore un chaleureux MERCI, pour votre soutien.
Bonjour,
voici mon code testé cette fois ci :
Cordialement,
voici mon code testé cette fois ci :
Dim inListe(1000, 1) As Integer Dim inl As Boolean Dim currentIndex As Integer Dim tempIndex As Integer Sub fonction() currentIndex = 0 i = 1 For k = LBound(inListe) To UBound(inListe) inListe(k, 0) = 0 inListe(k, 1) = 0 Next k Do While Feuil1.Cells(i, 1) <> "" inl = False 'pour chaque identifiant on vérifie si on l'a déjà rencontré For j = LBound(inListe) To UBound(inListe) If Feuil1.Cells(i, 1) = inListe(j, 0) Then inl = True tempIndex = j End If Next j 'Si on l'a jamais rencontré on l'enregistre If inl = False Then inListe(currentIndex, 0) = Feuil1.Cells(i, 1) inListe(currentIndex, 1) = 1 Feuil1.Cells(i, 1).NumberFormat = "@" Feuil1.Cells(i, 1) = "" & Feuil1.Cells(i, 1) & "-0" currentIndex = currentIndex + 1 End If If inl = True Then Feuil1.Cells(i, 1).NumberFormat = "@" Feuil1.Cells(i, 1) = "" & Feuil1.Cells(i, 1) & "-" & inListe(tempIndex, 1) & "" inListe(tempIndex, 1) = inListe(tempIndex, 1) + 1 End If i = i + 1 Loop End Sub
Cordialement,
Malheureusement, cela ne donne aucun effet, juste une dizaine de messages box.
Je n'ai peut-être pas assez donné de précisions:
Mon fichier contient deux colonnes A et B
Une ligne titre: A(identifiant) - B(objet demandé)
Colonne A des numéros de type : 128456 - 145792 - 547235 - ect....
Colonne B des définitions : cherche cours - cherche emploi informaticien - etc....
L'objet de la macro est de remplacer 128456 par 128456-0 si c'est sa première occurence
si c'est la deuxième (la même personne pouvant postuler à plusieurs offres) sera 128456-1 et ainsi de suite à chaque nouvelle occurence identique.
Je suppose qu'il ne doit pas manquer grand chose à votre macro, mais je suis incapable de l'enrichir.
Cela dit j'apprécie votre qualité de travail et votre rapidité et bravo aussi site pour l'esprit d'entraide qu'il favorise.
Bien Amicalement,
Josiel.
Notre objectif : Apporter un soutien par une prestation qui a bout but de donner : un formation - un metier - un emploi.
Miser sur l'AVENIR... C'est déjà en AVOIR UN.
Etant au travail actuelement, je le ferai pendant ma pause déjeuner.