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 :

Fonction Left, Right


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Par défaut Fonction Left, Right
    Bonsoir,

    Je n'arrive pas à trouver la solution dans ma situation pour supprimer les trois derniers caractères de toutes les cellules de ma colonne allant de Range("A3:A500")

    J'ai réussi dans un de mes programmes à utiliser cette fonction mais en passant par des selects. Ce coup-ci je souhaite l'appliquer a toute ma plage d'un coup.

    Code de la dernière fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Right(ActiveCell, Len(ActiveCell) - InStr(ActiveCell, "") - 3)
    Merci d'avance

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Pas testé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sub MoinsLong
         dim longueur as integer
         dim  as String
         for each cellule in range("a3:a500")
            UnTexte = cellule.text
            longueur = len(UnTexte)-3
            ÀGauche = Left(UnTexte,longueur)
            cellule.value = ÀGauche
         next
    end sub

  3. #3
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Par défaut
    J'ai essayé plus au moins votre programme en remplaçant le texte par la valeur de la cellule active mais cela ne fonctionne pas. Lorsque j'essaye avec vos instructions j'obtiens la même erreur qui est "Argument ou appel de procédure incorrect.
    Sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ÀGauche = Left(UnTexte, longueur)
    Mon essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each Cellule In Range("A3:A500")
       longueur = Len(ActiveCell.Value) - 3
       Agauche = Left(ActiveCell.Value, longueur)
       ActiveCell.Value = Agauche
    Next
    Merci

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai essayé plus au moins votre programme
    C'est le "plus ou moins" qui pose problème.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Par défaut
    J'ai réalisé les deux essais avec le code fournie à l'identique et un code modifié qui répondait à mon besoin mais j'obtiens la même erreur sur les deux qui est : "Argument ou appel de procédure incorrect." Pour vous Philippe le programme fonctionne ?

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour vous Philippe le programme fonctionne ?
    Je n'ai pas testé le programme de Clément mais il est évident que votre programme ne peut pas fonctionner avec une boucle For Each qui parcourt toutes les cellules de la plage A3:A500 alors que la modification se fait sur la cellule active.
    Voici un programme qui enlève les trois caractères de droite des cellules de la plage A2:A500.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub T()
      Dim Cel as Range
      For Each Cel in Range("A2:A500")
       With Cel
         If Len(.Value) > 3 Then .Value = Left(.Value, Len(.Value) - 3)
       End With
      next
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Par défaut
    Merci beaucoup cela fonctionne.

    Pour appliquer cette fonction à toute mes feuilles sauf une comment puis-je m'y prendre ?

  8. #8
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 676
    Par défaut
    Bonjour,

    Tu peux essayer ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dim sh as sheet
    for each sh in thisworkbook.sheets
    'ici la condition sauf une sheet, par exemple
    if not(sh.name = "lenomdelafeuillequetuveuxpas") then
    'ton code avec sh. devant le range
    end if
    next sh

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour appliquer cette fonction à toute mes feuilles sauf une comment puis-je m'y prendre ?
    La boucle qui parcourt les feuilles d'un classeur (ici le classeur où se trouve le code VBA)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For Each sht In ThisWorkbook.Worksheets
    Next
    La structure conditionnelle IF permet de ne procéder à la découpe du contenu des cellules que si le nom de la feuille est différente de MENU.
    J'utilise la fonction LCase pour ne pas avoir de problème de casse et la fonction Trim pour éviter les problèmes de caractères espacés

    Code complet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub T()
      Dim Cel As Range, sht As Worksheet
      For Each sht In ThisWorkbook.Worksheets
        With sht
         If Trim(LCase(sht.Name)) <> "menu" Then
          For Each Cel In .Range("A2:A500")
             With Cel
               If Len(.Value) > 3 Then .Value = Left(.Value, Len(.Value) - 3)
             End With
            Next Cel
          End If
        End With
      Next sht
    End Sub
    S'il y a plusieurs feuilles à vérifier, je te conseille l'utilisation de la structure conditionnelle Select Case
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Par défaut
    Re,

    La boucle fonctionne, mais la condition sur le titre de la feuille non. Pourtant j'utilise la procédure Wb.name dans ma feuille qui me permet de définir le titre en haut de page ce qui me permet de vérifier le contenue de Wb.name. Ici il s'agit bien de "Accueil"avec ou sans LCase et Trim cela ne fonctionne pas.

    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
    For Each Wb In ThisWorkbook.Worksheets
     
            With Wb
     
            If Wb.Name <> "Accueil" Then
                Wb.Range("B1:B500").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
                Wb.Range("A1").EntireRow.Insert
                Wb.Range("A1").EntireRow.Insert
                Wb.Range("H1").Value = Wb.Name
                Wb.Cells(1, 8).Font.Bold = True
                Wb.Cells(1, 8).HorizontalAlignment = xlCenter
                Wb.Range("A3:I3").Font.Bold = True
                Wb.Range("A3:I3").HorizontalAlignment = xlCenter
             End If
             End With
         Next Wb

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    tout d'abords j'utiliserais une variable moins trompeuse en effet le plus souvent Wb représente le workbook

    ensuite le lcase sur le name devrait résoudre ton soucis ,si ce n'est pas le cas alors il n'y a pas de sheets "Acceuil" ou "acceuil"

    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
    dim sh as worksheet
    For Each sh In ThisWorkbook.Worksheets
     
            With sh 
     
            If lcase(sh.Name) <> "accueil" Then
                sh.Range("B1:B500").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
                sh.Range("A1").EntireRow.Insert
                sh.Range("A1").EntireRow.Insert
                sh.Range("H1").Value = Wb.Name
                sh.Cells(1, 8).Font.Bold = True
                sh.Cells(1, 8).HorizontalAlignment = xlCenter
                sh.Range("A3:I3").Font.Bold = True
                sh.Range("A3:I3").HorizontalAlignment = xlCenter
             End If
             End With
         Next sh
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #12
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Par défaut
    Le problème est résolu il s'agissait bien d'un problème de majuscules !

    La méthode Select case est pratique si on a plus de 2/3 feuilles différentes or là j'aimerai juste le faire pour deux feuilles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Ws.Name <> "Accueil" And "Annexes" Then
    Mais j'ai une incompatibilité de types.

  13. #13
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le problème est résolu il s'agissait bien d'un problème de majuscules !
    C'est pourtant ce que j'ai expliqué dans une partie de ma dernière réponse.
    J'utilise la fonction LCase pour ne pas avoir de problème de casse et la fonction Trim pour éviter les problèmes de caractères espacés
    Trim et LCase sont des fonctions très utiles à utiliser lorsque l'on teste des chaînes de caractères
    La méthode Select case est pratique si on a plus de 2/3 feuilles différentes or là j'aimerai juste le faire pour deux feuilles :
    Aussi signalé dans ma dernière réponse
    S'il y a plusieurs feuilles à vérifier, je te conseille l'utilisation de la structure conditionnelle Select Case
    Exemple
    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
    Sub T()
      Dim Cel As Range, sht As Worksheet
      For Each sht In ThisWorkbook.Worksheets
        With sht
         Select Case Trim(LCase(.Name))
          Case "menu", "param"
             ' On ne fait rien
          Case Else
            For Each Cel In .Range("A2:A500")
             With Cel
               If Len(.Value) > 3 Then .Value = Left(.Value, Len(.Value) - 3)
             End With
            Next Cel
          End Select
        End With
      Next sht
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  14. #14
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Par défaut
    Bonsoir,

    C'était une erreur de ma part et non une erreur liée au LCase au Trim. Oui tout avait été dit mais n'est il pas possible de passer par un If + un Or ou AND ?

    C'était de la simple curiosité

    Merci beaucoup en tout cas tous mes problèmes ont été réglé.

  15. #15
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    C'était une erreur de ma part et non une erreur liée au LCase au Trim
    Mais c'est exactement ce que j'ai indiqué et je reprécise "Pour éviter les problèmes de casse, j'utilise LCase".

    mais n'est il pas possible de passer par un If + un Or ou AND ?
    Bien évidemment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If LCase(.Name) <> "menu" And LCase(.Name) <> "param" Then
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  16. #16
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 18
    Par défaut
    Pourquoi macroter ce qui existe deja en fonction dans Excel ?????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =GAUCHE(C10;NBCAR(C10)-3)

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

Discussions similaires

  1. Bibliothèque manquante pour fonctions Left, right, mid
    Par wrm8787 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/04/2009, 20h21
  2. Fonctions Left / Right
    Par Lolosan dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/01/2009, 03h21
  3. Probleme avec fonction Left et Right
    Par aliboubou dans le forum Access
    Réponses: 1
    Dernier message: 11/01/2007, 14h02
  4. Réponses: 4
    Dernier message: 10/12/2006, 18h33
  5. Fonction Left join, Right Join
    Par chandlerbing77 dans le forum Access
    Réponses: 2
    Dernier message: 22/06/2006, 16h36

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