Problème de macros pour couleur cellule

Bonjour le forum,

J'ai un problème avec mes macros, sur les fichiers fourni en exemple, j'ai repris les principales infos du fichier original (copie d'une partie des onglets):

Pourriez-vous me dire pourquoi sur le fichier "problemecolor" lorsque:

Je modifie une cellule E d'une ligne déjà rempli, la cellule E change de nom, J change de nom et la couleur change, mais si' j'insère une ligne, voir le fichier "problemecolor1" lorsque:

-J'insère une ligne et que je remplis la cellule E, la cellule de J ne se rempli pas, ni se colorie, mais on voit que dans la cellule N les 3 lettres apparaissent

-Je modifie une cellule E d'une ligne déjà rempli, la cellule E change de nom, J change de nom mais garde la couleur de la désignation précédente

-Je ferme le "problemecolor1" et que je le réouvre, je peux à nouveau faire des modifications dans les lignes existantes et si je reclique sur la cellule E déjà rempli que je resélectionne , ça fonctionne voir "problemecolor2", mais si j'insère des lignes ça rebugue voir "problemecolor3"

Si quelqu'un à une idée , je suis preneur...

Merci d'avance;

B.A.

8problemecolor.xlsm (98.55 Ko)
3problemecolor2.xlsm (100.23 Ko)
3problemecolor3.xlsm (101.54 Ko)

Bonjour,

Déjà permet moi de te dire que je n'aimerais pas travailler sur ce genre de fichier
dans lequel on peut pas ce déplacer comme on le souhaite avec les flèches de déplacement.

Perso je préfère interdire la saisie dans certaines colonnes.

Ensuite pour ton problème, lorsque tu crées une nouvelle ligne, tu ne lance pas la mise en couleur de celle-ci
de plus tu as une erreur de frappe à la fin "Truee" au lieu de "True"

'Activer les évenements
    Application.EnableEvents = Truee

Bonjour BrunoM45,

Merci de t'être penché sur mon problème...

Je suis toujours preneur de bonnes idées...

Déjà permet moi de te dire que je n'aimerais pas travailler sur ce genre de fichier

dans lequel on peut pas ce déplacer comme on le souhaite avec les flèches de déplacement.

Il faut voir ce fichier comme un registre annuel que l'on rempli une fois pour toute et pour les premières colonnes jusqu'à la colonne "U" ça ne doit pas évoluer, mise à part le rajout de nouveau matériel...

Perso je préfère interdire la saisie dans certaines colonnes.

Pourrais-tu m'en dire plus sur ta façon de voir pour interdire la saisie dans certaines colonnes, peut-être fais-tu allusion au "offset" de certaines cellules, c'est ce que j'ai trouvé en cherchant sur le forum et qui fonctionne, car avec le verrouillage des cellules j'ai calé dessus, je suis novice en VBA, je cherche, j'adapte et quand ça fonctionne que demande le peuple... Tu vois, le fait d'écrire la phrase précédent ça me fait penser qu'il faudrait "verrouiller" ce qui a déjà été saisi pour éviter les modifications "involontaires"!

Ensuite pour ton problème, lorsque tu crées une nouvelle ligne, tu ne lance pas la mise en couleur de celle-ci

de plus tu as une erreur de frappe à la fin "Truee" au lieu de "True"

La couleur de la cellule doit se lancer avec l'appel de la macro du module "ColorCells"!

Bien vu, le "Truee", t'as de bons yeux!

Merci encore de ton aide.

B.A.

Bonjour BrunoM45,

Un petit up, pour les questions posées...

B.A.

Re,

Dans ton bouton NewLine, il faut ajouter une ligne à la fin

Private Sub CommandButton1_Click()
  'Avec l'onglet "PORtail"
  With Sheets("PORtail")
    'Désactiver l'actualisation de l'écran
    Application.ScreenUpdating = False
    'Désactiver la barre d'état
    Application.DisplayStatusBar = False
    'détermine la première ligne vide en "A3"
    DL = .Range("A3").End(xlDown).Row + 1
    'insert une nouvelle ligne à cet endroit
    .Rows(DL).Insert Shift:=xlDown
    'copie la plage "A:AV de la ligne précédente
    .Range(.Cells(DL - 1, 1), .Cells(DL - 1, 48)).Copy
    'colle le format de cette plage dans la nouvelle ligne
    .Range("A" & DL).PasteSpecial Paste:=xlFormats
    'et y colle la plage
    ActiveSheet.Paste
    'désactive le mode copier/coller
    Application.CutCopyMode = False
    'Vide les cellules de E à E sur la ligne copiée
    .Range(.Cells(DL, 5), .Cells(DL, 5)).ClearContents 'Ok
    'Vide les cellules de G à I sur la ligne copiée
    .Range(.Cells(DL, 7), .Cells(DL, 9)).ClearContents 'Ok
    'Vide les cellules de O à AD sur la ligne copiée
    .Range(.Cells(DL, 15), .Cells(DL, 30)).ClearContents 'Ok
    'Vide les cellules de AJ à AQ sur la ligne copiée
    .Range(.Cells(DL, 36), .Cells(DL, 43)).ClearContents 'Ok
    'Sélection de la première cellule vide de la colonne J
    Range("J" & Rows.Count).End(xlUp).Offset(1).Select
    Dim i As Integer
    For i = 3 To 300
      If Cells(i, 10) = "" Then                  'Si pas de valeur = "" alors
        Cells(i, 10).Interior.ColorIndex = -4142 'Pas de couleur
      End If
    Next i
    'Sélection de la première cellule vide de la colonne E
    Range("E" & Rows.Count).End(xlUp).Offset(1).Select
    ' Modification du 22/09
    ' Il faut activer la couleur de cellule ICI
    Call ColorCells
    'Activer la barre d'état
    Application.DisplayStatusBar = True
    'Activer les évenements
    Application.EnableEvents = True
  End With
End Sub

Pour ce qui est de la protection de la saisie

1) tu désactives le début ton code dans SelectionChange

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  'Si la plage sélectionnée (Target) se trouve dans la plage, alors
  'If Not Intersect(Target, Range("A:A, D:D, F:F, J:N, AE:AI, AR:AV")) Is Nothing Then
    'Décaler d'une cellule sur la droite
    'Target.Offset(, 1).Activate
  'End If

