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
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 ^^