Fonction Array - erreur 1004

Résolu
TonyLucky -  
 TonyLucky -
Bonjour à tous,

J'ai un petit souci avec la fonction array (sous Excel VBA 2003)
Dans un UF, je clique sur un bouton parmi 48 pour définir la couleur de fond de mes UF. Les valeurs RVB sont ainsi mémorisées dans la feuille "Masque". Lorsque cette feuille est la feuille active, le code fonctionne. Lorsque je suis sur une autre feuille, j'ai une erreur 1004 - Erreur définie par l'application ou l'objet - sur la ligne sheets("Masque")...

Voici le code appelé à partir du UF (dans un module de classe) :
Private Sub BtnFond_Click()

Select Case Profil
    Case "Administrateur"
    ip = 77
    Case "Editeur"
    ip = 78
    Case "Utilisateur"
    ip = 76
    Case "Visiteur"
    ip = 79
End Select
 
CoulRVB = BtnFond.BackColor
    If FdEcran = False Then
    Fd_R = Int(CoulRVB Mod 256)
    Fd_G = Int((CoulRVB Mod 65536) / 256)
    Fd_B = Int(CoulRVB / 65536)
    Sheets("Masque").Range(Cells(ip, 5), Cells(ip, 7)).Value = Array(Fd_R, Fd_G, Fd_B)
  
    ElseIf FdEcran = True Then
    Txt_R = Int(CoulRVB Mod 256)
    Txt_G = Int((CoulRVB Mod 65536) / 256)
    Txt_B = Int(CoulRVB / 65536)
    Sheets("Masque").Range(Cells(ip, 8), Cells(ip, 10)).Value = Array(Txt_R, Txt_G, Txt_B)
   
   End If

End Sub


Je n'arrive pas à comprendre d'où peut venir le problème. D'avance, je vous remercie pour vos pistes ou remarques.
Bonne journée à tous

5 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    quand vous avez l'erreur, clic sur debugage et passez le curseur souris sur la variable ip pour voir sa valeur
    0
  2. TonyLucky
     
    Merci d'avoir regardé mon problème. J'aurais déjà appris quelque chose : je ne connaissais pas cette manipulation avec le curseur !
    J'ai refait un test. ip affiche la valeur 79, ce qui est une option valide. (ip est défini en public as byte).
    J'en ai profité pour vérifier les variables du tableaux et elles sont aussi valides.
    Une autre idée ?
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      J'ai teste votre code et il n'y a pas d'erreur !!!!!

      Faudrait avoir votre fichier .....
      0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Salut f894009,

    Essayez ceci :

    Private Sub BtnFond_Click()
    Select Case Profil
        Case "Administrateur": ip = 77
        Case "Editeur": ip = 78
        Case "Utilisateur": ip = 76
        Case "Visiteur": ip = 79
    End Select
    CoulRVB = BtnFond.BackColor
    With Sheets("Masque")
        If FdEcran = False Then
            Fd_R = Int(CoulRVB Mod 256)
            Fd_G = Int((CoulRVB Mod 65536) / 256)
            Fd_B = Int(CoulRVB / 65536)
           .Range(Cells(ip, 5), Cells(ip, 7)).Value = Array(Fd_R, Fd_G, Fd_B)
        Else    'If FdEcran = True Then
            Txt_R = Int(CoulRVB Mod 256)
            Txt_G = Int((CoulRVB Mod 65536) / 256)
            Txt_B = Int(CoulRVB / 65536)
           .Range(Cells(ip, 8), Cells(ip, 10)).Value = Array(Txt_R, Txt_G, Txt_B)
       End If
    End With
    End Sub


    Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
    0
  4. TonyLucky
     
    J'ai testé l'idée de pijaku, mais sans succès (dommage !).
    J'ai crée un fichier test :
    http://www.cjoint.com/c/EJClsShTZNJ
    (désolé, je ne sais pas créer le lien internet direct)
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Excuse moi, erreur d'inattention...
      Il manquait les points devant les Cells...
      Private Sub BtnFond_Click()
      Select Case Profil
          Case "Administrateur": ip = 77
          Case "Editeur": ip = 78
          Case "Utilisateur": ip = 76
          Case "Visiteur": ip = 79
      End Select
      CoulRVB = BtnFond.BackColor
      With Sheets("Masque")
          If FdEcran = False Then
              Fd_R = Int(CoulRVB Mod 256)
              Fd_G = Int((CoulRVB Mod 65536) / 256)
              Fd_B = Int(CoulRVB / 65536)
             .Range(.Cells(ip, 5), .Cells(ip, 7)).Value = Array(Fd_R, Fd_G, Fd_B)
          Else    'If FdEcran = True Then
              Txt_R = Int(CoulRVB Mod 256)
              Txt_G = Int((CoulRVB Mod 65536) / 256)
              Txt_B = Int(CoulRVB / 65536)
             .Range(.Cells(ip, 8), .Cells(ip, 10)).Value = Array(Txt_R, Txt_G, Txt_B)
         End If
      End With
      End Sub
      0
    2. TonyLucky > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Bonne remarque. J'y avais pensé aussi car cela me semblait logique. Mais avec les points, j'ai une erreur de compilation (référence incorrecte ou non qualifiée), du coup, je les ai supprimés. Quand même curieux que la macro fonctionne quand je suis sur la feuille "masque" et pas ailleurs. J'ai déjà utilisé des arrays, mais jamais je n'ai eu ce problème.
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > TonyLucky
       
      J'ai retenté sur ton fichier, ça fonctionne clairement sans problème...
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Re,

      Bonjour pijaku, ca flotte ??
      Ta modif marche tres bien et pour completer,
       'Sheets("Masque").Range(Cells(ip, 5), Cells(ip, 7)).Value = Array(Fd_R, Fd_G, Fd_B)
           Sheets("Masque").Range("E" & ip & ":G" & ip).Value = Array(Fd_R, Fd_G, Fd_B)
      
      ca marche aussi, mais le With/End With est plus "classe"
      0
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
       
      ça flotte merci.
      Et toi?

      J'aime bien, lors de l'utilisation d'un Userform, référencer mes feuilles avec With.
      Au moins, tu peux en faire ce que tu veux...

      Bonne fin de journée
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. TonyLucky
     
    Merci à tous les deux pour votre aide et surtout pour la solution.
    J'utilise aussi with en règle générale. J'avais d'ailleurs commencé comme cela. Mais cela ne fonctionnait pas, alors, j'ai cherché autre chose.
    J'avoue que je n'aurai pas pensé à modifier la plage comme vous me l'avez proposé.
    Encore merci, et bonne fin de journée.
    0