Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

hemardjean

XLDnaute Occasionnel
Bonjour le forum

Petite question : Dans une MsgBox le nombre de codes est-il limité car dans mon cas il faudrait alimenter celle-ci avec 15 lignes de codes mais la MsgBox n’affiche pas les 3 dernières peut-on remédier à ce problème.

Je joins le dossier

Merci encore de votre aide

@+ Cordialement
 

Pièces jointes

Re : MsgBox trop courte

Bonsour®
un MsgBox n'affiche au maximum que 1024 caractères (y compris les caractères de controle : VbTab et VbCr)

en n'utilisant que les infos des colonnes B, I, J et R ansi que les séparateurs de champs on arrive à un total de 1038 caractère au minimum ...

VB:
Sub frequence()
Dim ligne As Integer, msg As String
With Feuil43
msg = ""
For ligne = 6 To 20
        msg = msg & .Cells(ligne, 2) & vbTab & .Cells(ligne, 9) & vbTab & .Cells(ligne, 10) & vbTab & .Cells(ligne, 18) & vbCr
Next
End With
MsgBox Trim(msg), vbInformation, Len(Trim(msg))
End Sub


solutions :
  • abréger les libellés
  • creer un textbox ou un userform à la volée ..
 
Dernière édition:
Re : MsgBox trop courte

Bonjour,

Une solution consisterait à passer par une variable msg, non pas de type String, mais de type tableau. Cette variable serait alimentée, pour chacun de ces indices, d'un maximum de 1024 caractères.
Cette méthode a l'inconvénient de ne pas donner le résultat dans une seule MsgBox, mais dans plusieurs à la suite.
A voir.

Code à adapter :
Code:
Sub frequence()
Dim ligne As Integer, msg(), i&, j&, nbcarac&

With Feuil43
    For ligne = 6 To 20
        nbcarac = nbcarac + Len(.Cells(ligne, 2) & vbTab & .Cells(ligne, 9) & vbTab & .Cells(ligne, 10) & vbTab & .Cells(ligne, 18) & vbCr)
        If nbcarac >= 1024 Then
            nbcarac = 0
            j = j + 1
        End If
        ReDim Preserve msg(j)
        msg(j) = msg(j) & .Cells(ligne, 2) & vbTab & .Cells(ligne, 9) & vbTab & .Cells(ligne, 10) & vbTab & .Cells(ligne, 18) & vbCr
    Next
End With
For i = LBound(msg) To UBound(msg)
    MsgBox msg(i)
Next
End Sub
 
Re : MsgBox trop courte

Bonjour le forum ,Modeste geedee,pijaku

Merci pour vos réponses, j’ai suivi le premier conseil de Modeste en supprimant des espaces le tableau s’affiche complètement mais n’est plus très lisible principalement pour les chiffres.

Dans vos solutions et surtout le complément de pijaku j’ai réduit le nombre de caractères à 100 pour essayer de n’avoir qu’un seul tableau a la fois ,il manque aussi « recommandée et constatée » entre les deux chiffres et je ne trouve pas ou changer le nom de MsgBox pour que le titre soit « comparaison des fréquences ».

Modeste tu préconises une textbox ou un userform cette idée serait peut être plus facile a mettre en place peux tu m’en dire plus ?

Merci a tous les deux

@+ Cordialement
 
Re : MsgBox trop courte

Bonsoir hemardjean, Modeste geedee, pijaku,

Voici une solution avec ListBox qui détourne la limitation du nombre de caractères. Cette liste est incorporée dans un UserForm comme proposé par Modeste. Ce formulaire ne pet être fermé qu'au moyen du bouton OK (j'ai désactivé la croix de fermeture pour rester dans l'analogie avec un MsgBox)

La largeur des colonnes peut-être adaptée par le code.

Espérant avoir contribué.

Cordialement.
 

Pièces jointes

Re : MsgBox trop courte

Bonsour®
Bonjour le forum
../..
Modeste tu préconises une textbox ou un userform cette idée serait peut être plus facile a mettre en place peux tu m’en dire plus ?
../..

