Erreur de compilation sur execution d'une macro enregistré

Bonjour,

Je suis sur Excel2016/64bits ...

Pour voir, et apprendre le code VBA j'ai crée et enregistré une macro très simple...

dans l'exemple ici, juste une sélection d'un groupe de cellules, et la mise en place d'une bordure sur le contour...

Sub Zone_bordure_et_couleur()
'
' Zone_bordure_et_couleur Macro
'
'
    Range("A1:B5").Select
    selection.Borders(xlDiagonalDown).LineStyle = xlNone
    selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Color = -16776961
        .TintAndShade = 0
        .Weight = xlThick
    End With
    With selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Color = -16776961
        .TintAndShade = 0
        .Weight = xlThick
    End With
    With selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Color = -16776961
        .TintAndShade = 0
        .Weight = xlThick
    End With
    With selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Color = -16776961
        .TintAndShade = 0
        .Weight = xlThick
    End With
    selection.Borders(xlInsideVertical).LineStyle = xlNone
    selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Range("D17").Select
End Sub

Mais cela bloque quand je l'exécute, via un bouton sur une des feuilles de mon classeur, ou directement via le debuggeur

Jai un message d'erreur disant

"Erreur de compilation: Fonction ou variable attendue"

et cela met le mot "selection" de la macro en bleu sur "selection.Borders(xlDiagonalDown).LineStyle = xlNone"

Là j'avoue ne pas comprendre.... Il y a une subtilité que je ne vois pas, a croire que la commande "selection" n'existe pas

Une idée s'il vous plait

Merci

Bonjour,

Teste en remplaçant "xlNone" par 0

Bonjour,

oui c'est "bizarre" ... de plus ton selection avec un s en minuscule ..c'est aussi étonnant... un truc de la 2016 ...

tu peu-peu être nettoyer ton code en supprimant tous ces select et selection inutiles :

  
with Range("A1:B5")
     .Borders(xlDiagonalDown).LineStyle = xlNone
    .Borders(xlDiagonalUp).LineStyle = xlNone
end with

Bon jour Nounours, Raja, Pierre.jy, bonjour le forum,

Aucun problème avec ton code chez moi. Je l'ai copié dans un module standard nommé Module 1.

  • Je lance la macro... Ça marche !
  • J'ai rajouté un Commandbutton (de la boîte à outil Contrôle AxtiveX) dans un onglet avec ce code :
Private Sub CommandButton1_Click()
Module1.Zone_bordure_et_couleur
End Sub
  • je clique sur le bouton... Ça marche ! Dans le même onglet que le bouton...
  • J'ai rajouté un Commandbutton (de la boîte à outil Contôle de formulaire) dans un onglet avec ce code :
Sub Bouton2_Cliquer()
Module1.Zone_bordure_et_couleur
End Sub

- je clique sur le bouton. Ça marche ! Dans le même onglet que le bouton...

Je ne vois pas où est ton problème...

[Édition]

Bonjour Pierre.jy nos posts se sont croisés...

Bonjour,

Merci pour les réponses

Pour ce qui est de passer xlNone à 0 cela change rien,

Oui moi aussi j'ai tillé sur le "s" miniscule de "selection", j'ai aussi essayé de le passer an majuscule, mais automatiquement rechangé en miniscule

Au moins le code fonctionne quelque part ^^ ... profites en .... lool

ThauThéme, tu tourne sous quoi toi?

Pour cela que je ne comprends pas

J'ai viré les "selection" mais là le message d'erreur dit "référence incorrecte ou non qualifié"

donc c'est bien "selection" qui gène

Effectivement si pour les deux première ligne je fais

with range ("A1:B5") cela passe les deux première ligne, mais cela bloque a la suivante

J'ai essayé la même manip... With range et puis là .border etc et là msg d'erreur "utilisation incorrecte de la propriété... MDR

POURQUOI MOI Sgnirff .....

Merci pour tout aide et conseils

NOUNOURS94 a écrit :

J'ai essayé la même manip... With range et puis là .border etc et là msg d'erreur "utilisation incorrecte de la propriété... MDR

POURQUOI MOI Sgnirff .....

non la c'est plus le même problème c'est juste une erreur de syntaxe ton code n'est pas bon tu ne peu pas mettre juste "With Range" .. il manque du code derrière ces 2 mots seuls ne veulent rien dire.

Re,

Regarde la signature de Raja !...

Bonjour,

Essaie ainsi :

Sub Zone_bordure_et_couleur()
    With ActiveSheet.Range("A1:B5")
        .Borders(xlDiagonalDown).LineStyle = xlNone
        .Borders(xlDiagonalUp).LineStyle = xlNone
        With .Borders
            .LineStyle = xlContinuous
            .Color = vbRed
            .Weight = xlThick
        End With
    End With
