IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Accès à la propriété font.color : erreur1004 lors passage par valeur


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur acousticien
    Inscrit en
    Septembre 2015
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur acousticien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2015
    Messages : 122
    Points : 74
    Points
    74
    Par défaut Accès à la propriété font.color : erreur1004 lors passage par valeur
    Bonjour,

    Je souhaite écrire dans une cellule et modifier la couleur de mon texte feuille de deux manières différentes via une même procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Sub Texte_demande_rd(target As Range, tableau_ind As Variant)
     
        Dim valsaisie As String
        Dim ligne As Integer
        Dim col As Integer
        Dim p1 As Integer
        ligne = target.Row
        col = target.Column
     
        If target = "x" Or target = "X" Then
            If target.Offset(0, -8) Like "1.1.*" Then
                For i = 1 To 29
                    If target.Offset(0, -6) = tableau_ind(2, i) Then
                        valsaisie = tableau_ind(4, i) & tableau_ind(3, i)
                        target.Offset(0, -4) = Verif_contenu(target.Offset(0, -4), valsaisie & " ")
                        If InStr(1, target.Offset(0, -4), valsaisie) <> 0 Then target.Offset(0, -4).Characters(InStr(1, target.Offset(0, -4), valsaisie), Len(valsaisie)).Font.Color = RGB(255, 0, 0)
                        Exit For
                    End If
                Next i
    [...]
    Par la suite, je dois faire appelle à cette macro de deux façon différente :
    1. au sein d'une autre procédure (code placé dans un module) :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      If IsEmpty(Cell) = False Then
              Cell.Offset(0, 5) = "X" 'cochage de la colonne RD
              Call Texte_demande_rd(Cell.Offset(0, 5), tableau)
      End If
    2. lors de cochage de la celulle concernée par l'utilisateur (code placé dans la feuille concernée)
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      Private Sub Worksheet_Change(ByVal cible As Range)
       
          Dim tabl As Variant
       
          If Not Intersect(Columns("J"), cible) Is Nothing And cible.Count = 1 And cible.Row > 1 Then
              tabl = Construction_parois(f_listes_deroulantes, "Index", 4)
              Call Texte_demande_rd(cible, tabl)
          End If
       
      End Sub


    La première solution fonctionne a merveille mais une erreur 1004 me bloque à la ligne 17 lors de l'appel depuis worksheet_change...

    L'erreur 1004 persiste si je remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(1, target.Offset(0, -4), valsaisie) <> 0 Then target.Offset(0, -4).Characters(InStr(1, target.Offset(0, -4), valsaisie), Len(valsaisie)).Font.Color = RGB(255, 0, 0)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(1, target.Offset(0, -4), valsaisie) <> 0 Then Sheets(f_suivi_chantier).Cells(ligne, col - 6).Characters(InStr(1, Cells(ligne, col - 6), valsaisie), Len(valsaisie)).Font.Color = RGB(255, 0, 0)
    et mon texte ne se met même plus en rouge...

    Merci d'avance pour vos remarques et conseils !

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    La seule chose que je vois c'est que tu fais une modification de la feuille dans l'événement Worksheet_Change.

    C'est le serpent qui se mord la queue.

    Juste avant la modification, place un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents = False
    avant de faire des modifications et remets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents = True
    juste après.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur acousticien
    Inscrit en
    Septembre 2015
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur acousticien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2015
    Messages : 122
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    Merci pour l'intérêt porté à ma question et désolé pour ma réponse tardive, je travaillais sur d'autres choses ces derniers temps.

    Malheureusement même avec ces modifications ça ne fonctionne pas.

    Je trouve quand même vraiment étrange que la fonction ne rencontre pas de problème lors de l'appel depuis un module mais beug lors de l'appel par la modification d'une cellule par l'utilisateur (et worksheet_change)...

    Merci d'avance pour votre aide.

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Montre-nous ta procédure Worksheet_Change avec la modification.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur acousticien
    Inscrit en
    Septembre 2015
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur acousticien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2015
    Messages : 122
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    La procédure worksheet_change est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Change(ByVal cible As Range)
     
        Dim tabl As Variant
     
        If Not Intersect(Columns("J"), cible) Is Nothing And cible.Count = 1 And cible.Row > 1 Then
            Application.EnableEvents = False
            tabl = Construction_parois(f_listes_deroulantes, "Index", 4)
            Call Texte_demande_rd(cible, tabl)
            Application.EnableEvents = True
        End If
     
    End Sub
    Et la procédure exécutant la mise en forme fonctionnant bien lors de l'appel depuis une procédure dans un module mais pas depuis le code ci-dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub Texte_demande_rd(target As Range, tableau_ind As Variant)
     
        Dim valsaisie As String
        Dim ligne As Integer
        Dim col As Integer
        Dim p1 As Integer
        ligne = target.Row
        col = target.Column
     
        If target = "x" Or target = "X" Then
            If target.Offset(0, -8) Like "1.1.*" Then
                For i = 1 To 29
                    If target.Offset(0, -6) = tableau_ind(2, i) Then
                        valsaisie = tableau_ind(4, i) & tableau_ind(3, i)
                        target.Offset(0, -4) = Verif_contenu(target.Offset(0, -4), valsaisie & " ")
    '                    Application.EnableEvents = False
                        If InStr(1, target.Offset(0, -4), valsaisie) <> 0 Then target.Offset(0, -4).Characters(InStr(1, target.Offset(0, -4), valsaisie), Len(valsaisie)).Font.Color = RGB(255, 0, 0)
    '                    Application.EnableEvents = True
                        Exit For
                    End If
                Next i
     
    [...]
    L'erreur est toujours présente même si je dé-commente l'Application.EnableEvents = False ci-dessus.

    Merci d'avance pour votre regard extérieur !

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    ce n'est pas pour t'inquiéter mais j'ai déjà remarqué un bug avec .Characters(...).Font.ColorIndex (dans un commentaire)
    C'était :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                '     changement taille des caractères 1 à 11
                Selection.Characters(1, 11).Font.Size = 12 
                Selection.Characters(1, 11).Font.ColorIndex = 3
    1004 "La taille de la police doit être comprise entre 1 et 409". Sur le .Font.ColorIndex oui, oui (?!?)
    Et en inversant (.Font.Size en dernier) ça passait. (erreur sur 2010 mais bon sur 2003)

    Apparemment pas ton cas mais si jamais tu le fais auparavant ou si ça t'inspire une piste...
    eric

    PS : quel est ton message d'erreur ?

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur acousticien
    Inscrit en
    Septembre 2015
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur acousticien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2015
    Messages : 122
    Points : 74
    Points
    74
    Par défaut
    Bonjour eriiic et merci pour ces informations.

    L'erreur dont du parle est assez étrange en effet... La mienne l'est d'autant plus qu'elle n'apparait pas forcément selon la façon dont j'appelle la procédure

    Lors de l'appel depuis worksheet_change :
    "Erreur d'exécution '1004':
    Erreur définir par l'application ou par l'objet"

    à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(1, target.Offset(0, -4), valsaisie) <> 0 Then target.Offset(0, -4).Characters(InStr(1, target.Offset(0, -4), valsaisie), Len(valsaisie)).Font.Color = RGB(255, 0, 0)
    Si .characters(..).font.color n'est pas très fiable, y aurait-il un autre moyen de travailler sur la couleur de mon texte ?

    Merci d'avance !

  8. #8
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,
    à ma connaissance non.
    Au vu du message d'erreur, target.Offset(0, -4), tu ne tombes pas en dehors des limites de la feuille ?
    eric

  9. #9
    Membre régulier
    Homme Profil pro
    Ingénieur acousticien
    Inscrit en
    Septembre 2015
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur acousticien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2015
    Messages : 122
    Points : 74
    Points
    74
    Par défaut
    Je ne pense pas puisque les deux lignes qui se suivent sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    target.Offset(0, -4) = Verif_contenu(target.Offset(0, -4), valsaisie & " ") ' écriture du texte dans la cellule
    If InStr(1, target.Offset(0, -4), valsaisie) <> 0 Then target.Offset(0, -4).Characters(InStr(1, target.Offset(0, -4), valsaisie), Len(valsaisie)).Font.Color = RGB(255, 0, 0) ' mise en forme (couleur) du texte
    et que la première s'exécute correctement...

  10. #10
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Ok, je n'étais remonté au 1er post.
    Pas plus d'idée désolé.
    Tu pourrais faire un fichier de travail allégé qui reproduit le défaut. Ca donnera peut-être la lumière à qq'un.
    eric

  11. #11
    Membre régulier
    Homme Profil pro
    Ingénieur acousticien
    Inscrit en
    Septembre 2015
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur acousticien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2015
    Messages : 122
    Points : 74
    Points
    74
    Par défaut
    Merci à tous pour votre participation.

    Je viens ENFIN de résoudre ce problème... qui venait de la protection de la feuille concernée ! J'aurais du y penser plus tôt vu que justement la procédure fonctionnait lors de l'appel par une autre procédure (qui dé-protégeais évidement la feuille) !

    Encore merci pour votre aide en tout cas !

    PS : quelqu'un saurait-il qu'est-ce qu'implique exactement la protection d'une feuille (dans mon cas l'écriture de texte dans une cellule est possible mais pas la modification de la couleur de ce même texte ?!?) ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 26/01/2008, 20h23
  2. Existance de la propriété Font.Color
    Par sandre dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/09/2007, 23h07
  3. [Débutant] Passage par valeur d'un objet Corba
    Par peaceinpal dans le forum CORBA
    Réponses: 1
    Dernier message: 29/05/2006, 20h15
  4. Passage par Valeur
    Par xc78370 dans le forum Langage
    Réponses: 8
    Dernier message: 20/03/2006, 23h21
  5. Passage par valeur / passage par adresse
    Par jeje99 dans le forum C++
    Réponses: 13
    Dernier message: 16/02/2006, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo