Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Macro pr renommer des codes sur un planning

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Christian0258

XLDnaute Accro
Bonjour à tout le forum,

Je souhaiterais votre aide pour l'écriture d'une macro afin de renommer, dans un planning, des codes selon un tableau de correspondances définies...

voir fichier.

Merci pour le temps que vous voudrez bien m'accorder.

Bien amicalement,
Christian
 

Pièces jointes

Re : Macro pr renommer des codes sur un planning

Bonjour Christian, bonjour à tout le Forum XLD

Je me fais toujours aussi rare, désolé, mais je vais bien.

Chistian, une réponse assez simple consiste à travailler sur des Objets "Range" (c'est plus long au niveau traitement qu'un tableau séquentiel, mais celà à l'avantage d'être lisible et simple pour des débutants en VBA, de plus ton planning est assez court ainsi que ta table de Codes)

Voici le Code

Code:
Option Explicit
Sub TheRecoder()
Dim WSSource As Worksheet, WSCible As Worksheet
Dim RangeSource As Range, CellSource As Range
Dim RangeCible As Range, CellCible As Range
 
Set WSSource = ThisWorkbook.Worksheets("Codes")
Set WSCible = ThisWorkbook.Worksheets("Planning")
With WSSource
    Set RangeSource = Range(.Range("A3"), .Range("A5000").End(xlUp))
End With
With WSCible
    Set RangeCible = Range(.Range("B6"), .Range("AF40")) [COLOR=darkgreen]'A Ajuster à la taille du planning[/COLOR]
End With
 
For Each CellCible In RangeCible
    For Each CellSource In RangeSource
            If CellCible = CellSource Then
                CellCible = CellSource.Offset(0, 1)
            Exit For
            End If
    Next CellSource
Next CellCible
 
End Sub

A mettre dans un module standard de l'éditeur VBA

Bon Week End

@+Thierry
 
Dernière édition:
Re : Macro pr renommer des codes sur un planning

Bonjour Christian, bonjour le forum,

Je te propose la macro suivante :
Code:
Sub Macro1()
Dim cel As Range 'déclare la variable cel (CELlule)
Dim pl As Range 'déclare la variable pl (PLage)
Dim r As Range 'déclare la variable r (Recherche)
 
With Sheets("Codes") 'prend en compte l'onglet "Codes"
    Set pl = .Range("A3:B" & .Range("B65536").End(xlUp).Row) 'définit la plage pl
End With 'fin de la prise en compte de l'onglet "Codes"
For Each cel In Sheets("Planning").Range("B6:AF40") 'boucle sur toutes les cellules cel de la plage B6:AF40
    Set r = pl.Find(cel.Value, , xlValues, xlWhole) 'définit la variable r (Recherche la cellule dans la plage pl)
    'si il existe au moins une occurrence de r dans pl, la cellule cel prend la valeur de la cellule à droite de r
    If Not r Is Nothing Then cel.Value = r.Offset(0, 1).Value
Next cel
End Sub

Édition :

