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 :

Changement de ligne automatique [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Par défaut Changement de ligne automatique
    Bonsoir à tous. Je demande votre aide avec le problème suivant SVP.
    Je voudrais une macro ou quelque chose du même genre qui ferait
    que lorsque un usager inscrit des données dans une cellule et que les
    données sont trop nombreuses pour la largeur de cellule, que excel change de ligne (cellule) automatiquement.

    Exemple: Si l'usager inscrit plus de 40 caractères dans la cellule
    E62, que le reste du texte soit inscrit dans la cellule E63 et ainsi de suite.

    Donc que grosso modo dès que 40 caractères sont inscrits dans la cellule
    E62, les caractères 41 à 80 soient inscrits dans la cellule E63, les caractères
    81 à 120 soient inscrits dans la cellule E64 etc.

    Merci pour votre aide très appréciée

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    salut

    la chose ne pouvant être faite durant la saisie dans une cellule, il te faudra envisager un découpage au moment où tu la quittes (évènement selection_change).
    Pour découper la chaine saisie : utilisation simple de la fonction Mid (aide ou F1).

    J'appelle toutefois ton attention sur le fait qu'un tel mécanisme (celui que tu dis vouloir mettre en place) aura pour effet de rendre complexe la gestion des lignes du tableur !
    Il est plutôt reecommandé, dans un tel cas, de formater ta cellule (opération simple) pour un renvoi automatique à la ligne, au sein même de la cellule (donc sans "toucher" aux lignes du tableur lui-même)

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Bonjour,

    Voici ma solution
    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
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
        Dim Text As String
        L_Max = 5          ' Longueur maximum
        CC_Lig = Target.Row
        CC_Col = Target.Column
     
     ' Controle de la longueur de la frappe précédente
        If CP_Lig + CP_Col <> 0 Then
            Text = Cells(CP_Lig, CP_Col)
            If Len(Text) > L_Max Then
                    D_L = 0
                Do
                    Cells(CP_Lig + D_L, CP_Col) = Left(Text, L_Max)
                    Text = Right(Text, Len(Text) - L_Max)
                    D_L = D_L + 1
                    If Len(Text) <= L_Max Then
                        Cells(CP_Lig + D_L, CP_Col) = Text
                        Exit Do
                    End If
                Loop
            End If
        End If
        CP_Lig = CC_Lig
        CP_Col = CC_Col
    End Sub
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public CP_Lig As Integer
    Public CP_Col As Integer

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    salut PPz78

    Mis à part les inconvénients dénoncés par mon premier message, ce que tu proposes de mettre en place ignore totalement les règles de passage à la ligne : après un mot, un signe de ponctuation, ou en coupant le mot là où il convient de le couper (entre une double consonne ou à la fin d'une syllabe ... et en ajoutant alors un tiret)...
    Le résultat sera donc très loin d'être fameux

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Citation Envoyé par babaothe Voir le message
    salut PPz78
    ce que tu proposes de mettre en place ignore totalement les règles de passage à la ligne : après un mot, un signe de ponctuation, ou en coupant le mot là où il convient de le couper (entre une double consonne ou à la fin d'une syllabe ... et en ajoutant alors un tiret)...
    Ce sont de bonnes remarques, mais cela ne fait pas partie de la spécification initiale.

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Par défaut
    Merci pour vos réponses rapides. J'ai hâte de les tester. Petite question,
    PPz78 pour ma longueur de ligne, si je veux mettre 40 caractères, je
    présume que je dois remplacer le 5 par 40 dans
    Dim Text As String
    L_Max = 5
    Pour ce qui est des cellules, je voudrais que ce code s'applique uniquement dans les cellules E62 à E119. Où est-ce que je dois entrer ces précisions?

    Pour l'aspect du respect des règles de passage à la ligne, effectivement cela importe peu car les usagers qui entrent les données font malheureusement plusieurs fautes dans l'écriture des mots ainsi que lors des changements de ligne.

    Merci de vos réponses et continuez votre bon travail c'est extrêmement apprécié. CL

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Par défaut
    Désolé de vous importuner à nouveau mais il semble qu'il y'ait encore une erreur.
    Voici le code mis à jour:
    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
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
        Dim Text As String
        Public CP_Lig As Integer
        Public CP_Col As Integer
        L_Max = 40          ' Longueur maximum
        CC_Lig = Target.Row
        CC_Col = Target.Column
     
     ' Controle de la longueur de la frappe précédente
        If CP_Lig + CP_Col <> 0 Then
        If CP_Col = 5 Then               ' limitation à la colonne E : 5
        If CP_Lig > 61 And CP_Lig < 119 Then  ' limitation aux lignes 62 à 119
            Text = Cells(CP_Lig, CP_Col)
            If Len(Text) > L_Max Then
                    D_L = 0
                Do
                    Cells(CP_Lig + D_L, CP_Col) = Left(Text, L_Max)
                    Text = Right(Text, Len(Text) - L_Max)
                    D_L = D_L + 1
                    If Len(Text) <= L_Max Then
                        Cells(CP_Lig + D_L, CP_Col) = Text
                        Exit Do
                    End If
                Loop
            End If
        End If
        End If
        End If
     
    End Sub
    maintenant il bloque sur et me donne une erreur 424 objet requis.

    Merci encore de vos efforts.

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour,

    Où as-tu mis ce code?
    Il doit être dans le module de ThisWorkbook.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Bonjour,

    Excuse moi, mais je pensais que ton niveau VB était meilleur.

    Je récapitule :
    1- dans un module de VB il faut mettre ces deux instructions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       Public CP_Lig As Integer
       Public CP_Col As Integer
    2- dans le module ThisWorkbook il faut mettre ce code (ce n'est pas le dernier que tu as proposé) :
    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
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
       Dim Text As String
       L_Max = 40          ' Longueur maximum
       CC_Lig = Target.Row
       CC_Col = Target.Column
     
    ' Controle de la longueur de la frappe précédente
       If CP_Lig + CP_Col <> 0 Then
       If CP_Col = 5 Then               ' limitation à la colonne E : 5
       If CP_Lig > 61 And CP_Lig < 119 Then  ' limitation aux lignes 62 à 119
           Text = Cells(CP_Lig, CP_Col)
           If Len(Text) > L_Max Then
                   D_L = 0
               Do
                   Cells(CP_Lig + D_L, CP_Col) = Left(Text, L_Max)
                   Text = Right(Text, Len(Text) - L_Max)
                   D_L = D_L + 1
                   If Len(Text) <= L_Max Then
                       Cells(CP_Lig + D_L, CP_Col) = Text
                       Exit Do
                   End If
               Loop
           End If
       End If
       End If
       End If
       CP_Lig = CC_Lig
       CP_Col = CC_Col
     
    End Sub
    En espérant que cela marche cette fois.
    PPz

  10. #10
    Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Par défaut
    Merci beaucoup maintenant ça fonctionne parfaitement.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 02/06/2011, 22h03
  2. cin>> et le changement de ligne automatique.
    Par djo0012 dans le forum SL & STL
    Réponses: 7
    Dernier message: 25/11/2005, 16h36
  3. nombres d'images sur une lign automatique
    Par AnKhCHFR dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 10/03/2005, 11h52
  4. [JOptionPane]retour à la ligne automatique ?
    Par Pill_S dans le forum Composants
    Réponses: 5
    Dernier message: 01/12/2004, 11h55
  5. [JTextPane] passage a ligne automatique.
    Par bibi-kha dans le forum Composants
    Réponses: 9
    Dernier message: 02/09/2004, 11h10

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