😎 pour le fun alors... (la proposition de papou-net est plus flexible)

VB:
Sub frequence()
Dim ligne As Integer, msg As String
On Error Resume Next
 With Feuil43
.Shapes("WXYZ").Delete ' -------on s'assure qu'il n'y a plus de shape portant ce nom
'------------------ rédaction message
 msg = "Comparaison des fréquences " & String(55, " ") & " Recommandée et constatée " & vbCr & vbCr
 For ligne = 6 To 20
         msg = msg & Left(.Cells(ligne, 2) & String(90, " "), 90) & .Cells(ligne, 9) & vbTab & .Cells(ligne, 10) & vbTab & .Cells(ligne, 18) & vbCr
 Next
 End With
 ' -----------------ajout de de l'objet
With ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, 200, 200, 100, 200)
.Name = "WXYZ"
.TextFrame.Characters.Text = msg
.TextFrame.Characters.Font.Name = "courier new"
.TextFrame.HorizontalAlignment = xlHAlignLeft
.TextFrame.AutoSize = True
End With
End Sub

pour fermer l'objet, un clic exterieur suffit en ajoutant le code ci-dessous dans le module de la feuille concernée :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
ActiveSheet.Shapes("WXYZ").Delete 
End Sub
 
Re : MsgBox trop courte

Bonjour Papou-net,Modeste geedee,pijaku

Merci avec une listbox le tableau est beaucoup plus parlant.

Mais comment écarter le « nombre A » de « recommandée » et ajouter « constatée » après « nombreB » car j’ai essayé plusieurs solutions mais ça ne marche pas.

Est-il possible de souligner et écrire en gras certains éléments du tableau ?

@+ Cordialement
 
Re : MsgBox trop courte

Bonjour hemardjean, le Forum,

Une solution pour écarter "nombre A" est de créer des colonnes supplémentaires : ce que j'ai fait sur la copie ci-jointe.

J'ai modifié les quatre premières lignes, je te laisse le soin de faire les suivantes selon le même principe.

N'ayant que la version 2003 sur ce poste, la macro du Bouton2 ne fonctionne pas : il te suffira donc de recopier le code dans ton fichier xlsm pour la mise-à-jour.

En te souhaitant bon courage.

Cordialement.
 

Pièces jointes

Re : MsgBox trop courte

Bonsour®
../..
avec une listbox le tableau est beaucoup plus parlant.

Mais comment écarter le « nombre A » de « recommandée » et ajouter « constatée » après « nombreB » car j’ai essayé plusieurs solutions mais ça ne marche pas.
../..

😎 une adaptations des diverses propositions précédentes(papounet...)

Nb: 😕
pourquoi re-générer via VBa les infos à afficher ?
l'affichage du tableau ne se suffit-il pas tel quel ??
 

Pièces jointes

Re : MsgBox trop courte

RE hemardjean,

Bonjour Modeste geedee,

Ci joint une autre version avec le code optimisé.

Le premier bouton correspond aux libellés initiaux mais les conditions If...Then ont été remplacées par Iif : code plus court.

Le deuxième bouton utilise une boucle qui affiche par contre les libellés complets de la colonne B. Mais cette solution permet une extension de la liste sans nécessiter une remise à niveau du code.

Espérant avoir été utile.

Cordialement.

PS : les deux formulaires étant en affichage non modal, tu peux les ouvrir en même temps pour mieux les comparer.
 

Pièces jointes

Dernière édition:
Re : MsgBox trop courte

Bonjour Papou-net,Modeste geedee,pijaku

Merci pour ces deux UserForm .

Je vais utiliser le premier car il n’y aura pas d’extension des libellés ils nous sont dictés par une loi dans le cadre d’un plan alimentaire.

Il ne me reste qu’à l’intégrer à ce fameux plan .Je vous remercie pour l’attention que vous avez bien voulu porter a mon cas.

Cordialement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
511
Retour