Bonjour à tous, et excusez-moi par avance si le sujet a déjà été posté, mais je ne l'ai pas trouvé sur le fil de discussions.
J'ai hérité d'une macro, qui, comme le titre l'indique, vise à traduire toutes mes validations de données dans une feuille de travail.
-Une première partie, qui collecte toutes les validations de données et me les affiche dans un tableau, sur un feuillet qui se crée, nommé "messages". Texte ci-dessous:
Sub GetMessages()
'
Dim i As Integer
Dim myM As Worksheet
Dim myC As Range
Dim myRow As Long
Dim myCalc As XlCalculation
With Application
.DisplayAlerts = False
.EnableEvents = False
myCalc = .Calculation
.Calculation = xlCalculationManual
End With
Set myM = Worksheets.Add(before:=Worksheets(1))
myM.Name = "Messages"
myM.Cells(1, 1).Value = "Address"
myM.Cells(1, 2).Value = "Existing Input Title"
myM.Cells(1, 3).Value = "Existing InputMessage"
myM.Cells(1, 4).Value = "Existing Error Title"
myM.Cells(1, 5).Value = "Existing Error Message"
myM.Cells(1, 6).Value = "Translated Input Title"
myM.Cells(1, 7).Value = "Translated InputMessage"
myM.Cells(1, 8).Value = "Translated Error Title"
myM.Cells(1, 9).Value = "Translated Error Message"
myM.Rows(1).Cells.WrapText = True
On Error GoTo NoValidation
For i = 2 To Worksheets.Count
For Each myC In Worksheets(i).Cells.SpecialCells(xlCellTypeAllValidation)
myRow = myM.Cells(Rows.Count, 1).End(xlUp).Row + 1
myM.Cells(myRow, 1).Value = myC.Address(False, False, xlA1, True)
If myC.Validation.ShowInput Then
myM.Cells(myRow, 2).Value = myC.Validation.InputTitle
myM.Cells(myRow, 3).Value = myC.Validation.InputMessage
End If
If myC.Validation.ShowError Then
myM.Cells(myRow, 4).Value = myC.Validation.ErrorTitle
myM.Cells(myRow, 5).Value = myC.Validation.ErrorMessage
End If
Next myC
NoValidation:
Next i
With myM.Cells
.ColumnWidth = 16.43
.EntireRow.AutoFit
End With
With myM.Range("A1").CurrentRegion
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
With .Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End With
With Application
.DisplayAlerts = True
.EnableEvents = True
.Calculation = myCalc
End With
End Sub
--------------------------------------------------------------------------------------------------------------------------------Jusqu'ici tout va bien, la macro marche.
J'ai ensuite traduit chaque validation de données (titre d'entrée, message d'entrée, titre d'erreur, message d'erreur) en utilisant un autre feuillet ou j'ai copié le tableau obtenu, retiré les duplicats (j'avais 1700+ traductions à faire sinon), traduit, puis utilisé un VLOOKUP dans le tableau original.
-Deuxième macro, qui est censée remplacer le texte existant par sa traduction.
Sub UpdateMessages()
Dim myM As Worksheet
Dim i As Long
Set myM = Worksheets("Messages")
For i = 2 To myM.Cells(Rows.Count, 1).End(xlUp).Row
With Range(myM.Cells(i, 1).Value)
If myM.Cells(i, 2).Value <> "" Then .Validation.InputTitle = myM.Cells(i, 6).Value
If myM.Cells(i, 3).Value <> "" Then .Validation.InputMessage = myM.Cells(i, 7).Value
If myM.Cells(i, 4).Value <> "" Then .Validation.ErrorTitle = myM.Cells(i, 8).Value
If myM.Cells(i, 5).Value <> "" Then .Validation.ErrorMessage = myM.Cells(i, 9).Value
End With
Next i
End Sub
--------------------------------------------------------------------------------------------------------------------------------Et là erreur 400. En exécutant la macro avec F8, j'obtiens une erreur 1004: "application defined or object defined error" au niveau de la ligne rouge.
Débutant en VBA, je viens vers vous avec comme espoir:
1) de faire marcher ma macro
2) de comprendre pourquoi celle-ci ne marche pas.
Bonne journée, et merci d'avance!
J'ai hérité d'une macro, qui, comme le titre l'indique, vise à traduire toutes mes validations de données dans une feuille de travail.
-Une première partie, qui collecte toutes les validations de données et me les affiche dans un tableau, sur un feuillet qui se crée, nommé "messages". Texte ci-dessous:
Sub GetMessages()
'
Dim i As Integer
Dim myM As Worksheet
Dim myC As Range
Dim myRow As Long
Dim myCalc As XlCalculation
With Application
.DisplayAlerts = False
.EnableEvents = False
myCalc = .Calculation
.Calculation = xlCalculationManual
End With
Set myM = Worksheets.Add(before:=Worksheets(1))
myM.Name = "Messages"
myM.Cells(1, 1).Value = "Address"
myM.Cells(1, 2).Value = "Existing Input Title"
myM.Cells(1, 3).Value = "Existing InputMessage"
myM.Cells(1, 4).Value = "Existing Error Title"
myM.Cells(1, 5).Value = "Existing Error Message"
myM.Cells(1, 6).Value = "Translated Input Title"
myM.Cells(1, 7).Value = "Translated InputMessage"
myM.Cells(1, 8).Value = "Translated Error Title"
myM.Cells(1, 9).Value = "Translated Error Message"
myM.Rows(1).Cells.WrapText = True
On Error GoTo NoValidation
For i = 2 To Worksheets.Count
For Each myC In Worksheets(i).Cells.SpecialCells(xlCellTypeAllValidation)
myRow = myM.Cells(Rows.Count, 1).End(xlUp).Row + 1
myM.Cells(myRow, 1).Value = myC.Address(False, False, xlA1, True)
If myC.Validation.ShowInput Then
myM.Cells(myRow, 2).Value = myC.Validation.InputTitle
myM.Cells(myRow, 3).Value = myC.Validation.InputMessage
End If
If myC.Validation.ShowError Then
myM.Cells(myRow, 4).Value = myC.Validation.ErrorTitle
myM.Cells(myRow, 5).Value = myC.Validation.ErrorMessage
End If
Next myC
NoValidation:
Next i
With myM.Cells
.ColumnWidth = 16.43
.EntireRow.AutoFit
End With
With myM.Range("A1").CurrentRegion
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
With .Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End With
With Application
.DisplayAlerts = True
.EnableEvents = True
.Calculation = myCalc
End With
End Sub
--------------------------------------------------------------------------------------------------------------------------------Jusqu'ici tout va bien, la macro marche.
J'ai ensuite traduit chaque validation de données (titre d'entrée, message d'entrée, titre d'erreur, message d'erreur) en utilisant un autre feuillet ou j'ai copié le tableau obtenu, retiré les duplicats (j'avais 1700+ traductions à faire sinon), traduit, puis utilisé un VLOOKUP dans le tableau original.
-Deuxième macro, qui est censée remplacer le texte existant par sa traduction.
Sub UpdateMessages()
Dim myM As Worksheet
Dim i As Long
Set myM = Worksheets("Messages")
For i = 2 To myM.Cells(Rows.Count, 1).End(xlUp).Row
With Range(myM.Cells(i, 1).Value)
If myM.Cells(i, 2).Value <> "" Then .Validation.InputTitle = myM.Cells(i, 6).Value
If myM.Cells(i, 3).Value <> "" Then .Validation.InputMessage = myM.Cells(i, 7).Value
If myM.Cells(i, 4).Value <> "" Then .Validation.ErrorTitle = myM.Cells(i, 8).Value
If myM.Cells(i, 5).Value <> "" Then .Validation.ErrorMessage = myM.Cells(i, 9).Value
End With
Next i
End Sub
--------------------------------------------------------------------------------------------------------------------------------Et là erreur 400. En exécutant la macro avec F8, j'obtiens une erreur 1004: "application defined or object defined error" au niveau de la ligne rouge.
Débutant en VBA, je viens vers vous avec comme espoir:
1) de faire marcher ma macro
2) de comprendre pourquoi celle-ci ne marche pas.
Bonne journée, et merci d'avance!