2) Tu modifie le début de ton code sans Change

Private Sub Worksheet_Change(ByVal Target As Range)
  'Si la  sélection (Target) se trouve dans la plage, alors
  If Not Intersect(Target, Range("A:A, D:D, F:F, J:N, AE:AI, AR:AV")) Is Nothing Then
    ' Désactiver les évènements
    Application.EnableEvents = False
    Application.Undo
    ' Eventuellement un petit message
    MsgBox "Vous ne pouvez pas modifier cette cellule !", vbCritical, "OUPS..."
    ' Réactiver les évènements
    Application.EnableEvents = True
    ' Sortir, pas besoin d'aller plus loin
    Exit Sub
  End If

Voilà ;-)

Je ne sais pas si tu avais d'autres questions ?

@+

Re bonjour,

Merci encore pour ton aide, j'ai un petit problème avec la macro pour la protection dess colonnes, lorsque je crée une nouvelle ligne:

Le debogage met en jaune la ligne: Application.Undo

Private Sub Worksheet_Change(ByVal Target As Range)

'Si la sélection (Target) se trouve dans la plage, alors

If Not Intersect(Target, Range("A:A, D:D, F:F, J:N, AE:AI, AR:AV")) Is Nothing Then

' Désactiver les évènements

Application.EnableEvents = False

Application.Undo

' Eventuellement un petit message

MsgBox "Vous ne pouvez pas modifier cette cellule !", vbCritical, "OUPS..."

' Réactiver les évènements

Application.EnableEvents = True

' Sortir, pas besoin d'aller plus loin

Exit Sub

End If

Si je mets la ligne en commentaire, je referme le fichier et le réouvre et que je relance "nouvelle ligne", le message "Vous ne pouvez pas modifier cette cellule" apparait et il faut cliquer sur "ok" plusieurs fois pour le faire disparaître!
Si tu as une idée...

B.A.

Re,

Il faut modifier le code pour ne pas qu'il s'exécute quand on ajoute une ligne

Private Sub Worksheet_Change(ByVal Target As Range)
  'Si la  sélection (Target) se trouve dans la plage, alors
  If Not Intersect(Target, Range("A:A, D:D, F:F, J:N, AE:AI, AR:AV")) Is Nothing Then
    ' Ne pas exécuter cette procédure en cas d'ajout d'un ligne
    If Target.Columns.Count = ActiveSheet.Columns.Count Then Exit Sub
    ' Désactiver les évènements
    Application.EnableEvents = False
    Application.Undo
    ' Eventuellement un petit message
    MsgBox "Vous ne pouvez pas modifier cette cellule !", vbCritical, "OUPS..."
    ' Réactiver les évènements
    Application.EnableEvents = True
    ' Sortir, pas besoin d'aller plus loin
    Exit Sub
  End If

Voilà

Re,

J'ai toujours le problème avec Application Undo

Erreur d'exécution '1004'

La méthode 'Undo'_Application' a échoué

Et idem si je mets la ligne en commentaire, je referme le fichier et le réouvre et que je relance "nouvelle ligne", le message "Vous ne pouvez pas modifier cette cellule" apparait et il faut cliquer sur "ok" plusieurs fois pour le faire disparaître!

Par contre en mettant la ligne du message en commentaire, ça fonctionne, donc je ferai sans message!

J'approfondirai demain et te tiendrai au courant...

@+

Bonjour BrunoM45,

Est-ce qu'il y aurait une autre solution, car avec un message ça fait vraiment plus convivial?

B.A.

Rechercher des sujets similaires à "probleme macros couleur"