End Sub

Cordialement.

Re,

Pffff ! Beaucoup trop compliqué MFerrand !...

ThauThème a écrit :

Re,

Pffff ! Beaucoup trop compliqué MFerrand !...

toujours plus clair et plus simple que tous ces selection et selects

Re,

C'était de l'humour mon cher Pierre...

Bonjour,

Avec votre aide, j'ai résolu le problème en utilisant "with" et "range ("A1:B5")"

tout a l'heure il y avait une erreur de syntaxe sur l'histoire des ".borders (xlEdgeLeft)" ....

il fallait mettre juste derrière "range("A1:B5"), et non à la ligne d'après....

J'ai aussi viré des lignes, que l'enregistrement met, et cela fonctionne toujours.

Pas très optimisé l'enregistreur mdr

Sub Zone_bordure_couleur()
'
' Selectionner une zone, puis mettre une bordure rouge
'
    'With Range("A1:B5")
    '.Borders(xlDiagonalDown).LineStyle = xlNone
    '.Borders(xlDiagonalUp).LineStyle = xlNone
    '.Borders(xlInsideVertical).LineStyle = xlNone
    '.Borders(xlInsideHorizontal).LineStyle = xlNone
    'End With
    With Range("A1:B5").Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Color = -16776961
        .TintAndShade = 0
        .Weight = xlThick
    End With
    With Range("A1:B5").Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Color = -16776961
        .TintAndShade = 0
        .Weight = xlThick
    End With
    With Range("A1:B5").Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Color = -16776961
        .TintAndShade = 0
        .Weight = xlThick
    End With
    With Range("A1:B5").Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Color = -16776961
        .TintAndShade = 0
        .Weight = xlThick
    End With
End Sub

Reste que je ne comprends pas la valeur de couleur:

pour rouge j'attendais .color = RGB (255,0,0) ... mais là encore ^^

Néanmoins il faut que je trouve le pb que j'ai avec "selection"

Vais me balader sur le web et vois si.....

c'était quand même un enregistrement Macro

non mais !!!

Si je trouve la raison, je posterais...

Merci à tous

Tu peux aller un peu plus loin dans la simplification...

TintAndShade, à sa valeur par défaut, ne sert à rien. Il ne sert d'ailleurs apparemment qu'à nuancer une couleur de Thème...

Par ailleurs, le système de couleur étant RGB, l'utilisation de la fonction RGB pour renvoyer un code couleur suffira toujours pour renvoyer la couleur voulue.

Et s'agissant du rouge élémentaire, tu disposes en outre d'une constante VBA : vbRed pour le renvoyer.

Et Borders utilisé sans paramètres pour cibler une bordure particulière, désigne l'ensemble des bordures horizontales et verticales de la plage considérée. Inutile donc de multiplier le volume de code par 4 quand une fois remplit le même office.

Cordialement.

NOUNOURS94 a écrit :

Néanmoins il faut que je trouve le pb que j'ai avec "selection"

Vais me balader sur le web et vois si.....

c'était quand même un enregistrement Macro

non mais !!!

Si je trouve la raison, je posterais...

Merci à tous

il semble qu'outre la version 2016 tu dispose d'autre versions d'excel ... as tu essayé d'ouvrir ton classeur et de tester ton code avec ces autres versions ?

Bonjour,

