IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Bouton (contrôle de formulaire) jamais centrer


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut Bouton (contrôle de formulaire) jamais centrer
    Bonjour a vous,


    Après des recherche infructueuses sur le web je m'adresse a vous afin de trouver une solution a mon problème. (oui mon cher Ryu, j'ai fais mes devoirs )


    A l'aide d'un premier bouton (contrôle formulaire) que j'y rattache une macro, je génère des feuilles selon des conditions. Dans ces nouvelles feuilles, j'ajoute un autre bouton (contrôle formulaire) de mon coté tout fonctionne a merveille. Sur deux de mes collègues le bouton n'est pas placé a la même emplacement que moi.


    J'ai donc décidé de fixé des largeur de colonne a l'aide de columns.columnswidth et de centré le bouton a la même emplacement i.e. en milieu d'une des entêtes de colonnes. De mon coté, le bouton est centré mais encore une fois mes 2 collègues, le bouton n'Est toujours pas centrés.


    Donc je veux savoir, ce qui cause ce problèmee et et en second lieu, comment remédier a la situation


    en vous remerciant, cers amis du forum

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur VBA
    Inscrit en
    Avril 2017
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur VBA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 122
    Points : 194
    Points
    194
    Par défaut


    Pas de code, pas de capture, pas assez d'information pour avoir une intuition de quoi répondre.

    Ce n'est surement pas par hasard que personne n'a essayé de répondre depuis près de deux jours.

    il manque principalement :
    la definition des nouveaux formulaires
    la création du dernier bouton et ses paramètrages.

    accessoirement toute les redefinitions de ses propriétés, etc.

    On n'a pas besoin du code lancé par la macro sauf s'il redefinit les propriétés du formulaire, du bouton
    Je ne teste quasi jamais le code que je propose. il s'agit juste d'indication sur comment je m'y prendrais, comment faire, des lignes d'intention.
    Il y a donc souvent des erreurs, le déboggage existe pour cela.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Merci Gfacro de m'avisez des précisions requises.


    Voici une partie du code contenant l'information pertinente (le code des largeurs des colonnes des nouvelles feuilles ainsi celui de la créations du boutons)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Sheets.Add.Name = nom_fournisseur
                        Feuil3.[entete].Copy Sheets(nom_fournisseur.Value).Range("a1")
                        ActiveSheet.Shapes.Range(Array("Button 1")).Delete
     
                         Range("Q1").Copy Range("r1:t1")
                         Range("R1").Value = "Description du fournisseur"
                         Range("S1").Value = "Reponse du fournisseur"
                         Range("T1").Value = "Lien internet ou catalogue du fournisseur"
                         Columns("a:b").ColumnWidth = 6.11
                         Columns("c").ColumnWidth = 8.33
                         Columns("d").ColumnWidth = 15.78
                         Columns("e").ColumnWidth = 11.89
                         Columns("f").ColumnWidth = 15.78
                         Columns("g").ColumnWidth = 40
                         Columns("h:o").ColumnWidth = 15.78
                         Columns("p").ColumnWidth = 11.89
                         Columns("q:t").ColumnWidth = 40
     
     
     
                        ActiveSheet.Buttons.Add(1312.2, 28.2, 59.4, 10.2).Select
                        Selection.OnAction = "sauvegarde_onglet"
                        Selection.Characters.Text = "sauvegarder"
                            With Selection.Characters(start:=1, Length:=11).Font
                                .Name = "Calibri"
                                .FontStyle = "Normal"
                                .Size = 8
                                .Strikethrough = False
                                .Superscript = False
                                .Subscript = False
                                .OutlineFont = False
                                .Shadow = False
                                .Underline = xlUnderlineStyleNone
                                .ColorIndex = 1
                            End With
     
     
                    End If
     
     'on copie les données dans la feuille correspondantes
     
                        Feuil3.Cells(x + 1, [seq].Column).Copy Sheets(nom_fournisseur.Value).Cells(x + 1, 1)
                        Feuil3.Cells(x + 1, [pair_impair].Column).Copy Sheets(nom_fournisseur.Value).Cells(x + 1, 2)
                        Feuil3.Cells(x + 1, [etab].Column).Copy Sheets(nom_fournisseur.Value).Cells(x + 1, 3)
                        Feuil3.Cells(x + 1, [acronyme_etab].Column).Copy Sheets(nom_fournisseur.Value).Cells(x + 1, 4)
                        Feuil3.Cells(x + 1, [item_etab_moulinette].Column).Copy Sheets(nom_fournisseur.Value).Cells(x + 1, 5)
                        Feuil3.Cells(x + 1, [item_etab].Column).Copy Sheets(nom_fournisseur.Value).Cells(x + 1, 6)
                        Feuil3.Cells(x + 1, [descr_etab].Column).Copy Sheets(nom_fournisseur.Value).Cells(x + 1, 7)
                        Feuil3.Cells(x + 1, [couleur_etab].Column).Copy Sheets(nom_fournisseur.Value).Cells(x + 1, 8)
                        Feuil3.Cells(x + 1, [fourn_etab].Column).Copy Sheets(nom_fournisseur.Value).Cells(x + 1, 9)
                        Feuil3.Cells(x + 1, [fournisseur].Column).Copy Sheets(nom_fournisseur.Value).Cells(x + 1, 10)
                        Feuil3.Cells(x + 1, [marque_etab].Column).Copy Sheets(nom_fournisseur.Value).Cells(x + 1, 11)
                        Feuil3.Cells(x + 1, [cat_etab].Column).Copy Sheets(nom_fournisseur.Value).Cells(x + 1, 12)
                        Feuil3.Cells(x + 1, [format_contrat].Column).Copy Sheets(nom_fournisseur.Value).Cells(x + 1, 13)
                        Feuil3.Cells(x + 1, [qte_an].Column).Copy Sheets(nom_fournisseur.Value).Cells(x + 1, 14)
                        Feuil3.Cells(x + 1, [prix_contrat].Column).Copy Sheets(nom_fournisseur.Value).Cells(x + 1, 15)
                        Feuil3.Cells(x + 1, [valider_x].Column).Copy Sheets(nom_fournisseur.Value).Cells(x + 1, 16)
                        Feuil3.Cells(x + 1, [commentaire].Column).Copy Sheets(nom_fournisseur.Value).Cells(x + 1, 17)
     
     
     
    'on supprime les lignes vides si bien sur les feuilles ont été créés
     
                        Sheets(nom_fournisseur.Value).Select
                        Range("A2").EntireRow.Insert
                        Sheets(nom_fournisseur.Value).Range("b1:B" & LastLignUsedInColumn("B")).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    Voici l'imprime écran de ce que j'obtiens de mon PC (le bouton est centré comme je le désire)


    Nom : Capture1.JPG
