Commandbar erreur 400
Bonjour,
J'ai récupéré un code permettant de créer un menu contextuel (remplissage des cellules plus rapide que la méthode avec menu déroulant et récupérant automatique des couleurs des shapes).
Seulement, j'ai très souvent, pas à chaque fois l'erreur 400
Et je dois cliquer sur Ok pour continuer.
Avez-vous, svp, une solution pour gérer le clic sur OK dans le code. Genre un gestion d'erreur.
Ou bien une autre solution voire carrément une qui n'utilise pas cette méthode des commandes Bar.
Ci-après le code et le fichier joint.
Merci pour votre aide
Dim Barre As CommandBar
Sub AfficheMenu()
On Error Resume Next
CommandBars("BarreColoriage").Delete
'On Error GoTo 0
ReDim ListeShapes(1 To Sheets("couleurs").Shapes.Count)
i = 1
For Each s In Sheets("couleurs").Shapes
ListeShapes(i) = s.Name
i = i + 1
Next s
Set Barre = Application.CommandBars.Add("barreColoriage", msoBarPopup)
For bb = 1 To UBound(ListeShapes)
Set myshp = Sheets("Couleurs").Shapes(ListeShapes(bb))
myshp.Copy
texte = Sheets("couleurs").Shapes(ListeShapes(bb)).DrawingObject.Caption
With Barre.Controls.Add(msoControlButton, 1, ListeShapes(bb), , True)
.PasteFace
.Caption = Sheets("Couleurs").Shapes(ListeShapes(bb)).DrawingObject.Caption
.OnAction = "Coloriage(" & bb & ")"
End With
Next bb
Barre.ShowPopup
Set Barre = Nothing
'Call Recolorier
End Sub
Sub Coloriage(p)
Application.ScreenUpdating = False
'couleur = Sheets("Couleurs").Shapes(Barre.Controls(p).Parameter).Fill.ForeColor
texte = Sheets("Couleurs").Shapes(Barre.Controls(p).Parameter).DrawingObject.Caption
If texte = "Efface" Then
texte = ""
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Else
Selection.Interior.Color = couleur
End If
Selection.Value = texte 'Left(texte, 4)
Application.ScreenUpdating = True
End Sub
- Messages
- 2'415
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Bonjour toutes et tous
1/ a)tu as mis en commentaire avec l'apostrophe devant " ' " ceci:
'couleur = Sheets("Couleurs").Shapes(Barre.Controls(p).Parameter).Fill.ForeColor
donc:
' Else
' Selection.Interior.Color = couleur
ce qui donne:
Sub Coloriage(p)
Application.ScreenUpdating = False
'couleur = Sheets("Couleurs").Shapes(Barre.Controls(p).Parameter).Fill.ForeColor
texte = Sheets("Couleurs").Shapes(Barre.Controls(p).Parameter).DrawingObject.Caption
If texte = "Efface" Then
texte = ""
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
' Else
' Selection.Interior.Color = couleur
End If
Selection.Value = texte 'Left(texte, 4)
Application.ScreenUpdating = True
End Sub
b ) texte , bb ne sont pas déclarés
2/ peut être aussi à déclarer les variables ( i, j k et s ne sont pas déclarés ) ' pas certain
Dim i As String 'etc
@à voir avec un expert d'Excel car, ils te donneront de meilleurs conseils, merci d'avance
crdlt,
André
Bonjour,
Merci pour votre réponse .J'ai malheureusement la même erreur en faisant les corrections que vous avez données.
Cordialement
Bonjour toutes et tous
1/ a)tu as mis en commentaire avec l'apostrophe devant " ' " ceci:
'couleur = Sheets("Couleurs").Shapes(Barre.Controls(p).Parameter).Fill.ForeColor
donc:
' Else ' Selection.Interior.Color = couleur
ce qui donne:
Sub Coloriage(p) Application.ScreenUpdating = False 'couleur = Sheets("Couleurs").Shapes(Barre.Controls(p).Parameter).Fill.ForeColor texte = Sheets("Couleurs").Shapes(Barre.Controls(p).Parameter).DrawingObject.Caption If texte = "Efface" Then texte = "" With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With ' Else ' Selection.Interior.Color = couleur End If Selection.Value = texte 'Left(texte, 4) Application.ScreenUpdating = True End Sub
b ) texte , bb ne sont pas déclarés
2/ peut être aussi à déclarer les variables ( i, j k et s ne sont pas déclarés ) ' pas certain
Dim i As String 'etc
@à voir avec un expert d'Excel car, ils te donneront de meilleurs conseils, merci d'avance
crdlt,
André
- Messages
- 2'415
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Bonjour toutes et tous
et en faisant tout simplement une mise en forme conditionnelle (MFC)
@tester:
tu sélectionnes les colonnes de E jusqu'à L (E,F,G,H,I,J,K et L)
dans le menu 'Accueil' puis clic sur, Mise en forme conditionnelle, dans la liste déroulante tu choisis 'Gérer les Règles' (une mini fenêtre apparaît)
ensuite, 'Nouvelle Règle' (une mini fenêtre apparaît) =clic sur=> 'Appliquer une mise en forme uniquement aux cellules qui contiennent' dans Valeur de la cellule choisir sur cette mini liste déroulante 'Texte spécifique' à droite marqué Paris (par exemple) choisir le format de remplissage et de couleur de texte puis ok puis appliquer est effectuer cette tâche pour les autres Villes Nantes, Marseille etc. et les autres, Cong. etc.
crdlt, André
Merci André13 pour votre réponse mais en fait je ne veux pas passer par la MFC, je veux l'éviter côute que coûte.
Merci
Bonjour toutes et tous
et en faisant tout simplement une mise en forme conditionnelle (MFC)
@tester:
tu sélectionnes les colonnes de E jusqu'à L (E,F,G,H,I,J,K et L)
dans le menu 'Accueil' puis clic sur, Mise en forme conditionnelle, dans la liste déroulante tu choisis 'Gérer les Règles' (une mini fenêtre apparaît)
ensuite, 'Nouvelle Règle' (une mini fenêtre apparaît) =clic sur=> 'Appliquer une mise en forme uniquement aux cellules qui contiennent' dans Valeur de la cellule choisir sur cette mini liste déroulante 'Texte spécifique' à droite marqué Paris (par exemple) choisir le format de remplissage et de couleur de texte puis ok puis appliquer est effectuer cette tâche pour les autres Villes Nantes, Marseille etc. et les autres, Cong. etc.
crdlt, André
Bonjour,
Ci-joint ton fichier très légèrement corrigé ...
Cela devrait te débarrasser du bug ... A tester ...
Cela dit, en termes de rapidité ... il me semble qu'une macro évènementielle pourrait rivaliser favorablement...
avec la Commandbar ... .... et la manipulation des Shapes ... qui n'ajoute pas grand-chose ...
J'ai toujours l'erreur 400.
Cependant, je pense que cela vient (depuis le le début) de ma version excel 2013, je viens de tester sur 2016, et je n'ai pas eu cette erreur .
Merci
Bonjour,
Ci-joint ton fichier très légèrement corrigé ...
Cela devrait te débarrasser du bug ... A tester ...
Cela dit, en termes de rapidité ... il me semble qu'une macro évènementielle pourrait rivaliser favorablement...
avec la Commandbar ... .... et la manipulation des Shapes ... qui n'ajoute pas grand-chose ...
Re,
Je dois t'avouer que je n'arrive pas à répliquer ton erreur ...
Cela dit, aucune variable n'était déclarée ... et je continue de penser que Selection_Change n'est pas l'idéal avec la gestion de Shapes uniquement pour colorier des cellules ...
Concrètement que se passe-t-il pour rallonger ta liste de ' validations ' ...?
Je viens de remplir en test une centaine de ligne ( sous excel 2016) et je n'ai pas rencontré un seul souci.
Pour rallonger la liste de validation, on va dans la feuille couleur et on rajoute un shape avec sa couleur et son libellé.
Sinon j'aurai une autre demande si vous me le permettez:
je voudrais m'inspirer de ce menu contextuel, non pas pour colorer mais juste renseigner des cellules (donc en se passant des listes déroulantes).Par exemple, j'aurais dans une colonne d'une feuille un liste : à faire, à classer,à déléguer, à revoir, à envoyer) et après un menu contextuel qui reprend l'ensemble de cette liste que je peux coller dans une cellule après sélection depuis le menu contextuel.
Pensez-vous que cela soit possible ? Pouvez-vous m'aider svp ?
Merci
Re,
Je dois t'avouer que je n'arrive pas à répliquer ton erreur ...
Cela dit, aucune variable n'était déclarée ... et je continue de penser que Selection_Change n'est pas l'idéal avec la gestion de Shapes uniquement pour colorier des cellules ...
Concrètement que se passe-t-il pour rallonger ta liste de ' validations ' ...?
Re,
Pa rapport à ta nouvelle question
.Par exemple, j'aurais dans une colonne d'une feuille un liste : à faire, à classer,à déléguer, à revoir, à envoyer) ...
et après un menu contextuel qui reprend l'ensemble de cette liste que je peux coller dans une cellule après sélection depuis le menu contextuel.
J'arrive à comprendre la première partie qui concerne les listes déroulantes ... mais pas la seconde partie " du menu contextuel " ...
Dans le fichier avec les villes à coller qui s'obtient en faisant un clic droit, je voudrais disposer de la même chose : au clic droit obtenir une liste de choix :à faire, à classer,à déléguer, à revoir, à envoyer. cette liste a pour source une colonne d'une feuille de mon classeur.
En résumé, j'ai une colonne qui s'appelle "Actions", au lieu de le remplir via une liste déroulante, je voudrais la remplir en faisant un clic droit qui ouvre le menu contextuel et j'ai juste à choisir l'action qu'il me faut qui se mettra sur la cellule active.
Merci
Re,
Pa rapport à ta nouvelle question
.Par exemple, j'aurais dans une colonne d'une feuille un liste : à faire, à classer,à déléguer, à revoir, à envoyer) ...
et après un menu contextuel qui reprend l'ensemble de cette liste que je peux coller dans une cellule après sélection depuis le menu contextuel.
J'arrive à comprendre la première partie qui concerne les listes déroulantes ... mais pas la seconde partie " du menu contextuel " ...
Re,
Ci-joint ton fichier test ...
Le double-clic dans la Colonne D pour les 'Actions ' ...
En espèrant que cela t'aide
C'est presque ce je souhaitais, seulement comme les actions à faire évoluent et l'utilisateur du fichier ne souhaite pas rentrer dans le code, il ne sait pas meme pas comment faire. ET surtout je souhaite cette technique (double clic) pour renseigner autres choses plus dynamique dans le temps.
Donc l'idéal serait de pouvoir passer par une colonne où on mettrait "action 1, action 2...)
Merci
Re,
Ci-joint ton fichier test ...
Le double-clic dans la Colonne D pour les 'Actions ' ...
En espèrant que cela t'aide
Re,
S'agit-il d'avoir les six choix actuellement prévus dont les libellés changeraient ...
ou
S'agit-il d'avoir une nombre toujours changeant de choix dont les libellés changeraient ...?
En réalité ce sont les deux cas:
- les libellés peuvent changer
- Et le nombre peuvent varier,
J'ai essayé de faire ça et il donne bien le contenu de la cellule A1 mais je voudrais avoir une liste qui prendrait toutes les données de la colonne A. la couleur n'est pas importante je peux tout mettre en .Interior.Color = RGB(255, 255, 255). C'est même ce que je préfère.
Private Sub CommandButton1_Click()
With ActiveCell
'.Value = Me.CommandButton1.Caption
.Value = ThisWorkbook.Sheets("Feuil1").Range("A1").Value
.Interior.Color = RGB(255, 255, 255)
End With
Unload Me
End Sub
Après l'idéal c'est que cela sort comme le menu contextuel des villes car il peut contenir une quinzaine d'éléments.
Merci beaucoup
Re,
S'agit-il d'avoir les six choix actuellement prévus dont les libellés changeraient ...
ou
S'agit-il d'avoir une nombre toujours changeant de choix dont les libellés changeraient ...?