quand un mot basique (c'est le cas de le dire ) n'est pas reconnu c'est parfois dû à une référence absente.

Regarde dans 'Outils / Références...' si une n'est pas marquée Manquante.

Si oui décoche-là.

Puisqu'on est dans les objets pourquoi as-tu installé la version 64 bits ?

Si ce n'est pas pour une raison impérative et obligatoire désinstalle-là pour la 32 bits, tu auras plus de compatibilité avec tout le monde.

Pour commencer elle n'a pas (ou très peu) d'objet ActiveX, très contraignant et pénalisant (les boutons, listes, etc programmables).

Et du coup question subsidiaire : tu es sur windows ou Mac ? Mac ne connait pas les activeX non plus, ça relativise mes propos précédents.

eric

Bonsoir tous le monde

Bien encore plein de conseils, je vous remercie tous

Mferrand

Tu peux aller un peu plus loin dans la simplification...

TintAndShade, à sa valeur par défaut, ne sert à rien. Il ne sert d'ailleurs apparemment qu'à nuancer une couleur de Thème...

Par ailleurs, le système de couleur étant RGB, l'utilisation de la fonction RGB pour renvoyer un code couleur suffira toujours pour renvoyer la couleur voulue.

Et s'agissant du rouge élémentaire, tu disposes en outre d'une constante VBA : vbRed pour le renvoyer.

Et Borders utilisé sans paramètres pour cibler une bordure particulière, désigne l'ensemble des bordures horizontales et verticales de la plage considérée. Inutile donc de multiplier le volume de code par 4 quand une fois remplit le même office.

Oui suis d'accord pour tint and shade, je l'ai déjà viré, quand à la couleur rouge c'était pour le test mais là aussi j'ai modifié

merci pour l'info des couleurs élémentaires je vais creuser...

Pour l'histoire des "borders" je vais essayer, effectivement si je peux réduire la syntaxe ^^ je suis preneur....

j'ai fais ce code (voir dessous), mais là au lieu d'avoir un contour de la zone de selection, toutes les cellules dans la zone de selection sont contourés...

    With Range("A2:G6").Borders '(xlEdgeLeft)         'selectionner bordure gauche
        .LineStyle = xlContinuous                   'Selectionner type de ligne
        .Color = RGB(0, 0, 0)                       'selectionner couleur
        .Weight = xlThick                           'selectionner épaisseur
    End With
    'With Range("A2:G6").Borders(xlEdgeTop)          'selectionner bordure haute
        '.LineStyle = xlContinuous                   'Selectionner type de ligne
        '.Color = RGB(0, 0, 0)                       'selectionner couleur
        '.Weight = xlThick                           'selectionner épaisseur
    'End With
    'With Range("A2:G6").Borders(xlEdgeBottom)       'selectionner bordure basse
        '.LineStyle = xlContinuous                   'Selectionner type de ligne
        '.Color = RGB(0, 0, 0)                       'selectionner couleur
        '.Weight = xlThick                           'selectionner épaisseur
    'End With
    'With Range("A2:G6").Borders(xlEdgeRight)        'selectionner bordure droite
        '.LineStyle = xlContinuous                   'Selectionner type de ligne
        '.Color = RGB(0, 0, 0)                       'selectionner couleur
        '.Weight = xlThick                           'selectionner épaisseur
    'End With

peut être me suis trompé dans la syntaxe...

Je montrerais bien une image, mais j'arrive pas a le faire

Pierre.jy

il semble qu'outre la version 2016 tu dispose d'autre versions d'excel ... as tu essayé d'ouvrir ton classeur et de tester ton code avec ces autres versions ?

Oui je le ferais, lundi quand je serais à la boite, par acquis de conscience...

Mais j'ai aussi regardé dans le menu F2, et je trouve pas "Selection"... peut être que le problème est là

J'ai quand même mis mon pack office à jour, mais rien a changé ^^

Eriiic

Puisqu'on est dans les objets pourquoi as-tu installé la version 64 bits ?

J'avoue que j'ai dis 64bits, parceque ma machine l'est, et quand je voulais Outlook sur mon ancien pack office 2010, j'ai due "biiiiip"

C'est peut être un 32bits, faut que je vois où je peux trouver l'info.....

Sinon j'ai progressé sur mon code pour faire des essais, j'apprends plein de choses en le faisant, mais c'est sûrement la mauvaise manière pour mon projet final, et définitivement pas optimisé ^^

mais cela me permet de savoir ou son les problèmes à venir....

Pour ce projet, quand il sera un peu plus réfléchis, je créerais un sujet dessus....

Merci et bonsoir

A+

C'est peut être un 32bits, faut que je vois où je peux trouver l'info.....

'Fichier / Aide' , à droite derrière le n° de version

Pas de références [Manquante] ?

Pas sûr d'avoir compris, mais si tu définis uniquement le contour de la plage pour y mettre une bordure, c'est BorderAround et non Borders qu'il faut utiliser...

Cordialement.

BorderAround ? Je le note

Bonjour

MFerrand a écrit :

Pas sûr d'avoir compris, mais si tu définis uniquement le contour de la plage pour y mettre une bordure, c'est BorderAround et non Borders qu'il faut utiliser....

Oui super, j'ai réussi, quand j'ai compris qu'il ne fallait pas mettre le poids, et le style de ligne sur la même ligne commande

Ceci étant la ligne par défaut étant "xlcontinuous" apparement cela ne me géne pas..

ActiveSheet.Range("A2:G6").BorderAround ColorIndex:=0, Weight:=xlThick

Merci, pour cette commande, 1 ligne au lieu de plusieurs ^^ c'est parfait


Bonjour,

eriiic a écrit :

C'est peut être un 32bits, faut que je vois où je peux trouver l'info.....

'Fichier / Aide' , à droite derrière le n° de version

Rectificatif, j'ai un pack office 2016 Famille/PME 32bits .... puis mis à jour hier ...

Bin voilà déjà une bonne nouvelle ^^

Rechercher des sujets similaires à "erreur compilation execution macro enregistre"