Combo et Excel 2010
Le
Andre

Bonjour,
J'ai un souci avec un combo en Excel 2010.
J'explique.
Je crée un combo via le VBA:
a) je donne ses propriétées (coordonnées x et y, largeur et hauteur).
b) je la rempli
c) je l'affiche.
Sous Excel 2003, tout fonctionne correctement.
En Excel 2010, il y a un attribut "Lock aspect ratio".
En cherchant sur Internet, je vois que cet attribut, est par défaut, en office
2010 sur "true".
Résultat, quand je donne une valeur (comme la largeur par ex), et bien j'obtiens
un combo qui prend une hauteur démesurée.
Si j'enlève (manuellement), cet attribut, tout fonctionne correctement.
D'où ma question à 0.0000001 € : Comment, par VBA, enlever cet attribut ?
Remarque:
J'ai trouvé sur Internet la commande LockAspectRatio = true or false.
Cette propriété ne s'applique qu'aux shapes (rectangle, cercle, flèche, photo)
pas le combo.
Merci pour votre aide
André
J'ai un souci avec un combo en Excel 2010.
J'explique.
Je crée un combo via le VBA:
a) je donne ses propriétées (coordonnées x et y, largeur et hauteur).
b) je la rempli
c) je l'affiche.
Sous Excel 2003, tout fonctionne correctement.
En Excel 2010, il y a un attribut "Lock aspect ratio".
En cherchant sur Internet, je vois que cet attribut, est par défaut, en office
2010 sur "true".
Résultat, quand je donne une valeur (comme la largeur par ex), et bien j'obtiens
un combo qui prend une hauteur démesurée.
Si j'enlève (manuellement), cet attribut, tout fonctionne correctement.
D'où ma question à 0.0000001 € : Comment, par VBA, enlever cet attribut ?
Remarque:
J'ai trouvé sur Internet la commande LockAspectRatio = true or false.
Cette propriété ne s'applique qu'aux shapes (rectangle, cercle, flèche, photo)
pas le combo.
Merci pour votre aide
André
Poste ton code.
Cordialement.
Daniel
Merci de réagir si rapidement
Voici mon code
Les paramètres:
combo: le nom du combo à afficher
dict: les données à remplir
topRow: n° de ligne ou sera placé le combo
Les 2 procédures:
hideAllControls: Un seul combo doit apparaitre à l'écran. Cache tous les autres.
prepareComboBox: rempli le combo avec les données.
Sub showComboCategory(combo As ComboBox, dict As Dictionary, topRow As Long)
hideAllControls
prepareComboBox combo, dict
combo.Activate
combo.Left = main.Cells(topRow, "C").Left
combo.Top = main.Cells(topRow, "C").Top
combo.height = main.Cells(topRow, "C").height + main.Cells(topRow + 1,
"C").height
combo.Width = main.Cells(topRow + 1, "J").Left - main.Cells(topRow, "C").Left
textLeftLable "F6", selectedLabel, "G6", str((topRow - alertsStartRow - 11) /
alertAreaHeight)
End Sub
Merci de votre aide
André
In article
parce que je ne vois pas la création du combobox dans le code que tu as
posté.
Daniel
J'aimerais bien vous aider, mais, je viens de recevoir la réponse de mon chef,
je ne peux pas.
Par contre,
1° ce que j'ai trouvé et qui fonctionne à 80%:
Dans la procédure de ce matin, j'ai ajouté AVANT les propriétés de taille et
position, les 2 lignes suivantes:
nom = combo.Name
ActiveSheet.Shapes(nom).LockAspectRatio = msoFalse ou msoTrue
Pour une raison qui m'échappe, de temps à autre, cela ne fonctionne pas.
2° Le code ci-dessous est le code d'appel de la procédure que j'ai donné ce
matin. Ce code est derriere l'évènement "SelectionChange" de la feuille Excel.
En fonction de la cellule selectionnée, il affichera le combo associé.
Les variables à droite du "=" sont des constantes.
Les variables à gauche du "=" sont les valeurs des cellules.
En temps normal, ces cellules sont vides. Si l'utilisateur modifie le contenu, a
ce moment, le combo associé s'affiche.
C'est vrais que j'aurais pu utiliser le "Select / Case"
If chemicalProductsRapex = rapexCat Then ' Display Chemical Products
showComboCategory main.comboChemicalProducts, chemicalProducts, topRow
ElseIf clothingRapex = rapexCat Then ' Display Clothing
showComboCategory main.comboClothing, clothing, topRow
ElseIf communicationRapex = rapexCat Then ' Display Communication
showComboCategory main.comboCommunication, communication, topRow
ElseIf constructionProductsRapex = rapexCat Then ' Display Construction Products
showComboCategory main.comboConstructionProducts, constructionProducts, topRow
ElseIf electricalRapex = rapexCat Then ' Display Electrical
showComboCategory main.comboElectrical, electrical, topRow
ElseIf hobbyRapex = rapexCat Then ' Display Hobby
showComboCategory main.comboHobby, hobby, topRow
ElseIf machineryRapex = rapexCat Then ' Display Hobby
showComboCategory main.comboMachinery, machinery, topRow
ElseIf otherRapex = rapexCat Then ' Display Hobby
showComboCategory main.comboOther, other, topRow
End If
André
In article
Non, c'est moi qui aurait voulu t'aider...
Daniel
Il y a TOUJOURS moyen....
Tu prends ton fichier, tu remplaces les noms ou données à caractère privé,
puis tu vas sur CJOINT....
Par ces temps pluvieux et brumeux, les boules de cristal sont moins
efficaces. Alors, si tu peux aider ton répondeur à t'aider, ce sera le Top.
Jacquouille
" Le vin est au repas ce que le parfum est à la femme."
"André" a écrit dans le message de groupe de discussion :
Bonjour,
J'aimerais bien vous aider, mais, je viens de recevoir la réponse de mon
chef,
je ne peux pas.
Par contre,
1° ce que j'ai trouvé et qui fonctionne à 80%:
Dans la procédure de ce matin, j'ai ajouté AVANT les propriétés de taille et
position, les 2 lignes suivantes:
nom = combo.Name
ActiveSheet.Shapes(nom).LockAspectRatio = msoFalse ou msoTrue
Pour une raison qui m'échappe, de temps à autre, cela ne fonctionne pas.
2° Le code ci-dessous est le code d'appel de la procédure que j'ai donné ce
matin. Ce code est derriere l'évènement "SelectionChange" de la feuille
Excel.
En fonction de la cellule selectionnée, il affichera le combo associé.
Les variables à droite du "=" sont des constantes.
Les variables à gauche du "=" sont les valeurs des cellules.
En temps normal, ces cellules sont vides. Si l'utilisateur modifie le
contenu, a
ce moment, le combo associé s'affiche.
C'est vrais que j'aurais pu utiliser le "Select / Case"
If chemicalProductsRapex = rapexCat Then ' Display Chemical Products
showComboCategory main.comboChemicalProducts, chemicalProducts, topRow
ElseIf clothingRapex = rapexCat Then ' Display Clothing
showComboCategory main.comboClothing, clothing, topRow
ElseIf communicationRapex = rapexCat Then ' Display Communication
showComboCategory main.comboCommunication, communication, topRow
ElseIf constructionProductsRapex = rapexCat Then ' Display Construction
Products
showComboCategory main.comboConstructionProducts, constructionProducts,
topRow
ElseIf electricalRapex = rapexCat Then ' Display Electrical
showComboCategory main.comboElectrical, electrical, topRow
ElseIf hobbyRapex = rapexCat Then ' Display Hobby
showComboCategory main.comboHobby, hobby, topRow
ElseIf machineryRapex = rapexCat Then ' Display Hobby
showComboCategory main.comboMachinery, machinery, topRow
ElseIf otherRapex = rapexCat Then ' Display Hobby
showComboCategory main.comboOther, other, topRow
End If
André
In article
Merci de votre aide. Sorry de ne pas avoir réagis vendredi. J'étais en congé.
voici le lien cjoint: http://cjoint.com/?BJwkDTRMzMA
Comment utiliser:
1er cas: Excel 2003
Ouvrez le document et allez à la ligne 60. Vous verrez en colonne C un texte
rouge "Code to be filled manually". Cliquez dessus. Vous verrez apparaitre un
combo correctement formaté. Si vous l'ouvrez, 3 items apparaissent. C'est bon.
Maintenant, ouvrez ce même document mais, avec Excel 2010.
Faites la même chose. Voyez la sérieuse différence. Vous verrez que la hauteur
du combo ira de la ligne 60 jusque 90.
Raison: la propriété "Lock aspect ratio" est activé.
J'aimerais la désactiver par VBA.
Comprendre les macros:
Ouvrez l'éditeur VB et restez dans la partie "Microsoft Excel Objects" et faite
un double clic sur la feuille "Main".
Le code qui prépare l'appel de l'affichage du combo se fait sur l'évenement
"SelectionChange" de la feuille Excel.
Les dernières lignes sont toutes les conditions If / elseif et l'appel de la
procedure "showComboCategory".
Voilà
PS: Si vous devez cacher tous les combos, executer la procédure
"hideAllControls". Elle se situe au même endroit que la procédure d'affichage du
combo.
Si vous avez besoin d'autres explications, n'hésitez pas.
Merci encore.
Andre
In article