Affichages : 651
Taille : 105,6 Ko


    Voici une copie de l'imprime écran reçu de ma collegue (bouton décalé)


    Nom : Capture2.JPG
Affichages : 571
Taille : 54,5 Ko

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur VBA
    Inscrit en
    Avril 2017
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur VBA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 122
    Points : 194
    Points
    194
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Buttons.Add(Activesheet.range("P1").left, Activesheet.range("P1").height / 2, Activesheet.range("P1").width, Activesheet.range("P1").height /2).Select
    Les dimensions données sont en nombre de point, de mémoire même je crois qu'ils sont dans une unité bizarre qu'office calcule, mais disons qu'ils sont en point à l'écran. Je pense que vous n'avez pas la même résolution d'affichage, c'est pour cela que les points n'ont pas la même taille chez vous et chez elle.
    Le bouton est plus à droite chez elle, cela signifie que ses points d'affichage sont plus gros, qu'elle affiche moins de points à l'écran, donc que sa résolution est moindre. ... Si je ne me trompe pas, c'est facile de se tromper sur un truc comme ça.

    Ce que j'ai fait, j'ai remplacé vos points par le nombre de point depuis la gauche de P1, sa hauteur /2 = le bouton commence à la moitié de la cellule en hauteur, la largeur de P1 en points et sa hauteur /2 à nouveau.
    Le bouton commence à hauteur de p1 / 2 et a la taille hauteur / 2 de P1, donc il va faire toute la moitié inférieure de la case P1.


    Il est aussi possible d'utiliser les centimetres avec Application.CentimetersToPoints(tailleEnCm)

    NB : Pour ceux que cela intéresse, c'est un problème de taille d'écran et de nombre de points.
    Pour une même résolution d'écran, vous pouvez avoir des tailles d'écran qui varient beaucoup.
    Nom : Capture.PNG