Ho p... Thierry ! Ça fait super plaisir de te revoir... C'est vrai que tu te fais trop rare, aussi rare qu'un concert des "Village People" (m... je pas sûr du nom de ton groupe préféré ? le doute m'habite subitement...)
 
Dernière édition:
Re : Macro pr renommer des codes sur un planning

Bonjour,
Un autre exemple
Code:
Sub Recoder()
    Application.ScreenUpdating = False
    Dim Tabl()
    Sheets("Codes").Activate
    A = Range("A3:B59").Value
    For i = 1 To UBound(A)
        ReDim Preserve Tabl(1 To UBound(A), 2)
        Tabl(i, 1) = A(i, 1)
        Tabl(i, 2) = A(i, 2)
    Next i
    Sheets("Planning").Activate
    Range("B6:AF40").Select
    For Each Cell In Selection
        For j = 1 To UBound(A)
            If Cell.Value = Tabl(j, 1) Then Cell.Value = Tabl(j, 2):Exit For
        Next j
    Next Cell
    [A1].Select
End Sub
 

Pièces jointes

Dernière édition:
Re : Macro pr renommer des codes sur un planning

Hello Robert, re Christian, Bonjour Renauder, le Forum

Et oui Robert, ce n'est pas "Village People", nan, tu ne passes pas par la case départ et tu ne touches pas 20 K Francs !

Content que tu soies en bonne forme semble-t'il mon cher Robert, moi aussi d'ailleurs !

Ici une photo en Partant à Munich pour AC-DC "Rock N Roll Train Tour" (et oui les Stones se reposent !)



Pour ton Code Robert, oui tout à fait avec le "Find", ce doit être peut-être un poil plus rapide que ma double boucle.

Pour Renauder, oui un tableau indexé séquentiellement est toujours plus rapide, mais alors il faudrait tout faire avec deux tableaux et ne pas passer par une boucle en final qui, de plus, ne travaille pas sur un objet Range, mais directement sur une selection. (gros ralentissement). Mais comme j'avais annoncé le Planning de Christian est miniature, (enfin sur son exemple) donc tous les chemins sont bons !

Bon Week End à tous et Toutes
@+Thierry
 
Dernière édition:
Re : Macro pr renommer des codes sur un planning

Bonjour,

Comme Thierry le suggérait, j'ai fait des modifs.
Code:
Sub Recoder()
    Application.ScreenUpdating = False
    Dim Tabl2(): Dim B(): Dim Tabl3()
    Sheets("Codes").Activate
    A = Range("A3:B59").Value
    For I = 1 To UBound(A)
        ReDim Preserve Tabl2(1 To UBound(A), 2)
        Tabl2(I, 1) = A(I, 1)
        Tabl2(I, 2) = A(I, 2)
    Next I
    Sheets("Planning").Activate
    Range("B6:AF40").Select
    B = Selection.Value
    NRow = Selection.Rows.Count
    NCol = Selection.Columns.Count
    For K = 1 To NRow
        For I = 1 To NCol
            ReDim Preserve Tabl3(1 To NRow, 1 To NCol)
            Tabl3(K, I) = B(K, I)
            For G = 1 To UBound(A)
                If Tabl3(K, I) = A(G, 1) Then Tabl3(K, I) = A(G, 2): Exit For
            Next G
        Next I
    Next K
    Sheets("Planning").Activate
    Range("B6").Resize(UBound(Tabl3, 1), UBound(Tabl3, 2)) = Tabl3
    [A1].Select
End Sub
 

Pièces jointes

Re : Macro pr renommer des codes sur un planning

Re le forum, Thierry, Robert, Renauder,

Encore merci à vous trois pour vos propositions.

Thierry faisait remarquer, à juste titre, que mon planning était petit.

Question ; peut-on imaginer dans la feuille planning, en Cel H1 de noter l'adresse de la cellule début de plage à analyser et en cellule H2 l'adresse fin plage (ce qui permet d'étendre à la demande la zone à traiter).


Merci pour votre aide si précieuse.

Amitiés,
Christian
 
Re : Macro pr renommer des codes sur un planning

Bonjour,
Si tu gardes ta feuille Planning telle quelle ..
alors remplaces
Code:
 Range("B6:AF40").Select
par
Code:
Range("B6").Select
With Selection.CurrentRegion
    Intersect(.Cells, .Offset(1, 1)).Select
End With
et la sélection restera dynamique.
 
Re : Macro pr renommer des codes sur un planning

Bonjour,
C'est que tu as
Option Explicit
d'inscris en haut du module.
Mets cette ligne en commentaire
ou alors tu ajoutes
Code:
    Dim A As Variant
    Dim i As Integer
    Dim K As Integer
    Dim g As Integer
    Dim NRow As Integer
    Dim NCol As Integer
 
Dernière édition:
Re : Macro pr renommer des codes sur un planning

Salut Christian0258
Bonsoir le fil
Bonsoir le Forum

arff un peu tard mais je ne peux m'empêcher de venir saluer dans l'ordre @+Thierry (mon maître lol) et Eric qui fait un très beau travail et au travers de qui j'apprends beaucoup)
d'où cette adaptation du code de notre Ami pour pouvoir participer lol

Code:
Sub Recoder2()
Dim Tabtemp As Variant
Dim Rng As Range
Dim L As Long
Application.ScreenUpdating = False
With Worksheets("Codes")
   Tabtemp = .Range(.Cells(3, 1), .Cells(.Cells(.Cells.Rows.Count, 1) _
                                                      .End(xlUp).Row, 2)).Value
End With
With Worksheets("Planning")
     With .Range("B6").CurrentRegion
   Set Rng = Intersect(.Cells, .Offset(1, 1))
     End With
End With
For L = 1 To UBound(Tabtemp, 1)
   Rng.Replace What:=Tabtemp(L, 1), Replacement:=Tabtemp(L, 2), _
      LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False,  _
          SearchFormat:=False, _
   ReplaceFormat:=True
Next
Erase Tabtemp
Application.ScreenUpdating = True
End Sub
Bonne fin de Soirée
 
Dernière édition:
Re : Macro pr renommer des codes sur un planning

Bonjour Thierry, Chti60, Robert et Christian,
Quand un problème posé sur le forum amène plusieurs solutions ?
Je me suis amusé d'abord à lire le code proposé par chacun d'entre vous car on y apprend toujours quelque chose puis ensuite, j'ai testé les solutions proposées. Pas de problèmes, elles fonctionnent toutes parfaitement.
Dans le cas du fichier proposé par Christian (1054 cellules), les 4 méthodes sont équivalentes en temps de traitement.
Toujours plus curieux, j'ai construit un plus grand fichier de données (277760 cellules-1120 lignes et 248 colonnes) et j'ai refait tourner chacun des codes proposés.
Et là surprise:
Les temps de traitement sont totalement différents.
Chti60 =15 secondes
Robert=1 minute et 5 secondes
Thierry=4 minutes
Eric=4 secondes
Je vous livre simplement ce résultat à titre de comparaison et cela montre comment l'utilisation de tableaux pour de gros fichiers peut parfois amener un gain de traitement important même si sa mise en œuvre n'est pas des plus aisée et j'en sais quelque chose car lorsque j'ai découvert ce petit bijou (tableaux), je me suis pas mal embrouillé au départ mais cela justifie parfois le temps investi à en comprendre le fonctionnement et surtout l'écriture du code car cela reste assez abstrait.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
40
Affichages
2 K
Réponses
66
Affichages
724
Réponses
8
Affichages
634
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…