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 identifiant 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.
Re : Ajouter un incrément automatique par macro VBA
Bonjour Habitude,
je pense que ça devrait convenir:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Target.Column = 1 And Not Target Like "*-*" Then
Target.Value = Target.Value & "-" & WorksheetFunction.CountIf(Range("A:A"), Target & "-*") + 1
End If
End Sub
Re : Ajouter un incrément automatique par macro VBA
Bonjour SMOTTY et merci pour votre contribution...
Malheureusement je ne suis pas en mesure d'exploiter votre macro.
Je suis grave nul...! ou c'est un pb sur le site.
Je pense que vous n'avez pas affiché en clair dans votre message la totalité de la macro, puisque la partie apparente n'a aucune action.
J'ai donc télécharger votre fichier joint et là je recois un fichier type du site me signifiant que je doit être connecté pour recevoir la pièce.
Pourtant je suis bien connecté, avec mes identifiants, j'ai accès à mon compte , mais à chaque tentatives je recois toujours une page Excel par défaut du site.
Donc voici un email pour m'adresser le fichier... Par avance merci.
fepol.fr[at]gmail.com
FEPOL
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Target.Column = 1 And Not Target Like "*-*" Then
Target.Value = Target.Value & "-" & WorksheetFunction.CountIf(Range("A:A"), Target & "-*") + 1
End If
End Sub
A priori le code est bien dans sa totalité.... par contre où l'as tu placé ? Il doit être positionné dans le module de la feuille où il doit s'appliquer... pour ce faire, click droit sur l'onglet => visualiser le code => et tu le colles...
Re : Ajouter un incrément automatique par macro VBA
Bonjour,
J'ai réellement le sentiment d'abuser de votre aimable soutien,
mais impossible de m'en sortir seul.
J'ai trois possibilités pour coller la macro:
1) dans "Feuil1"
2) dans "Module1"
3) dans "Thisworkbook"
Dans tous les cas de figure, je ne vois pas la macro pour la lancer,
quand je demande la liste des macros présentent.
Que n'ai-je pas fais de correcte ?
J'ai l'impression de devoir être pris par la main pour y parvenir... (dur-dur)
Encore merci pour votre patience et votre soutien.
A priori le code est bien dans sa totalité.... par contre où l'as tu placé ? Il doit être positionné dans le module de la feuille où il doit s'appliquer... pour ce faire, click droit sur l'onglet => visualiser le code => et tu le colles...
Re : Ajouter un incrément automatique par macro VBA
Re,
à priori, à placer dans "feuil1".... sinon mets un fichier en pièce jointe.... ton niveau de sécurité est bien réglé sur moyen et tu autorises les macros lors de l'ouverture du classeur ?
Re : Ajouter un incrément automatique par macro VBA
Bonjour,
Bonjour, Pierrot
Le code fourni par Smotty fonctionnera dès que tu entreras un numéro d'identifiant dans la colonne A....
Cependant, si tu as déjà un fichier bien rempli, tu peux utiliser le code ci-dessous, afin de remplir les lignes déjà remplies :
Code:
Sub postulant()
Dim Cel As Range
Dim LesPostulants As Object
Dim I As Byte
Dim Tmp
Set LesPostulants = CreateObject("Scripting.Dictionary")
For Each Cel In Range("A2:A" & [A65000].End(xlUp).Row)
Tmp = Split(Cel.Value, "-")
If Not LesPostulants.Exists(Tmp(0)) Then
LesPostulants.Add Tmp(0), Tmp(0)
If InStr(1, Cel, "-") = 0 Then Cel.Value = Cel.Value & "-0"
Else
Cel.Value = Cel.Value & "-" & Application.CountIf(Columns(1), Tmp(0) & "-*")
End If
Next Cel
End Sub
Code à placer dans un module (que tu as vu nommé "Module1")
Après avoir déroulé ce code, tu peux le supprimer, et mettre le code de Smotty dans l'évènement de feuille, comme te l'a expliqué Pierrot.
Re : Ajouter un incrément automatique par macro VBA
Bonjour à tous et merci...
Je mesure toute l'importance d'une bonne communication et là je dois encore m'améliorer...
En effet maintenant j'ai compris que la macro fonctionne bien, mais lors de la saisie des codes... Mais pour cela je n'aurais pas demandé tant de travail, nous pouvvons saisir deux caractères de plus au clavier.
Ce que j'ai mal indiqué, c'est que nous récupérons les données saisies sur le site par les postulants et que nous importons le csv dans Excel et c'est bien dans ce cas ou nous avons besoin d'une macro qui reconfigure l'identifiant, puisqu'un même candidat peut postuler à plusieurs offres. D'ou l'importance de donner un incrément à son identifiant.
Idéalement nous souhaitons que l'incrément commence par le chiffre zéro, puis 1, puis, 2, etc...
Quand à la dernière macro qui semble bien prendre en compte cette configuration, elle emet le message d'erreur suivant "Sub ou fonction non definie"...
J'en profite pour joindre un des fichiers exploité, ici celui des formations:
Le code fourni par Smotty fonctionnera dès que tu entreras un numéro d'identifiant dans la colonne A....
Cependant, si tu as déjà un fichier bien rempli, tu peux utiliser le code ci-dessous, afin de remplir les lignes déjà remplies :
Code:
Sub postulant()
Dim Cel As Range
Dim LesPostulants As Object
Dim I As Byte
Dim Tmp
Set LesPostulants = CreateObject("Scripting.Dictionary")
For Each Cel In Range("A2:A" & [A65000].End(xlUp).Row)
Tmp = Split(Cel.Value, "-")
If Not LesPostulants.Exists(Tmp(0)) Then
LesPostulants.Add Tmp(0), Tmp(0)
If InStr(1, Cel, "-") = 0 Then Cel.Value = Cel.Value & "-0"
Else
Cel.Value = Cel.Value & "-" & Application.CountIf(Columns(1), Tmp(0) & "-*")
End If
Next Cel
End Sub
Code à placer dans un module (que tu as vu nommé "Module1")
Après avoir déroulé ce code, tu peux le supprimer, et mettre le code de Smotty dans l'évènement de feuille, comme te l'a expliqué Pierrot.
Re : Ajouter un incrément automatique par macro VBA
Après vérifications la réponse est négative,
J'ai les éléments suivants de cochés:
- Visual Basic for application
- Microsoft Excel 11.0 Object Library
- OLE automation
- Microsoft Forms 2.0 Object Library
- Microsoft Office 11.0 Object Library
Tout le reste est décoché. ("Manquant" n'est pas présent dans liste)
On ne pas être loin de la solution, reste à trouver le grain de sable...
Re : Ajouter un incrément automatique par macro VBA
RE....
En effet la même erreur se reproduit, même avec votre fichier, que lorsque j'ai collé la macro.
Voici l'erreur:
"Sub ou function non definie"...
L'erreur marque la première ligne "Sub postulant()"
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Code:
Sub postulant()
Dim Cel As Range
Dim LesPostulants As Object
Dim I As Byte
Dim Tmp
Set LesPostulants = CreateObject("Scripting.Dictionary")
For Each Cel In Range("A2:A" & [A65000].End(xlUp).Row)
Tmp = Split(Cel.Value, "-")
If Not LesPostulants.Exists(Tmp(0)) Then
LesPostulants.Add Tmp(0), Tmp(0)
If InStr(1, Cel, "-") = 0 Then Cel.Value = Cel.Value & "-0"
Else
Cel.Value = Cel.Value & "-" & Application.CountIf(Columns(1), Tmp(0) & "-*")
End If
Next Cel
End Sub
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°