Problème largeur colonne malgré macro Columnwidht

billpancho

XLDnaute Nouveau
Bonjour,

Je cherche à créer des formes ayant des dimensions issues de textbox et donc de boites de dialogue
Jusqu'ici tout va bien

Le truc est que je souhaite placer mes formes sur mes feuilles mais que toutes les dimensions (formes largeur hauteur et cellule colonne et hauteur) soient comparables, proportionnelles...

J'ai donc utilisé application.centimetersto... pour créer mes formes

et pour obtenir une largeur de colonne en centimetre, j'ai utilisé le code:


Code:
Application.ScreenUpdating = False
 
  Dim cm As Integer, points As Integer, savewidth As Integer
  Dim count As Integer
  
 
 cm = CInt(TextBox11) / 10
 
Sheets("Plan").Select
Range("C1").Select
  
  If cm = False Then Exit Sub
  points = Application.CentimetersToPoints(cm)
  savewidth = ActiveCell.ColumnWidth
  ActiveCell.ColumnWidth = 255
    If points > ActiveCell.Width Then
      MsgBox "la largeur de" & cm & "est trop large" & Chr(10) & _
      "la valeur maxi est de " & _
      Format(ActiveCell.Width / 28.3464566929134, _
      "0.00"), vbOKOnly + vbExclamation, "largeur non valable"
      ActiveCell.ColumnWidth = savewidth
      Exit Sub
    End If
  lowerwidth = 0
  upwidth = 255
  ActiveCell.ColumnWidth = 127.5
  curwidth = ActiveCell.ColumnWidth
  count = 0
  While (ActiveCell.Width <> points) And (count < 20)
    If ActiveCell.Width < points Then
      lowerwidth = curwidth
      Selection.ColumnWidth = (curwidth + upwidth) / 2
    Else
      upwidth = curwidth
      Selection.ColumnWidth = (curwidth + lowerwidth) / 2
    End If
  curwidth = ActiveCell.ColumnWidth
  count = count + 1
  Wend



Pour tester tout cela, j'ai voulu dire que la largeur de ma colonne était de 10
puis j'ai créer une forme qui était large de 10
le probleme est que ma forme est un peu plus grande que ma colonne
en terme de hauteur en revanche tout est parfait !

Ma question :

La largeur correcte est elle celle de la forme ou celle de la colonne ?
Comment faire pour que mes deux données soient identiques à l'écran ?
 

billpancho

XLDnaute Nouveau
Re : Problème largeur colonne malgré macro Columnwidht

Bonjour,

J'ai essayé cela me dit : Erreur d'exécution 424 : objet requis

De toute façon je pense que je me suis mal exprimé car la solution ne me parait pas être celle ci

J'ai une macro qui me créer des formes avec comme unité de mesure des centimetres
Je souhaite faire evoluer mon quadrillage excel avec des lignes et des colonnes pour lesquelles l'utiisateur peut definir des distances en cm

Le but est que les formes qu'il créé en cm puisse être placées au sein de son quadrillage en cm et donc que le tout fasse un plan.

J'ai bien compris dans les forum que la largeur des colonnes sous excel s'exprime en taille de caractere et la methode la plus aboutie que j'ai trouvé est celle ci de mon premier post

Ensuite pour les lignes c'est assez simple et pour la création des formes aussi car l'appli cm fonctionne bien.
Sauf que quand je fait le tout ma forme de 10cm*10cm ne rentre pas dans ma cellule qui est censée etre de 10cm*10cm, en hauteur ca va mais en largeur elle est différente d'au moins 1/2 cm sur les distances sur lesquelles je travaille et c'est beaucoup !

Je me demande donc où se situe mon probleme sachant qu'il me semble ne pouvoir venir que de ce fameux codes pour transposer la largeur en cm, me serais-je tromper quelquepart en le recopiant ?

PS : meme si je suis sur 2007, je souhaite un code qui marche aussi pour 2000 (d'où mon souci avec les cm...)

Merci de m'aider car je rame !!!
 

billpancho

XLDnaute Nouveau
Re : Problème largeur colonne malgré macro Columnwidht

Je ne peux pas te donner le fichier entier car ma question ne concerne qu'un détail du fichier et tu seras encore plus noyé après (d'autant plus que j'ai des données confidentielles à l'intérieur (boulot))

Le code que j'utilise pour créer mes formes est celui ci

Code:
Private Sub CommandButton2_Click()

Dim Hauteur As Variant
Dim LArgeur As Variant
Dim Couleur As Variant

Couleur = (TextBox10)

CoordX = 1
CoordY = 1
Hauteur = Application.CentimetersToPoints(TextBox3) / 10
LArgeur = Application.CentimetersToPoints(TextBox2) / 10

Application.ScreenUpdating = True

Sheets("Plan").Select
Range("A1").Select



 

    With ActiveSheet.Shapes.AddShape(msoShapeRectangle, 30, 30, LArgeur, Hauteur).Select
    
        Selection.Text = UserForm2.TextBox8.Text & Chr(10) & Val(TextBox9)
        Selection.Font.ColorIndex = Automatic
        Selection.Font.Name = "Arial"
        Selection.Font.FontStyle = "Normal"
        Selection.Font.Size = 6
        Selection.ShapeRange.Fill.ForeColor.SchemeColor = Couleur
        
        
        Selection.ShapeRange.Line.Visible = False
              
                 
            
              
    End With



End Sub

Je pense que ce code est correct non ???



Ensuite je veux placer ces formes sur ma feuille excel et t'imagines que je souhaite que l'utilisateur rentre les dimensions d'un cadre qui serait reprenté par la cellule C3 afin d'y placer les formes ensuite

Donc pour lui demander les dimensions de son "cadre" (la cellule A3) je pose ce code : je vous mets ici la partie du code qui va régler la largeur de ma colonne C sachant que pour la hauteur de la ligne 3 mon autre code marche parfaitement



Code:
Application.ScreenUpdating = False
 

  Dim cm As Integer, points As Integer, savewidth As Integer
  Dim count As Integer
  
 
 cm = CInt(TextBox11) / 10
 
Sheets("Plan").Select
Range("C1").Select
  
  If cm = False Then Exit Sub
  points = Application.CentimetersToPoints(cm)
  savewidth = ActiveCell.ColumnWidth
  ActiveCell.ColumnWidth = 255
    If points > ActiveCell.Width Then
      MsgBox "la largeur de" & cm & "est trop large" & Chr(10) & _
      "la valeur maxi est de " & _
      Format(ActiveCell.Width / 28.3464566929134, _
      "0.00"), vbOKOnly + vbExclamation, "largeur non valable"
      ActiveCell.ColumnWidth = savewidth
      Exit Sub
    End If
  lowerwidth = 0
  upwidth = 255
  ActiveCell.ColumnWidth = 127.5
  curwidth = ActiveCell.ColumnWidth
  count = 0
  While (ActiveCell.Width <> points) And (count < 20)
    If ActiveCell.Width < points Then
      lowerwidth = curwidth
      Selection.ColumnWidth = (curwidth + upwidth) / 2
    Else
      upwidth = curwidth
      Selection.ColumnWidth = (curwidth + lowerwidth) / 2
    End If
  curwidth = ActiveCell.ColumnWidth
  count = count + 1
  Wend



Voila, il n'y a que ca à regarder je pense ...

Pourquoi donc dès que je fais une forme de 10cm de large elle ne correspond pas à ma cellule C3 à laquelle j'ai donné l'instruction de mesurer 10cm de large ???
 

Discussions similaires