Modifier des valeurs das le classeur (REMPLACER)
Bonjour,
Une nouvelle fois, je me tourne vers vous pour une macro qui ne fonctionne pas.
je cherche à créer une macro qui va venir modifier une valeur dans tous le classeur (idéal de la feuille 1 à 7, pour le moment je n'ai pas paramétrer cette ligne)
pour cela je veux sélectionner l'ancienne valeur et saisir la nouvelle. ça, pas de souci, l'opération fonctionne. le code est 2112
mais après la modification ne se fait pas.
quelqu'un peut-il m'aider ?
je vous joins mon fichier et voici le code
Sub Modifier_salarié()
Call ProtVBA
Dim select_init As Range, salarié As Range
Dim i As Integer
Dim id_salarié As Variant
Dim NvoTxt As String, AncTxt As String
Dim Fe As Worksheet
If MsgBox("Sélectionner le salarié à modifier", vbOkNo) = vbNo Then Exit Sub
With Range("Suivi_Dossiers").ListObject
ActiveSheet.Range("A1").Select: Set select_init = Selection
While Selection = select_init And ActiveSheet.Name = .Range.Worksheet.Name
DoEvents
Wend
Set salarié = Intersect(Selection, .ListColumns(1).DataBodyRange)
If salarié Is Nothing Then MsgBox "Aucun salarié sélectionné": Exit Sub
AncTxt = id_salarié
NvoTxt = InputBox("saisir le nouveau nom du salarié")
If MsgBox("Confirmez-vous la modification de ce salarié ?", vbYesNo) = vbNo Then Exit Sub
id_salarié = salarié.Value
i = salarié.Row - .HeaderRowRange.Row
For Each Fe In Sheets
Fe.Cells.Replace What:=AncTxt, Replacement:=NvoTxt, LookAt:=xlWhole
Next Fe
End With
MsgBox "Salarié modifié"
End Sub
Merci par avance.
Bonjour Mayolis,
Voici un essai:
Sub Modifier_salarié()
Dim salarie$, NvoTxt$
Dim i&, Plg As Range, Ws As Worksheet
Dim c As Range, firstAddress As String
Dim Salarie_range As Range, trv As Boolean
Set Ws = ActiveSheet
Set Plg = Ws.Range("A2:A" & Ws.Cells(Rows.Count, 1).End(xlUp).Row)
Set Salarie_range = ActiveCell
If Not Application.Intersect(Salarie_range, Plg) Is Nothing Then
salarie = ActiveCell.Value
NvoTxt = InputBox("saisir le nouveau nom du salarié: " & Application.Proper(salarie))
If MsgBox("Confirmez-vous la modification de ce salarié ?", vbYesNo) = vbNo Then Exit Sub
Application.ScreenUpdating = False
For i = 1 To Worksheets.Count
Set Ws = Sheets(i)
Set Plg = Ws.Cells
Ws.Unprotect Password:="2112"
With Plg
Set c = .Find(salarie, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = Replace(c.Value, salarie, NvoTxt)
Set c = .FindNext(c)
Loop While Not c Is Nothing
trv = True
End If
End With
Call ProtVBA
Next i
End If
Application.ScreenUpdating = True
Sheets("Suivi Dossiers").Select
If trv = True Then MsgBox "Salarié: " & salarie & " modifié par: " & NvoTxt
Set Ws = Nothing: Set Plg = Nothing
End Sub
Bonjour,
Merci Florian pour ton code. il fonctionne hormis cett ligne de code qui me met en débogage. En revanche peux-tu me donner le détail parce que je n'arrive pas à traduire les étapes de la procédure et j'aimerais au besoin l'adapter à d'autre fichier.
c.Value = Replace(c.Value, salarie, NvoTxt)