Problème boite de dialogue message 400
Bonjour à tous,
Je suis novice en vba et j'essaye d'apprendre petit à petit. J'essaye de m'acharner jusqu'à ce que je trouve la solution mais là je n'arrive pas à résoudre ce problème.
But : faire des étiquettes propres pour les classeurs.
Contexte : j'essaye de faire une macro pour ajuster automatiquement la hauteur et largeur d'une cellule sur Excel selon ce que l'on souhaite (n'importe qui pourra l'utiliser et pas seulement moi).
Pour cela j'ai utilisé des boites de dialogues avec des formules pour convertir les pouces / points sur Excel en cm.
Cela marche très bien tant qu'on ne dépasse pas un certain seuil. Par exemple, pour la ligne rows, lorsque je veux 13cm c'est bon, au delà de 14 cm, cela dépasse 400 pouces / points et du coup j'ai le droit au message d'erreur "Microsoft Virtual Basic pour Applications : 400". Et j'aimerais pouvoir passé au delà mais je ne sais pas comment.
Voici mon code :
Sub dimension()
Dim resultat As Single
resultat = InputBox("Largeur en cm", "Dimension") 'La variable reçoit la valeur entrée dans l'InputBox
Columns(ActiveCell.Column).ColumnWidth = resultat * ((25.29 / 50) * 10)
MsgBox resultat
resultat = InputBox("Hauteur en cm", "Dimension") 'La variable reçoit la valeur entrée dans l'InputBox
Rows(ActiveCell.Row).RowHeight = resultat * ((42.5 / 15) * 10)
MsgBox resultat
End SubJe vous remercie par avance pour votre aide et vous souhaite une bonne journéee
Luvi
Ça c'est fait.
Je te remercie.
Bonjour,
La hauteur de ligne se mesure et se définit en points.
La hauteur maximale d'une ligne est de 409 points.
Ce qui correspond à 14,42861 cm (conversion utilisant la méthode CentimetersToPoints de l'objet Application).
J'avais fait autrefois une procédure pour définir la hauteur de ligne en millimètres : on inscrivait la hauteur voulue en millimètres dans une cellule sélectionnée et on lançait la macro qui ajustait la hauteur à la dimension demandée (ou affichait #N/A si la dimension voulue était hors limites).
Sub HLigneMm()
Dim h!
With ActiveCell
h = Application.CentimetersToPoints(.Value / 10)
If h > 409 Or h < 0 Then
.Value = CVErr(xlErrNA)
Exit Sub
End If
.RowHeight = h
End With
End SubPour les hauteurs de lignes, c'est donc assez simple... mais pour les largeurs de colonnes, ça se corse !
La largeur de colonne se mesure en points, mais se définit en un unité correspondant à la largeur d'un caractère standard moyen...
La largeur maximale d'une colonne est de 255 dans cette unité de définition.
Ce qui correspond à 1342,5 points.
Cela se complique encore un peu car si la largeur 1 (caractère) correspond à 9 points, l'adjonction d'une unité (caractère) à partir de 1 ajoute 5,25 points... Il faut donc jongler un peu plus pour faire un ajustement défini en millimètres.
Procédure équivalente à celle ci-dessus mais pour définir la largeur de colonne (en mm) :
Sub LColMm()
Dim w!, c!
With ActiveCell
w = Application.CentimetersToPoints(.Value / 10)
If w > 1342.5 Or w < 0 Then
.Value = CVErr(xlErrNA)
Exit Sub
End If
If w > 9 Then
c = (w - 9) / 5.25 + 1
Else
c = w / 9
End If
.ColumnWidth = c
End With
End SubIl faut aussi savoir qu'un ajustement exact est exclu, car la définition tant des hauteurs de lignes que des largeurs de colonnes ne s'opère pas sur une échelle continue, mais discrète (définition par paliers : ce qu'on peut aisément vérifier en tapant des valeurs décimales quelconques pour définir hauteur ou largeur, en y retournant voir on constate le plus souvent que la mesure affichée n'est pas celle que l'on avait tapé...)
Mais mes tests de mesure des écarts font apparaître quelques centièmes de mm. L'écart restant inférieur au dixième de mm, cela me paraît une approximation très acceptable...
Cordialement.
Effectivement, ton post était très intéressant MFerrand, je te remercie beaucoup pour le temps que tu as pris pour me répondre.
Luvi