Affichages : 501
Taille : 5,6 Ko
    Le même nombre de points répartit sur une surface bien plus grande signifie que les points sont plus gros.
    Pour que les cercles restent des cercles, les carrés restent des carrés, les proportions soient respectées, etc, windows est obligé de faire des calculs complexes pour retraiter cela et faire en sorte que l'affichage soit harmonieux.
    Je ne teste quasi jamais le code que je propose. il s'agit juste d'indication sur comment je m'y prendrais, comment faire, des lignes d'intention.
    Il y a donc souvent des erreurs, le déboggage existe pour cela.

  5. #5
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour.

    Exemple
    Pour centrer le bouton verticalement et horizontalement dans cellule G6

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Set c = ActiveSheet.Range("g6")
    largeur = c.Width / 5 * 4
    hauteur = c.Height / 3
     
    ActiveSheet.Buttons.Add(c.Left + (c.Width - largeur) / 2, c.Top + (c.Height - hauteur) / 2, largeur, hauteur).Select
    Cordialement

    Docmarti.

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Bonjour a vous, je sens que l'on approche de la solution.


    J'ai ajouté le code de Docmarti et j'ai le résultat suivant :

    Nom : Capture.JPG
Affichages : 601
Taille : 108,9 Ko

    LE début du bouton est centrer dans la cellule voulue (p1) mais je présume qu'elle ne soustrait pas la moitié de la longueur du bouton.

    Le bouton également ne devrais jamais être plus large que la cellule spécifié



    Pour le code de Gfacro,


    Je ne vois malheureusement pas de bouton

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Il te faut simplement travailler en positions et dimensions relatives.
    Il est plus sage de commencer alors par la détermination des dimensions du bouton, puis d'adapter le reste
    ainsi, par exemple et à main levée --->> (cet exemple à main levée devrait ajouter le bouton au centre de H1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    largeur = 60
      hauteur = 20
      with range("h1")
          .rowheight = hauteur * 2
          .columnwidth = largeur / 2
          .Value = "blabla"
          .verticalalignment = xltop
          activesheet.buttons.add(.left + ((.width - largeur) / 2), .height - hauteur, largeur, hauteur).select
    '.... et le reste de ton code
      End With
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #8
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    J'ai repris le code de Docmarti que j'ai modifié un peu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Set c = ActiveSheet.[p1]
        largeur = c.Width
        hauteur = c.Height / 4
     
    ActiveSheet.Buttons.Add(c.Left + (c.Width - largeur) / 2, c.Top + (c.Height - hauteur) / 2, largeur / 4, hauteur).Select

    J'arrive a mon résultat mais j'attends toujours une réponse de mes 2 collègues.

  9. #9
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Je viens de recevoir l'imprime écran de ma collegue


    Toujours pas centré mais c'Est mieux que mes tentatives antérieures.


    Nom : Capture.JPG
Affichages : 588
Taille : 22,5 Ko

  10. #10
    Membre habitué
    Homme Profil pro
    Développeur VBA
    Inscrit en
    Avril 2017
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur VBA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 122
    Points : 194
    Points
    194
    Par défaut
    est ce que vous comprenez les paramètres que vous passez à la fonction add ? Par exemple, à votre avis, quelles valeurs peut prendre le premier paramètre avec ce que vous avez codé ?

    Pour moi, la capture que vous nous donnez de chez votre collègue, le code utilisé pour créer le bouton ne correspond pas à celui de votre message du 17/10 17h38, il nous faudrait le code que vous avez utilisé.
    Je ne teste quasi jamais le code que je propose. il s'agit juste d'indication sur comment je m'y prendrais, comment faire, des lignes d'intention.
    Il y a donc souvent des erreurs, le déboggage existe pour cela.

  11. #11
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Citation Envoyé par Gfacro Voir le message
    est ce que vous comprenez les paramètres que vous passez à la fonction add ? Par exemple, à votre avis, quelles valeurs peut prendre le premier paramètre avec ce que vous avez codé ?
    Bonjour Gfacro,


    Pour le premier parametre, ca doit etre la position de la cellule en question additionner de quelques chose afin d'éviter que le bouton soit directement a cheval sur la cellule.

    Dans ce que j'ai paramêtré effectivement, ca aucun sens !!! C'Est comme si j'additionne 0

    Bien vu Gfacro.


    Pour l'imprime écran, c'Est ce que j'ai reçu de sa par (post de Hier, 09h42). Je vais donc le voir directement avec un controle a distance !!!

  12. #12
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Il y a t'il un parametre équiivalent au bas du range (inverse de .top) Si oui, je crois que mon probleme est réglés ..
    Images attachées Images attachées  

  13. #13
    Membre habitué
    Homme Profil pro
    Développeur VBA
    Inscrit en
    Avril 2017
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur VBA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 122
    Points : 194
    Points
    194
    Par défaut
    Les paramètres sont en points depuis le bord gauche, en points depuis le haut, largeur en points et hauteur en points.

    Bien vu pour le 0, c est exactement ce sur quoi je voulais attirer votre attention, pour moi, vous le faites deux fois. Lorsque vous faites (c.height - hauteur)/2, c est le même souci, vous n' avez plus idee de la dimension que vous donnez à votre bouton.

    D après votre dernière capture, c est votre second paramètre qu il faut augmenter un peu (éloigner le bouton du bord haut) afin qu il ne couvre plus le texte.

    En tout cas, il faudrait voir ce que vous avez mis maintenant comme valeur pour votre add.
    Sinon, pour la capture écran de votre collègue, je disais que je ne pense pas que l écran avait été généré par le code que nous connaissions (ce code du message du 17/10 17h). -> besoin d avoir votre code maj pour comprendre pourquoi il ne fonctionne pas chez votre collègue.
    Je ne teste quasi jamais le code que je propose. il s'agit juste d'indication sur comment je m'y prendrais, comment faire, des lignes d'intention.
    Il y a donc souvent des erreurs, le déboggage existe pour cela.

  14. #14
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Citation Envoyé par jpvba Voir le message
    Il y a t'il un parametre équiivalent au bas du range (inverse de .top) Si oui, je crois que mon probleme est réglés ..
    L'inverse de .top est c.Top + c.Height

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.Top + c.Height - hauteurDuBouton
    Cordialement

    Docmarti.

  15. #15
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Un gros merci Docmarti, cela a réglé mon problème !!!



+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/10/2015, 11h55
  2. [XL-2007] Création d'un bouton (contrôle de formulaire
    Par Gabich21 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/02/2015, 14h12
  3. [XL-2007] Création d'un bouton (contrôle de formulaire
    Par Gabich21 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/02/2015, 10h57
  4. [XL-2010] VBA : Bouton contrôle de formulaire avec insertion forme et suppression ancienne
    Par anonymous9 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 05/03/2014, 20h24
  5. [XL-2010] Affichage boutons contrôle de formulaire quand lignes sont groupées
    Par bibenki dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/11/2012, 10h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo