Macro table de correspondance au sein classeur unique
Bonjour à toutes et tous,
Imaginons un classeur contenant 2 onglets : Table et Base
Table : table de correspondance entre d'anciens codes et de nouveaux code (alpha, numérique et ou alpha numérique)
Base : une base données (énormément de valeurs) contenant en colonne A dans mon exemple des valeurs avec des anciens codes ou nouveaux codes
Je cherche via une macro (j'arrive par formule recherche V par exemple mais avec ajout d'une colonne supplémentaire que je veux absolument éviter de créer qui plus est avec obligation d'étirer la formule au fur et à mesure des imports de données, je voudrais automatiser un peu plus) remplacer dans base colonne A les anciens codes si présents par les nouveaux codes conformément à la table de correspondance. Les anciens codes seraient écrasés par les nouveaux. (pas besoin de conserver historique)
En faisant une recherche sur le forum, j'ai trouvé le post ci après qui se rapproche le plus de ce que je souhaite réaliser mais avec plusieurs classeurs, un contenant la base et un autre la table et qui ne gère pas les codes non présents dans la table de données (en outre get open file name n'est pas compatible sous Excel pour Mac).
https://forum.excel-pratique.com/excel/rechercher-et-remplacer-avec-une-table-de-correspondance-t59293.html
Je joins un classeur exemple minimaliste sur la forme et le fond (la base réelle pouvant contenir des milliers de lignes).
Ce fichier exemple contient 3 feuilles : la table de correspondance, base avant macro et base après macro. Mais le fichier final lui ne doit contenir que 2 onglets table et base (tel que imagé pour le cheminement via base avant macro et base après macro).
J'ai essayé d'exprimer ma requête le plus simplement possible en espérant que cela donnera envie à une personne de ce forum de se pencher sur mon problème et me donner un coup de pouce.
Merci
Cordialement
Hugues
Bonjour,
Il faut être sûr qu'aucun ancien code ne se retrouve en nouveau code...
Et tu ne pourrais pas trouver un PC pour réaliser cette opération (ponctuelle) ?
La méthode rêvée pour traiter ça est d'utiliser le Dictionnaire ! Mais pas sur Mac !!
Cordialement.
Bonjour,
Merci MFERRAND de t'intéresser à mon problème.
J'ai une machine virtuelle windows sous mon Mac avec Excel 2010 windows à laquelle je peux faire appel si la solution sous windows répond bien à mon besoin d'automatisation.
Autrement oui il est certains qu'aucuns anciens codes ne puissent se retrouver en nouveau codes car la nouvelle codification à justement introduit l'obligation de caractères supplémentaires ou de codes non déjà utilisés.
Je ne connais pas la notion de "DICTIONNAIRE" (chouette encore un truc qu'il va falloir que j'essaye d'assimiler après recherche)
Je reste donc à ton écoute pour tes conseils et une proposition de code faisant appel à ce dictionnaire que j'essayerais d'adapter.
Merci
Cordialement
Hugues
MFerrand a écrit :La méthode rêvée pour traiter ça est d'utiliser le Dictionnaire ! Mais pas sur Mac !!
Cordialement.
Bonjour,
voir : http://boisgontierjacques.free.fr/
où il utilise les collections...
Mais c'est là que je vois que mon excel windows est mieux que mon excel Mac pour pas mal de raisons et de loin !
P.
patrick1957 a écrit :MFerrand a écrit :La méthode rêvée pour traiter ça est d'utiliser le Dictionnaire ! Mais pas sur Mac !!
Cordialement.
Bonjour,
voir : http://boisgontierjacques.free.fr/
où il utilise les collections...
Mais c'est là que je vois que mon excel windows est mieux que mon excel Mac pour pas mal de raisons et de loin !
P.
Bonjour Patrick,
Merci pour le lien je vais aller voir.
C'est certains que Excel mac est beaucoup plus limité que Excel windows, et c'est encore plus le cas avec Excel Mac 2015 (autant Excel 2011 Mac avait été une avancé au contraire) qui ne gère même plus la création des userform par exemple.
Cordialement
Hugues
Bonjour,
Salut Patrick !
Effectivement, la collection peut s'avérer une solution...
En tout cas voici la version dico (plus rapide ainsi que le souligne Boisgontier).
Si tu peux la faire fonctionner...
Sub MAJcode()
Dim d As Object, n%, i%
Set d = CreateObject("Scripting.Dictionary")
With Worksheets("TABLE")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 2 To n
d(.Cells(i, 1).Value) = .Cells(i, 2)
Next i
End With
With Worksheets("BASE")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 2 To n
If d.exists(.Cells(i, 1).Value) Then _
.Cells(i, 1) = d(.Cells(i, 1).Value)
Next i
.Activate
End With
End Sub
J'ai mis un bouton pour la tester sur la feuille TABLE.
Cordialement.
Bonjour,
Mferrand merci beaucoup pour ta contribution qui fonctionne parfaitement sous mon environnement Excel windows
Je vais adapter ton code sur ma base réelle car dés à présent cela me permet d'avancer même si je suis obligé de changer d'environnement système d'exploitation.
Tout en continuant mes recherches sur une solution via COLLECTION comme évoqué par Patrick.
Je laisse encore un peu le post comme non résolu pour continuer à obtenir des pistes dans ce sens
Encore merci Mferrand.
Cordialement
Hugues
Bonjour à toutes et tous,
Patrick, Mferrand encore une fois merci de l'intérêt et les conseils.
Mferrand je garde ton code notamment pour sa rapidité d'excécution, même si je ne peux le faire tourner sur mon Excel MAC 2011.
Cela m'a donné envie d'approfondir mes connaissances sur dictionary.
Je partage ce code issu de mes recherches (qui n'est pas de ma création je remercie son auteur) qui à priori fonctionne que ce soit sous windows et mac (je n'ai pas encore complètement testé sur une très grande base et pour tous les cas de figure et peut être est il largement moins rapide que la solution via dictionary de MFERRAND)
Je reste à l'écoute de vos conseils et remarques.
Sub MAJcode()
Application.ScreenUpdating = False
Dim n As Integer
Dim d() As String
With Worksheets("TABLE")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
ReDim Preserve d(2, n + 1)
For i = 1 To n
d(1, i) = .Cells(i, 1).Value
d(2, i) = .Cells(i, 2).Value
Next i
End With
With Worksheets("BASE")
m = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 1 To m
For j = 1 To n
If d(1, j) = .Cells(i, 1).Value Then _
.Cells(i, 1).Value = d(2, j)
Next j
Next i
.Activate
End With
End Sub
Merci
Cordialement
Hugues
Bonsoir,
Je te proposerai volontiers de la modifier comme suit :
Sub MAJcodeTablo()
Dim Cold(), Cnew(), n%, i%, j%
With Worksheets("TABLE")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
ReDim Cold(1 To n - 1): ReDim Cnew(1 To n - 1)
For i = 2 To n
Cold(i - 1) = .Cells(i, 1)
Cnew(i - 1) = .Cells(i, 2)
Next i
End With
With Worksheets("BASE")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
On Error Resume Next
For i = 2 To n
j = WorksheetFunction.Match(.Cells(i, 1), Cold, 0)
If Err.Number = 0 Then
.Cells(i, 1) = Cnew(j)
Else
Err.Clear
End If
Next i
.Activate
End With
End Sub
Je peux expliquer pour chaque ligne les raisons des modifications... mais l'intéressant est que tu la testes.
Je pense par ailleurs que l'utilisation d'une Collection devrait être plus rapide, mais je suis sur un truc un peu fastidieux à écrire et j'en ai trop d'autres en attente pour me lancer là-dedans dans l'immédiat.
Cordialement.
Bonjour MFERRAND,
Une nouvelle fois merci pour ta contribution.
Je vais tester ton code mais déjà en première lecture je comprend qu'il y'a un test d'erreur et c'est une bonne chose.
Je comprend tout a fait et je trouve cela normal que tu ne puisses pas passer plus de temps pour une solution via collection; tout d'abord parce que tu as résolu mon problème si windows et en plus améliorer le code fonctionnant sous MAC. J'ai donc une solution fonctionnelle.
Merci
Cordialement
Hugues
Bonsoir,
Le test d'erreur joue un rôle : si erreur la clé est déjà la nouvelle, on ne remplace pas, on passe à la suivante...
Pour boucler, une dernière à tester...
Sub MAJcodeCollec()
Dim d As New Collection, n%, i%
With Worksheets("TABLE")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 2 To n
d.Add .Cells(i, 2), CStr(.Cells(i, 1))
Next i
End With
With Worksheets("BASE")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
On Error Resume Next
For i = 2 To n
.Cells(i, 1) = d(CStr(.Cells(i, 1)))
Next i
End With
End Sub
Si tu peux nous informer des avantages relatifs des unes et autres selon tes tests, ça nous intéresse...
Cordialement.
Bonjour MFERRAND, Bonjour à toutes et tous
Merci du temps consacré.
Me voilà en possession d'un panel complet de solutions.
J'adapte les différents codes à ma base réelle et je ne manquerais pas de revenir vers vous d'ici une petite semaine pour un comparatif et vous dire pourquoi j'ai un code plutôt que l'autre.
Merci beaucoup
Cordialement
Hugues
Bonjour MFERRAND, Bonjour à toutes et tous,
Premiers essais sur une partie de ma base réelle et un bug :" Erreur d'exécution « 457 »:Cette clé est déjà associée à un élément de cette collection" avec le code dit "collection" alors que aucun problème avec l'autre code optimisé par MFERRAND.
Je joins un classeur exemple avec des données réelles non confidentielles en l'état, car c'est bien avec ce jeu de données que le problème survient, alors que pas de problèmes avec le fichier exemple initial. Sans que je n'arrive à me l'expliquer,
Je continue de tester et de tenter des modifications mais vos avis sont les bienvenus.
Cordialement
Hugues
A-priori rien de surnaturel ni de problématique !
Par définition, la table de correspondance implique deux colonnes : ancien code / nouveau code. Soit à tout ancien code correspond un nouveau code, sans doublon et sans vide (si un élément n'existe pas la ligne doit disparaître.
L'erreur apparaît sur cette version car l'ancien code est la clé : une clé vide n'est pas rejetée, mais si on essaie de l'attribuer à plusieurs éléments ça plante ! Elle ne peut être doublonnée.
Si les autres versions ne plante pas avec une telle table, cela ne veut pas dire qu'elles vont fonctionner sans erreur.
Le dico élimine naturellement les doublons lors de sa constitution. Je pensais qu'il ne devrait pas accepter une clé vide (?) mais si c'est le cas, il n'y en aura qu'une.
Quant au tableau, tout sera en tableau mais si doublon, seul le premier trouvé sera considéré...
La situation prévue est : pas de doublons dans les anciens codes, correspondance de chaque ancien code avec un nouveau. Et pas de code (ancien) inexistant ! Si la table comprend des vides, il faut mettre un test dans toutes les versions pour les éliminer dès l'entrée ! Pure logique ! Un ancien code inexistant ne saurait être remplacé !
Le cas où 2 anciens codes sont remplacés par un même nouveau code est par contre envisageable et devrait passer sur toutes les versions.
Cordialement.
Bonjour à toutes et tous, Bonjour MFERRAND,
Je suis toujours bluffé par les qualités et la rapidité de tes réponses je t'envois donc de nouveau un merci
"La table est fausse" tout simplement, j'adore et le smiley qui va avec encore plus. Car cela montre bien que j'ai encore beaucoup de chose à apprendre moi qui fonctionne par tâtonnement.
Je vais donc relire ton message plusieurs fois, continuer mes essais de compréhension des codes car là en première lecture à mon niveau cela ne me parait pas encore aussi simple et clair que pour toi.
Mais que j'apprécie tes remarques et ton aide.
merci beaucoup
Cordialement
Hugues
Tu vas vite t'y retrouver !
Il est certain qu'un code ancien vide va foutre le bazar, sauf si l'absence de code ancien avait pour correspondance un unique nouveau code... ce qui n'est pas le cas.
Si tu dois extraire les codes d'une table comportant des vides, et que tu ne parviens pas à mettre en place les conditions pour ne pas prélever dans ce cas, manifeste-toi...
Bon weekend.
Bonjour à toutes et tous, Bonjour Patrick et MFerrand,
Grace à vos conseils, et je tiens encore une fois à vous remercier, je suis arrivé à mes fins et j'ai pu créer une macro correspondant à mon besoin.
Résumé de mon besoin :
A partir d'un export de notre ancien logiciel de paye qui me génère plusieurs feuilles je veux créer une seule feuille de synthèse avec des entêtes, des contenus, des rajouts via calcul etc.. parfois différents des feuilles initiales et surtout une table de correspondance (cf macro nommée correspondance dans mon code, crée via l'aide de Mferrand) pour gérer les noms des magasins.
J'ai retenu la solution via méthode collection, car compatible sur Excel Mac (contrairement à méthode via Dico), c'est aussi celle que j'ai la mieux comprise et pu adapter et enfin les temps de traitements sur ma base réelle sont bons (mois de 10 secondes pour environs 20 feuilles de 300 lignes et 30 colonnes en moyenne chacune).
Même si je tâtonne encore un peu sur la compréhension de la partie du code ci après pour traiter et appliquer les résultats issus de la table de correspondance aux colonnes de mon choix.
Je ne sais pas par exemple comment modifier la macro ave une table qui aurait les anciens codes magasins en colonne D et les nouveaux en C(ici ancien code en A et nouveau en B) et qui appliquerait les modification issus de la lecture de la colonne C sur la feuille finale (ici en colonne A).
With Worksheets("TABLE")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 2 To n
d.Add .Cells(i, 2), CStr(.Cells(i, 1))
Next i
End With
With Worksheets("CADOR")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
On Error Resume Next
For i = 2 To n
.Cells(i, 1) = d(CStr(.Cells(i, 1)))
Next i
Je concède que ce message est certainement un peu long, surtout pour un post résolu mais MFERRAND vous vouliez avoir mon retour.
Ci après mon code finalisé (je reste bien entendu encore à l'écoute vos conseils d'améliorations) et 2 fichiers un comprenant la macro et un jeu de données fictives avant exécution de la macro nommé CADOR et l'autre le jeu de données fictives.
Merci
Cordialement
Hugues
Sub Cador()
Dim debut As Date, temps As Date, fin As Date
debut = Time
Dim WS As Worksheet
On Error Resume Next
Set WS = ThisWorkbook.Worksheets("CADOR")
On Error GoTo 0
If Not WS Is Nothing Then
Sheets("CADOR").Activate
Sheets("CADOR").Range("A1").Select
Else
Sheets.Add.Name = "CADOR"
Range("A1").Select
End If
Call Fusion
Call InsertColDE
Call FormuleColD
Call FormuleColE
Call ColSpeValDE
Call SuppColABC
Call FormuleColW
Call ColSpeValW
Call FormuleColX
Call ColSpeValX
Call FormuleColY
Call ColSpeValY
Call FormuleColZ
Call ColSpeValZ
Call EnteteCador
Call CreafeuillTable
Call Correspondance
Call SuppFeuilles
Sheets("CADOR").Activate
Range("A1").Select
fin = Time
temps = fin - debut
MsgBox ("Mise en forme Export Cador terminé !" & Chr(10) & Chr(10) & "Temps de traitement : " & temps & Chr(10) & Chr(10) & "Mettre à jour table de correspondance" & Chr(10) & "si création nouveau magasin et ou société !")
End Sub
Sub Fusion()
Dim Lg&, Sh As Worksheet, f As Worksheet
Set f = Sheets("CADOR")
f.Range("a1:am" & f.[a1048576].End(xlUp).Row).ClearContents 'efface Récap
For Each Sh In Worksheets
If Sh.Name <> f.Name And Sh.Name <> "TABLE" Then 'feuilles à ne pas traiter
Lg = Sh.Range("a" & Rows.Count).End(xlUp).Row
Sh.Range("a2:am" & Lg).Copy Destination:= _
f.Range("a" & Rows.Count).End(xlUp)(2)
End If
Next
Sheets("CADOR").Move Before:=Sheets(1)
Range("A1").Select
End Sub
Sub InsertColDE()
Sheets("CADOR").Select
Range("D:E").Insert Shift:=xlToRight
End Sub
Sub FormuleColD()
Dim DernièreLigne As Long
DernièreLigne = WorksheetFunction.Max(Cells(Rows.Count, 1).End(xlUp).Row, Cells(Rows.Count, 2).End(xlUp).Row, Cells(Rows.Count, 3).End(xlUp).Row)
For lignes = DernièreLigne To 2 Step -1
If Cells(lignes, 2) <> "" And Cells(lignes, 3) <> "" Then
Range("D" & lignes).FormulaLocal = "=CONCATENER((" & Range("B" & lignes).Address & ");(" & Range("C" & lignes).Address & "))"
End If
Next lignes
End Sub
Sub FormuleColE()
Dim DernièreLigne As Long
DernièreLigne = WorksheetFunction.Max(Cells(Rows.Count, 1).End(xlUp).Row, Cells(Rows.Count, 2).End(xlUp).Row, Cells(Rows.Count, 3).End(xlUp).Row)
For lignes = DernièreLigne To 2 Step -1
If Cells(lignes, 1) <> "" Then
Range("E" & lignes).FormulaLocal = "=DATE(ANNEE(" & Range("A" & lignes).Address & "); MOIS(" & Range("A" & lignes).Address & ");1)"
End If
Next lignes
End Sub
Sub ColSpeValDE()
Columns("D:D").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Columns("E:E").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
End Sub
Sub SuppColABC()
Sheets("CADOR").Select
Range("A:A,B:B,C:C").Delete Shift:=xlToLeft
End Sub
Sub FormuleColW()
Dim DernièreLigne As Long
DernièreLigne = WorksheetFunction.Max(Cells(Rows.Count, 1).End(xlUp).Row, Cells(Rows.Count, 3).End(xlUp).Row, Cells(Rows.Count, 4).End(xlUp).Row)
'
For lignes = DernièreLigne To 2 Step -1
If Cells(lignes, 1) <> "" Then
Range("W" & lignes).FormulaLocal = "=ARRONDI(((" & Range("S" & lignes).Address & "+" & Range("T" & lignes).Address & "+" & Range("U" & lignes).Address & ")/(52/12))*" & Range("L" & lignes).Address & "/6;0)"
End If
Next lignes
End Sub
Sub ColSpeValW()
Columns("W:W").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
End Sub
Sub FormuleColX()
Dim DernièreLigne As Long
DernièreLigne = WorksheetFunction.Max(Cells(Rows.Count, 1).End(xlUp).Row, Cells(Rows.Count, 3).End(xlUp).Row, Cells(Rows.Count, 4).End(xlUp).Row)
For lignes = DernièreLigne To 2 Step -1
If Cells(lignes, 1) <> "" Then
Range("X" & lignes).FormulaLocal = "=SI(" & Range("E" & lignes).Address & "=""Contrat à durée déterminée"";" & Range("K" & lignes).Address & ";0)"
End If
Next lignes
End Sub
Sub ColSpeValX()
Columns("X:X").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
End Sub
Sub FormuleColY()
Dim DernièreLigne As Long
DernièreLigne = WorksheetFunction.Max(Cells(Rows.Count, 1).End(xlUp).Row, Cells(Rows.Count, 3).End(xlUp).Row, Cells(Rows.Count, 4).End(xlUp).Row)
For lignes = DernièreLigne To 2 Step -1
If Cells(lignes, 1) <> "" Then
Range("Y" & lignes).FormulaLocal = "=" & Range("K" & lignes).Address & "+" & Range("W" & lignes).Address & ""
End If
Next lignes
End Sub
Sub ColSpeValY()
Columns("Y:Y").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
End Sub
Sub FormuleColZ()
Dim DernièreLigne As Long
DernièreLigne = WorksheetFunction.Max(Cells(Rows.Count, 1).End(xlUp).Row, Cells(Rows.Count, 3).End(xlUp).Row, Cells(Rows.Count, 4).End(xlUp).Row)
For lignes = DernièreLigne To 2 Step -1
If Cells(lignes, 1) <> "" Then
Range("Z" & lignes).FormulaLocal = "=" & Range("H" & lignes).Address & "+" & Range("I" & lignes).Address & ""
End If
Next lignes
End Sub
Sub ColSpeValZ()
Columns("Z:Z").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
End Sub
Sub EnteteCador()
Sheets("CADOR").Activate
Sheets("CADOR").Range("A1").FormulaR1C1 = "Magasin"
Sheets("CADOR").Range("B1").FormulaR1C1 = "Date de règlement"
Sheets("CADOR").Range("C1").FormulaR1C1 = "Nom du salarié"
Sheets("CADOR").Range("D1").FormulaR1C1 = "Prénom du salarié"
Sheets("CADOR").Range("E1").FormulaR1C1 = "Contrat de travail"
Sheets("CADOR").Range("F1").FormulaR1C1 = "Salaires"
Sheets("CADOR").Range("G1").FormulaR1C1 = "Primes"
Sheets("CADOR").Range("H1").FormulaR1C1 = "Rupture"
Sheets("CADOR").Range("I1").FormulaR1C1 = "Protocole"
Sheets("CADOR").Range("J1").FormulaR1C1 = "Charges"
Sheets("CADOR").Range("K1").FormulaR1C1 = "Heures"
Sheets("CADOR").Range("L1").FormulaR1C1 = "Jours CP"
Sheets("CADOR").Range("M1").FormulaR1C1 = "Heures complementaires 10%"
Sheets("CADOR").Range("N1").FormulaR1C1 = "Heures complementaires 25%"
Sheets("CADOR").Range("O1").FormulaR1C1 = "Heures complementaires 50%"
Sheets("CADOR").Range("P1").FormulaR1C1 = "Heures complementaires 10% €"
Sheets("CADOR").Range("Q1").FormulaR1C1 = "Heures complementaires 25% €"
Sheets("CADOR").Range("R1").FormulaR1C1 = "Heures complementaires 50% €"
Sheets("CADOR").Range("S1").FormulaR1C1 = "Base contrat"
Sheets("CADOR").Range("T1").FormulaR1C1 = "35 a 39"
Sheets("CADOR").Range("U1").FormulaR1C1 = "39 forfait"
Sheets("CADOR").Range("V1").FormulaR1C1 = "R[REMUNERATION_NETTE]"
Sheets("CADOR").Range("W1").FormulaR1C1 = "Heures CP"
Sheets("CADOR").Range("X1").FormulaR1C1 = "Heures CDD"
Sheets("CADOR").Range("Y1").FormulaR1C1 = "Heures W"
Sheets("CADOR").Range("Z1").FormulaR1C1 = "Exceptionnel"
End Sub
Sub CreafeuillTable()
Dim WS2 As Worksheet
On Error Resume Next
Set WS2 = ThisWorkbook.Worksheets("TABLE")
On Error GoTo 0
If Not WS2 Is Nothing Then
Sheets("TABLE").Activate
Sheets("TABLE").Range("A1").Select
Else
Sheets.Add.Name = "TABLE"
Sheets("TABLE").Range("A1").FormulaR1C1 = "CADOR"
Sheets("TABLE").Range("A2").FormulaR1C1 = "CCAU0"
Sheets("TABLE").Range("A3").FormulaR1C1 = "CCRE0"
Sheets("TABLE").Range("A4").FormulaR1C1 = "BNB0"
Sheets("TABLE").Range("A5").FormulaR1C1 = "BREA0"
Sheets("TABLE").Range("A6").FormulaR1C1 = "SCOT0"
Sheets("TABLE").Range("A7").FormulaR1C1 = "MULT0"
Sheets("TABLE").Range("A8").FormulaR1C1 = "MULTI_BLAI0"
Sheets("TABLE").Range("A9").FormulaR1C1 = "MUZ0"
Sheets("TABLE").Range("A10").FormulaR1C1 = "ESPR0"
Sheets("TABLE").Range("A11").FormulaR1C1 = "GDES0"
Sheets("TABLE").Range("A12").FormulaR1C1 = "CELI0"
Sheets("TABLE").Range("A13").FormulaR1C1 = "VIBS2"
Sheets("TABLE").Range("A14").FormulaR1C1 = "LANG1"
Sheets("TABLE").Range("A15").FormulaR1C1 = "LANG2"
Sheets("TABLE").Range("A16").FormulaR1C1 = "VIBS1"
Sheets("TABLE").Range("A17").FormulaR1C1 = "LANG3"
Sheets("TABLE").Range("B1").FormulaR1C1 = "HUGUES"
Sheets("TABLE").Range("B2").FormulaR1C1 = "Cache AURAY"
Sheets("TABLE").Range("B3").FormulaR1C1 = "Cache REDON"
Sheets("TABLE").Range("B4").FormulaR1C1 = "Bonobo REDON"
Sheets("TABLE").Range("B5").FormulaR1C1 = "Breal REDON"
Sheets("TABLE").Range("B6").FormulaR1C1 = "Scottage REDON"
Sheets("TABLE").Range("B7").FormulaR1C1 = "Multistore MUZIILAC"
Sheets("TABLE").Range("B8").FormulaR1C1 = "Multistore BLAIN"
Sheets("TABLE").Range("B9").FormulaR1C1 = "Poulain MUZILLAC"
Sheets("TABLE").Range("B10").FormulaR1C1 = "Esprit REDON"
Sheets("TABLE").Range("B11").FormulaR1C1 = "Esprit VANNES"
Sheets("TABLE").Range("B12").FormulaR1C1 = "Celio REDON"
Sheets("TABLE").Range("B13").FormulaR1C1 = "Celio REDON"
Sheets("TABLE").Range("B14").FormulaR1C1 = "Esprit LANGUEUX"
Sheets("TABLE").Range("B15").FormulaR1C1 = "Celio LANGUEUX"
Sheets("TABLE").Range("B16").FormulaR1C1 = "Multistore REDON"
Sheets("TABLE").Range("B17").FormulaR1C1 = "Berenger"
End If
Sheets("TABLE").Move Before:=Sheets(2)
End Sub
Sub Correspondance()
Dim d As New Collection, n%, i%
With Worksheets("TABLE")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 2 To n
d.Add .Cells(i, 2), CStr(.Cells(i, 1))
Next i
End With
With Worksheets("CADOR")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
On Error Resume Next
For i = 2 To n
.Cells(i, 1) = d(CStr(.Cells(i, 1)))
Next i
End With
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
Sheets("TABLE").Delete
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Sub SuppFeuilles()
'Supprimer toutes les feuilles sauf la première CADOR
If Sheets.Count = 1 Then Exit Sub
Dim tablo(), i
ReDim tablo(Sheets.Count - 2)
For i = 2 To ThisWorkbook.Sheets.Count
tablo(i - 2) = Sheets(i).Name
Next
Application.DisplayAlerts = False
Sheets(tablo).Delete
End Sub
Bonjour,
Rapidement car pas le temps de tout lire...
Si on avait A=>B
Et tu as D=>C
Dans tous les Cells(ligne, colonne), tu remplaces le chiffre colonne :
Remplacer 1 par 4
Remplacer 2 par 3
Cordialement.
MFerrand a écrit :Bonjour,
Rapidement car pas le temps de tout lire...
Si on avait A=>B
Et tu as D=>C
Dans tous les Cells(ligne, colonne), tu remplaces le chiffre colonne :
Remplacer 1 par 4
Remplacer 2 par 3
Cordialement.
Bonjour MFerrand,
Merci
Cordialement