Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Renommer un champ en Excel avec une macro (contenant plusieurs lig

1 réponse
Avatar
Isabelle
Bonjour,

Je voudrais faire renommer un champ en Excel avec une macro et j'aimerais
avoir votre aide pour résoudre mon problème (si vous avez une idée) voici la
description :

Mon fichier original est sous la forme suivante :

Nom
Code
Mandat

Je voudrais que quand ma colonne Code = SINON et que le Mandat = 1001,
renommer le champ Code par SINON_IN et Code = SINON et le Mandat = 2001
renommer le champ Code pour SINON_OUT.

Le fichier Excel peut contenir plusieurs lignes (40,000 lignes) avec
différents Mandat (le champ Code est toujours appelé de la même manière soit
SINON), c’est seulement la colonne Mandat qui change ex. 1001, 1002, 1003 et
j’ai une liste prédéfinis afin de renommer les mandats 1001 (SINON_IN), 1002
(SINON_IN), 2001 (SINON_OUT) selon s'ils sont IN ou OUT.

Exemple :

Fichier original :

Nom Code Mandat
Isabelle SINON 1001
Caroline SINON 1001
Benoit SINON 1002
ÉRIC SINON 2001

Fichier final :

Nom Code Mandat
Isabelle SINON_IN 1001
Caroline SINON_IN 1001
Benoit SINON_IN 1002
ÉRIC SINON_OUT 2001

S’il vous manque des informations, n’hésitez pas à me le demander.

Merci pour votre aide.

1 réponse

Avatar
michdenis
Bonjour Isabelle,

Essaie ceci :
Dans la procédure, tu as 2 variables de type "Tableau"
et tu dois t'assurer qu'il y a bien une correspondance
entre les éléments du tableaux
Mandat = Array(1001, 1002, 2001)
Code = Array("SINON", "SINON_IN", "SINON_OUT")
1001 -> SINON
1002 -> SINON_IN
2001 -> SINON_OUT
Tu peux allonger la liste, mais il faut t'assurer que la
correspondance est respectée.

à mettre dans un module standard, et tu devras adapter
le nom de la feuille où sont tes données

'---------------------------------------------
Sub test()
Dim DerLig As Long, Code As Variant
Dim Mandat As Variant, Elt As Variant
Dim A As Integer
Mandat = Array(1001, 1002, 2001)
Code = Array("SINON", "SINON_IN", "SINON_OUT")

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual

With Worksheets("Feuil1") 'à adapter
DerLig = .Range("A:C").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row

For Each Elt In Mandat
With .Range("C1:C" & DerLig)
.AutoFilter field:=.Columns.Count, Criteria1:=Elt
End With
With .Range("B1:B" & DerLig).SpecialCells(xlCellTypeVisible)
.Value = Code(A)
A = A + 1
End With
Next
.Range("C1:C" & DerLig).AutoFilter
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic

End Sub
'---------------------------------------------