Erreur de compilation nom ambigu détecté worksheet_change
Bonsoir,
Je souhaite que les 2 codes fonctionnent mais j'ai le message d'erreur "erreur de compilation nom ambigu détecté worksheet_change".
Comment compiler mes formules, j'ai regardé quelques tutos mais je ne comprends pas comment faire.. merci d'avance,
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Larg As Double
Dim Haut As Double
Dim HautOrig As Double
Dim ColDeb As Integer
Dim ColFin As Integer
ColDeb = 9 'Colonne I
ColFin = 15 'Colonne O
If Target.Column >= ColDeb And Target.Column <= ColFin And Target.Count = 1 Then
HautOrig = Target.Parent.Rows(Target.Row).RowHeight 'On mémorise la hauteur de la ligne
If Target.Value = "" Or Trim(Target.Value) = "" Then 'Si la cellule est vide, on supprimer la forme
On Error Resume Next
ActiveSheet.Shapes("Rond" & Target.Row & "_" & Target.Column).Delete
On Error GoTo 0
Target.Parent.Rows(Target.Row).RowHeight = HautOrig
Else
On Error Resume Next
ActiveSheet.Shapes("Rond" & Target.Row & "_" & Target.Column).Delete 'Suppression ancienne forme
On Error GoTo 0
On Error Resume Next
Feuil1.Shapes(Target.Value).Copy
If Err.Number = 0 Then
ActiveSheet.Paste
With Selection
.Name = "Rond" & Target.Row & "_" & Target.Column
.Visible = True
End With
Larg = Feuil1.Shapes(Target.Value).Width
Haut = Feuil1.Shapes(Target.Value).Height
With Selection.ShapeRange 'Forme au centre de la cellule
.Left = Target.Left + (Target.Width - Larg) / 2
.Top = Target.Top + (Target.Height - Haut) / 2
End With
If Haut + 4 > HautOrig Then 'Ajuste la hauteur de ligne
Target.Parent.Rows(Target.Row).RowHeight = Haut + 4
Else
Target.Parent.Rows(Target.Row).RowHeight = HautOrig 'Hauteur d'origine
End If
Target.Select
End If
On Error GoTo 0
End If
End If
MajBarresFeuil6
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Oldvalue As String
Dim Newvalue As String
Application.EnableEvents = True
On Error GoTo Exitsub
If Not Intersect(Target, Range("G14:G300")) Is Nothing Then
If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then
GoTo Exitsub
Else: If Target.Value = "" Then GoTo Exitsub Else
Application.EnableEvents = False
Newvalue = Target.Value
Application.Undo
Oldvalue = Target.Value
If Oldvalue = "" Then
Target.Value = Newvalue
Else
If InStr(1, Oldvalue, Newvalue & ", ") > 0 Then
Target.Value = Replace(Oldvalue, Newvalue & ", ", "")
ElseIf InStr(1, Oldvalue, ", " & Newvalue) > 0 Then
Target.Value = Replace(Oldvalue, ", " & Newvalue, "")
ElseIf InStr(1, Oldvalue, Newvalue) = 0 Then
Target.Value = Oldvalue & ", " & Newvalue
End If
End If
End If
End If
Application.EnableEvents = True
Exitsub:
Application.EnableEvents = True
End Sub
et est ce que c'est possible que l'lorsque je rentre plusieurs choix, ils se mettent en dessous l'un après l'autre et non à la suite ?
Merci,,
Bonjour Séverine,
Tu as 2 X la même Sub() d'où nom ambigu.
Private Sub Worksheet_Change(ByVal Target As Range)Tout ce qui concerne un événement DOIT être codé dans UNE seule et même Sub() de cet événement en y précisant chaque fois, évidemment, à quel élément particulier il se rapporte.
Petit détail pratique : quand tu veux insérer du code dans un message, histoire que ce soit lisible, utilise l'icône </> dans la barre d'outil de la fenêtre d'édition du message.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Oldvalue As String
Dim Newvalue As String
Application.EnableEvents = True
On Error GoTo Exitsub
If Not Intersect(Target, Range("G14:G300")) Is Nothing Then
If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then
.
.
End SubPour le reste, d'abord le petit café du matin et la promenade des chiens. Oula, sacré ça, ici, pour madame!
A+
bonjour salafia, salut Curilis,
je pense à ceci (sans fichier
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Larg As Double
Dim Haut As Double
Dim HautOrig As Double
Dim ColDeb As Integer: ColDeb = 9 'Colonne I
Dim ColFin As Integer: ColFin = 15 'Colonne O
Dim Oldvalue As String
Dim Newvalue As String
Dim c As Range, shp As Shape, ShpNew
'************** partie 1 ************************************************************
Set c = Intersect(Target, Range("G14:G300")) 'juste les cellules modifiés de cette plage
If Not c Is Nothing And c.Cells.CountLarge = 1 Then 's'iln'y a qu'une seule cellule modifiée
If Len(Trim(c.Value2)) > 0 Then 'cellule n'est pas vide
On Error Resume Next
s = c.Validation.Formula1 'specialcells triggers un évenement !
On Error GoTo 0
If Err.Number = 0 Then 'cellule contient validation
Application.EnableEvents = False
Newvalue = c.Value
Application.Undo
Oldvalue = c.Value
If Oldvalue = "" Then
Target.Value = Newvalue
Else
If InStr(1, Oldvalue, Newvalue & ", ") > 0 Then
c.Value = Replace(Oldvalue, Newvalue & ", ", "")
ElseIf InStr(1, Oldvalue, ", " & Newvalue) > 0 Then
c.Value = Replace(Oldvalue, ", " & Newvalue, "")
ElseIf InStr(1, Oldvalue, Newvalue) = 0 Then
c.Value = Oldvalue & ", " & Newvalue
End If
End If
Application.EnableEvents = True
End If
End If
MajBarresFeuil6
End If
'************** partie 2 ************************************************************
If ColDeb <= Target.Column And Target.Column <= ColFin And Target.Count = 1 Then
HautOrig = Target.RowHeight 'On mémorise la hauteur de la ligne
On Error Resume Next
Me.Shapes("Rond" & Target.Row & "_" & Target.Column).Delete 'on efface toujours ce shape, s'il existe
On Error GoTo 0
If Trim(Target.Value) = "" Then 'Si la cellule est vide, on supprimer la forme
Target.RowHeight = HautOrig
Else
i = Me.Shapes.Count
On Error Resume Next
Set shp = Feuil1.Shapes(Target.Value)
On Error GoTo 0
If Not shp Is Nothing Then
shp.Copy
DoEvents: DoEvents: DoEvents: DoEvents: DoEvents 'pacienter un peu
ActiveSheet.Paste
DoEvents: DoEvents: DoEvents: DoEvents: DoEvents 'pacienter un peu
On Error Resume Next
Set ShpNew = Me.Shapes(i + 1) 'nouveau shape dans cette feuille
On Error GoTo 0
If Not ShpNew Is Nothing Then
With ShpNew
.Name = "Rond" & Target.Row & "_" & Target.Column
.Visible = True
.Left = Target.Left + (Target.Width - shp.Width) / 2
.Top = Target.Top + (Target.Height - shp.Height) / 2
If .Height + 4 > HautOrig Then 'Ajuste la hauteur de ligne
Target.RowHeight = .Height + 4
Else
Target.RowHeight = HautOrig 'Hauteur d'origine
End If
End With
End If
Application.CutCopyMode = False
Target.Select
End If
End If
End If
End SubBonjour,
Merci pour vos retours. En effet avec un fichier c'est toujours mieux!
En fait j'ai un fichier dont je souhaite pouvoir intégrer des barres de progression de l'action. (par contre la page gouv asso les barres ne fonctionnent pas bien..il y a un décalage j'ai l'impression...)
Puis j'ai souhaité en colonne G sur les différentes feuilles intégrer une liste déroulantes à choix multiples (et que les choix se mettent l'un après l'autre et centré).
Dès que je tente des codes, les 2 souhaits ne fonctionnent pas ensemble ...
Une aide me serait très précieuse, car je galère depuis plusieurs jours...
Un GRAND MERCI d'avance,