XL 2010 MACRO POUR REMPLACER NOMBRES PAR NOMS

mcj1997

XLDnaute Accro
Bonjour,

Je reçois régulièrement des fichiers volumineux avec une colonne avec des nombres auxquels correspondent un nom, je recherche une macro qui me permette de remplacer sur toute la colonne les nombres par les noms.

Exemple dans fichier reçu j'ai une colonne de n° de département, 36, 23, 87......, qui doivent être remplacés par INDRE, CREUSE, HAUTE VIENNE......,

Dans ma macro dans ce petit exemple il me faudrait donc commander de remplacer 36 par Indre, 23 par Creuse et 87 par Haute Vienne.
Est-ce possible en (1) sélectionnant la colonne concernée et en (2) en activant la macro ?

Merci d'avance,
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir le fil, bonsoir le forum,

VB:
Sub Chuuuuuuut()
Dim TN(1 To 3) 'déclare le tableau TN de 3 variables (Tableau des Numéros)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim COL As Integer 'déclare la variable COL (COLonne)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)

TN(1) = 36 'définit TN(1)
TN(2) = 23 'définit TN(2)
TN(3) = 87 'définit TN(3)
Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
COL = 1 'définit la colonne COL (à adapter à ton cas)
DL = O.Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onglet O
For I = 1 To DL 'boucle 1 sur toute les lignes I de 1 à DL
    For J = 1 To 3 'boucle 2 : sur toutes les variable J de TN
        'si la valeur de la cellule ligne I colonne COL est égale à la variable J du tableau TN, récupère le nom en fonction du choix J, sort de la boucle 2
        If O.Cells(I, COL).Value = TN(J) Then O.Cells(I, COL).Value = Choose(J, "Indre", "Creuse", "Haute-Vienne"): Exit For
    Next J 'prochaine variable de la boucle 2
Next I 'prochaine ligne de la boucle 1
End Sub
[Édition]
Plus adaptée :
VB:
Sub Chuuuuuuut()
Dim SEL As Range 'déclare la variable SEL (SElection)
Dim TN(1 To 3) 'déclare le tableau TN de 3 variables (Tableau des Numéros)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim COL As Integer 'déclare la variable COL (COLonne)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)

On Error GoTo fin 'en cas d'erreur va à l'étiquette "fin"
Set SEL = Application.InputBox("sélectionner la colonne en cliquant sur une cellule de celle-ci.", "COLONNE", Type:=8) 'définit la selection SEL (génère une erreur si [Annuler])
COL = SEL.Column
TN(1) = 36 'définit TN(1)
TN(2) = 23 'définit TN(2)
TN(3) = 87 'définit TN(3)
Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
DL = O.Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onglet O
For I = 1 To DL 'boucle 1 sur toute les lignes I de 1 à DL
    For J = 1 To 3 'boucle 2 : sur toutes les variable J de TN
        'si la valeur de la cellule ligne I colonne COL est égale à la variable J du tableau TN, récupère le nom en fonction du choix J, sort de la boucle 2
        If O.Cells(I, COL).Value = TN(J) Then O.Cells(I, COL).Value = Choose(J, "Indre", "Creuse", "Haute-Vienne"): Exit For
    Next J 'prochaine variable de la boucle 2
Next I 'prochaine ligne de la boucle 1
fin:
End Sub
 
Dernière édition:

mcj1997

XLDnaute Accro
Bonsoir le fil, bonsoir le forum,

VB:
Sub Chuuuuuuut()
Dim TN(1 To 3) 'déclare le tableau TN de 3 variables (Tableau des Numéros)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim COL As Integer 'déclare la variable COL (COLonne)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)

TN(1) = 36 'définit TN(1)
TN(2) = 23 'définit TN(2)
TN(3) = 87 'définit TN(3)
Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
COL = 1 'définit la colonne COL (à adapter à ton cas)
DL = O.Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onglet O
For I = 1 To DL 'boucle 1 sur toute les lignes I de 1 à DL
    For J = 1 To 3 'boucle 2 : sur toutes les variable J de TN
        'si la valeur de la cellule ligne I colonne COL est égale à la variable J du tableau TN, récupère le nom en fonction du choix J, sort de la boucle 2
        If O.Cells(I, COL).Value = TN(J) Then O.Cells(I, COL).Value = Choose(J, "Indre", "Creuse", "Haute-Vienne"): Exit For
    Next J 'prochaine variable de la boucle 2
Next I 'prochaine ligne de la boucle 1
End Sub
[Édition]
Plus adaptée :
VB:
Sub Chuuuuuuut()
Dim SEL As Range 'déclare la variable SEL (SElection)
Dim TN(1 To 3) 'déclare le tableau TN de 3 variables (Tableau des Numéros)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim COL As Integer 'déclare la variable COL (COLonne)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)

