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 :

Soustraire des caractères par rapport à des nombres


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 31
    Par défaut Soustraire des caractères par rapport à des nombres
    Bonsoir à tous,

    Je fais appel à votre aide pour un problème que je rencontre :

    J'ai un classeur excel comportant 2 colonnes :
    -La colonne A est une colonne texte de 32 caractères
    -La colonne B un numéro allant de 1 à 32

    Ce que j'essaye de faire mais que je n'arrive pas, c'est d'avoir un nombre de caractères en colonne A égales au nombre indiqué en colonne B.

    Exemple :

    Cellue A1 : XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
    Cellule B1 : 28

    Resultat après macro :
    Cellule A1 : XXXXXXXX XXXXXXXX XXXXXXXX

    Puis pareil pour A2,A3,...



    J'ai trouvé des formules pour supprimer des caractères sur le tableur mais rien pour VBA

    Je vous remercie d'avance pour votre aide

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 587
    Par défaut
    Bonjour

    Principe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each cellule In Range("A1:Ax")
        With cellule
            .Value = Left(.Value, .Offset(0, 1).Value)
        End With
    Next

  3. #3
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonsoir à tous,
    Citation Envoyé par seblafrite Voir le message
    Exemple :

    Cellue A1 : XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
    Cellule B1 : 28

    Resultat après macro :
    Cellule A1 : XXXXXXXX XXXXXXXX XXXXXXXX
    Curieux le résultat car 3 paquets de 8 X pour moi, cela ne fait pas 28 caractères.

    Si en A1 tu veux avoir le nombre de X défini en B1 tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     [A1].Value = String([B1].Value, Left([A1].Value, 1))
    à toi d'implémenter en fonction de tes données.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 31
    Par défaut
    Bonjour,

    Merci à vous deux, ça marche parfaitement.

    Je l'ai juste réadapter pour qu'il aille plus vite sur le traitement de la colonne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub Test()
    For Each Cell In Range("M:M").Cells
    If Cell.Value <> "" Then
        With Cell
            .Value = Left(.Value, .Offset(0, 4).Value)
        End With
    End If
    Next
    End Sub
    Bonne journée à vous

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For Each Cell In Range("M:M").Cells
    If Cell.Value <> "" Then
    Je ne suis pas d'accord sur la déclaration de la plage à tester.

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    For Each Cell In Range("M:M").Cells
    Mieux vaut à mon avis définir la dernière cellule informée que de balayer une colonne entière.
    De plus, rattacher un objet Range à sa feuille Parent est une précaution utile pour éviter certaines erreurs.

    (à adapter)

    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
    Option Explicit
     
    Public Sub rp_chaine()
     
    Dim derlign As Long
     
    With Worksheets("lawks")
     
            derlign = .Cells(.Rows.Count, 1).End(xlUp).Row
            For Each c In .Range("A2:A" & derlign)
                    With c
                            .Value = Left(.Value, .Offset(0, 4).Value)
                    End With
            Next c
     
    End With
     
    End Sub

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 03/01/2011, 15h01
  2. Nombre de caractères par rapport à la taille de la Texbox
    Par PPN83 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/12/2010, 16h01
  3. [Turbo Pascal] Calculer le net à payer par rapport au nombre de copies
    Par agan2012 dans le forum Turbo Pascal
    Réponses: 6
    Dernier message: 21/11/2008, 20h54
  4. [Conception] Performances par rapport à un nombre élevé de requêtes INSERT
    Par phicarre dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 29/01/2008, 13h03
  5. Scinder une chaîne de caractère par rapport à un séparateur
    Par Tontorise dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/07/2007, 14h28

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