Erreur compilation excel

dine85000 Messages postés 6 Statut Membre -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
bonjour,

j'ai créer une macro qui me permet de colorier une image suivant certains critères pour faire une carte (Vendée)
la formule fonctionne bien, mais dès que j'ajoute trop de commune cela ne fonctionne plus, message d'erreur de compilation, macro trop grande.

voici un exemple sur quelque lignes (j'ai en tous 285 communes sur ma carte)

je ne sais pas comment faire pour la réduire, soit par une boucle ou autre.

Sub carte()
'roche
If [AA2].Value > 0 Or [AC2].Value > 0 Or [AE2].Value > 0 Then ActiveSheet.Shapes("roche").Fill.ForeColor.RGB = RGB(255, 255, 0) Else ActiveSheet.Shapes("roche").Fill.ForeColor.RGB = RGB(255, 255, 255)
'aizenay
If [AA3].Value > 0 Or [AC3].Value > 0 Or [AE3].Value > 0 Then ActiveSheet.Shapes("aizenay").Fill.ForeColor.RGB = RGB(255, 255, 0) Else ActiveSheet.Shapes("aizenay").Fill.ForeColor.RGB = RGB(255, 255, 255)
'angles
If [AA4].Value > 0 Or [AC4].Value > 0 Or [AE4].Value > 0 Then ActiveSheet.Shapes("angles").Fill.ForeColor.RGB = RGB(255, 255, 0) Else ActiveSheet.Shapes("angles").Fill.ForeColor.RGB = RGB(255, 255, 255)
'antigny
If [AA5].Value > 0 Or [AC5].Value > 0 Or [AE5].Value > 0 Then ActiveSheet.Shapes("antigny").Fill.ForeColor.RGB = RGB(255, 255, 0) Else ActiveSheet.Shapes("antigny").Fill.ForeColor.RGB = RGB(255, 255, 255)
'apremont
If [AA6].Value > 0 Or [AC6].Value > 0 Or [AE6].Value > 0 Then ActiveSheet.Shapes("apremont").Fill.ForeColor.RGB = RGB(255, 255, 0) Else ActiveSheet.Shapes("apremont").Fill.ForeColor.RGB = RGB(255, 255, 255)
'aubignylesclouzeaux
If [AA7].Value > 0 Or [AC7].Value > 0 Or [AE7].Value > 0 Then ActiveSheet.Shapes("aubignylesclouzeaux").Fill.ForeColor.RGB = RGB(255, 255, 0) Else ActiveSheet.Shapes("aubignylesclouzeaux").Fill.ForeColor.RGB = RGB(255, 255, 255)
'auchaysurvendee
If [AA8].Value > 0 Or [AC8].Value > 0 Or [AE8].Value > 0 Then ActiveSheet.Shapes("auchaysurvendee").Fill.ForeColor.RGB = RGB(255, 255, 0) Else ActiveSheet.Shapes("auchaysurvendee").Fill.ForeColor.RGB = RGB(255, 255, 255)
'avrille
If [AA9].Value > 0 Or [AC9].Value > 0 Or [AE9].Value > 0 Then ActiveSheet.Shapes("avrille").Fill.ForeColor.RGB = RGB(255, 255, 0) Else ActiveSheet.Shapes("avrille").Fill.ForeColor.RGB = RGB(255, 255, 255)
'barbatre
If [AA10].Value > 0 Or [AC10].Value > 0 Or [AE10].Value > 0 Then ActiveSheet.Shapes("barbatre").Fill.ForeColor.RGB = RGB(255, 255, 0) Else ActiveSheet.Shapes("barbatre").Fill.ForeColor.RGB = RGB(255, 255, 255)
'bazogesenpaillers
If [AA11].Value > 0 Or [AC11].Value > 0 Or [AE11].Value > 0 Then ActiveSheet.Shapes("bazogesenpaillers").Fill.ForeColor.RGB = RGB(255, 255, 0) Else ActiveSheet.Shapes("bazogesenpaillers").Fill.ForeColor.RGB = RGB(255, 255, 255)
'bazogesenpareds
If [AA12].Value > 0 Or [AC12].Value > 0 Or [AE12].Value > 0 Then ActiveSheet.Shapes("bazogesenpareds").Fill.ForeColor.RGB = RGB(255, 255, 0) Else ActiveSheet.Shapes("bazogesenpareds").Fill.ForeColor.RGB = RGB(255, 255, 255)
'beaufou
If [AA13].Value > 0 Or [AC13].Value > 0 Or [AE13].Value > 0 Then ActiveSheet.Shapes("beaufou").Fill.ForeColor.RGB = RGB(255, 255, 0) Else ActiveSheet.Shapes("beaufou").Fill.ForeColor.RGB = RGB(255, 255, 255)
'beaulieusouslaroche
If [AA14].Value > 0 Or [AC14].Value > 0 Or [AE14].Value > 0 Then ActiveSheet.Shapes("beaulieusouslaroche").Fill.ForeColor.RGB = RGB(255, 255, 0) Else ActiveSheet.Shapes("beaulieusouslaroche").Fill.ForeColor.RGB = RGB(255, 255, 255)
'beaurepaire
If [AA15].Value > 0 Or [AC15].Value > 0 Or [AE15].Value > 0 Then ActiveSheet.Shapes("beaurepaire").Fill.ForeColor.RGB = RGB(255, 255, 0) Else ActiveSheet.Shapes("beaurepaire").Fill.ForeColor.RGB = RGB(255, 255, 255)
'beauvoirsurmer
If [AA16].Value > 0 Or [AC16].Value > 0 Or [AE16].Value > 0 Then ActiveSheet.Shapes("beauvoirsurmer").Fill.ForeColor.RGB = RGB(255, 255, 0) Else ActiveSheet.Shapes("beauvoirsurmer").Fill.ForeColor.RGB = RGB(255, 255, 255)
'bellevigny
If [AA17].Value > 0 Or [AC17].Value > 0 Or [AE17].Value > 0 Then ActiveSheet.Shapes("bellevigny").Fill.ForeColor.RGB = RGB(255, 255, 0) Else ActiveSheet.Shapes("bellevigny").Fill.ForeColor.RGB = RGB(255, 255, 255)

merci de votre retour
Cordialement, Dine

6 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    je suggère ceci, qui suppose que les noms de communes sont dans la colonne ZZ.
    For lig = 2 To 286
        If Cells(lig, "AA").Value > 0 Or Cells(lig, "AC").Value > 0 Or Cells(lig, "AE").Value > 0 Then
            couleur = RGB(255, 255, 0)
        Else
            couleur = RGB(255, 255, 255)
        End If
        ActiveSheet.Shapes(Cells(lig, "ZZ")).Fill.ForeColor.RGB = couleur
    Next lig

    à adapter, comme les noms de communes sont probablement ailleurs, ou pas...
    0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Pour faire une boucle il faut une liste de vos communes dans votre fichier
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      on pourrait aussi lire la liste des communes ailleurs, dans un autre fichier.
      sinon on peut mettre cette liste dans le code, mais ce serait pas très élégant.
      0
  3. dine85000 Messages postés 6 Statut Membre
     
    bonjour,
    merci de vos retour, je pense que je suis vraiment débutante car en essayant d'adapter, j'ai une erreur sur la ligne pour coloriser l'image
    le nom de mes communes est en colonne z

    Sub carte()
    For lig = 2 To 286
    If Cells(lig, "AA").Value > 0 Or Cells(lig, "AC").Value > 0 Or Cells(lig, "AE").Value > 0 Then
    couleur = RGB(255, 255, 0)
    Else
    couleur = RGB(255, 255, 255)
    End If
    ActiveSheet.Shapes(Cells(lig, "Z")).Fill.ForeColor.RGB = couleur
    Next lig
    End Sub

    Merci
    Dine
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      peux-tu utiliser les balises de code quand tu partages du code? https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code (en utilisant "basic" pour du VBA)
      quel est exactement le message d'erreur?
      le nom de la commune en colonne Z est-il exactement identique au nom utilisé précédemment dans le code?
      avec ceci, sur quelle ligne l'erreur se produit-elle?
      Dim lig As Long, couleur As Long, sh As Shape
      For lig = 2 To 286
          If Cells(lig, "AA").Value > 0 Or Cells(lig, "AC").Value > 0 Or Cells(lig, "AE").Value > 0 Then
              couleur = RGB(255, 255, 0)
          Else
              couleur = RGB(255, 255, 255)
          End If
          Set sh = ActiveSheet.Shapes(Cells(lig, "Z"))
          sh.Fill.ForeColor.RGB = couleur
      Next lig
      0
  4. dine85000 Messages postés 6 Statut Membre
     
    bonjour,
    l'erreur ce fait a partir de Set sh = ActiveSheet, demande un débogage
    je vous joint une image de mon projet pour mieux comprendre ma demande
    Cordialement,
    Dine

    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      c'est bien ce que je suspectais: les noms en colonne Z ne sont pas les mêmes noms que les noms des Shape.
      ceci devrait peut-être faire mieux.
      Dim lig As Long, couleur As Long, sh As Shape, nom As String
      For lig = 2 To 286
          If Cells(lig, "AA").Value > 0 Or Cells(lig, "AC").Value > 0 Or Cells(lig, "AE").Value > 0 Then
              couleur = RGB(255, 255, 0)
          Else
              couleur = RGB(255, 255, 255)
          End If
          nom = LCase(Cells(lig, "Z"))
          nom = Replace(nom, " ", "")
          nom = Replace(nom, "-", "")
          nom = Replace(nom, "â", "a")
          nom = Replace(nom, "é", "e")
          Set sh = ActiveSheet.Shapes(nom)
          sh.Fill.ForeColor.RGB = couleur
      Next lig

      si tu as encore l'erreur, peux-tu passer en mode débogage, puis positionner le curseur, dans le code, sur "nom", puis sur "lig", pour découvrir quelle commune a un soucis?

      EDIT: changé le code pour remplacer é par e
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dine85000 Messages postés 6 Statut Membre
     
    Bonjour,
    l'erreur est en ligne 13 sur le nom, j'ai passé ma souris dans le code sur nom et en exemple il m'indique larochesuryon tout attaché, le nom que j'avais donné a ma forme en premier mais depuis je l'ai renommé est-ce dû a cela ?
    je désespère pas facile quand on connait pas grand chose.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      oui, le code, comme il est écrit, s'attend à ce que la forme s'appelle larochesuryon, un nom déduit du nom de la commune en colonne Z.
      le code peut être adapté, par exemple pour utiliser des noms de forme que tu mettrais, pour quelques communes, dans une autre colonne.
      0
  7. dine85000 Messages postés 6 Statut Membre
     
    pourquoi le code ne reprend pas le nouveau nom de la forme ?
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      comment le code pourrait-il le deviner ou le découvrir?
      à part toi, qui sait que la forme associée à cette commune a changé de nom?
      0