On Error GoTo fin 'en cas d'erreur va à l'étiquette "fin"
Set SEL = Application.InputBox("sélectionner la colonne en cliquant sur une cellule de celle-ci.", "COLONNE", Type:=8) 'définit la selection SEL (génère une erreur si [Annuler])
COL = SEL.Column
TN(1) = 36 'définit TN(1)
TN(2) = 23 'définit TN(2)
TN(3) = 87 'définit TN(3)
Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
DL = O.Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onglet O
For I = 1 To DL 'boucle 1 sur toute les lignes I de 1 à DL
    For J = 1 To 3 'boucle 2 : sur toutes les variable J de TN
        'si la valeur de la cellule ligne I colonne COL est égale à la variable J du tableau TN, récupère le nom en fonction du choix J, sort de la boucle 2
        If O.Cells(I, COL).Value = TN(J) Then O.Cells(I, COL).Value = Choose(J, "Indre", "Creuse", "Haute-Vienne"): Exit For
    Next J 'prochaine variable de la boucle 2
Next I 'prochaine ligne de la boucle 1
fin:
End Sub
Merci beaucoup, c'est top, maintenant je fais faire de la saisie dans le code afin de rentrer toutes les références.
Une question y aurait moyen qu'au cas ou la référence ne soit pas rentrée dans la macro, qu'elle tourne tout de même et pointe ensuite sur l'erreur. En effet cela pourrait arriver que je reçoive un fichier avec un nom non référencé dans la macro.
Dans l'attente encore merci !!!
 

job75

XLDnaute Barbatruc
Pour compléter ce que j'ai dit au post #15 voyez ce fichier (2) et la macro du bouton :
VB:
Sub Remplacer()
Application.ScreenUpdating = False
With [A1].CurrentRegion
    .Columns(2) = "=IFERROR(VLOOKUP(A1,'" & ThisWorkbook.Path & "\[FICHIER AVEC REFERENCES.xlsx]Feuil1'!A$1:B$100,2,0),"""")"
    .Columns(2) = .Columns(2).Value 'supprime les formules
    .Columns(2).Copy .Columns(1) 'copier-coller
    .Columns(2).ClearContents 'RAZ
End With
End Sub
 

Pièces jointes

  • FICHIER AVEC REFERENCES.xlsx
    8.4 KB · Affichages: 12
  • FICHIER A MODIFIER(2).xlsm
    16.1 KB · Affichages: 6

mcj1997

XLDnaute Accro
Pour compléter ce que j'ai dit au post #15 voyez ce fichier (2) et la macro du bouton :
VB:
Sub Remplacer()
Application.ScreenUpdating = False
With [A1].CurrentRegion
    .Columns(2) = "=IFERROR(VLOOKUP(A1,'" & ThisWorkbook.Path & "\[FICHIER AVEC REFERENCES.xlsx]Feuil1'!A$1:B$100,2,0),"""")"
    .Columns(2) = .Columns(2).Value 'supprime les formules
    .Columns(2).Copy .Columns(1) 'copier-coller
    .Columns(2).ClearContents 'RAZ
End With
End Sub
 

mcj1997

XLDnaute Accro
Pour compléter ce que j'ai dit au post #15 voyez ce fichier (2) et la macro du bouton :
VB:
Sub Remplacer()
Application.ScreenUpdating = False
With [A1].CurrentRegion
    .Columns(2) = "=IFERROR(VLOOKUP(A1,'" & ThisWorkbook.Path & "\[FICHIER AVEC REFERENCES.xlsx]Feuil1'!A$1:B$100,2,0),"""")"
    .Columns(2) = .Columns(2).Value 'supprime les formules
    .Columns(2).Copy .Columns(1) 'copier-coller
    .Columns(2).ClearContents 'RAZ
End With
End Sub
Merci, c'est bien aussi, par contre avec cette solution il faut que je rentre la macro dans le fichier que je reçois, mais c'est plus simple de saisir le tableau des références dans le fichier références.
 

Robert

XLDnaute Barbatruc
Repose en paix
Merci beaucoup, c'est top, maintenant je fais faire de la saisie dans le code afin de rentrer toutes les références.
Une question y aurait moyen qu'au cas ou la référence ne soit pas rentrée dans la macro, qu'elle tourne tout de même et pointe ensuite sur l'erreur. En effet cela pourrait arriver que je reçoive un fichier avec un nom non référencé dans la macro.
Dans l'attente encore merci !!!
Re,

C'est bien pour cela que depuis le début on se tue à te demander les fichiers. Je me doutais bien qu'il n'y avait pas que trois départements te je t'aurais proposé un code différent (pas aussi efficace que celui de Job, que je salue, mais lui c'est spécial, c'est en extraterrestre...).
Peut-être tu retiendras cela pour tes prochains posts...
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin