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 sous VBa EXCEL [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Mars 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 32
    Points : 23
    Points
    23
    Par défaut Fonction Left sous VBa EXCEL
    Bonjour à tous,

    J'importe de manière automatique tous les jours des tables textes vers EXCEl, renommer les feuilles et faire les mises en formes.

    Jusque ici tout va très bien, par contre pour l'exploitation du fichier EXCEL importé:

    Je cherche avec VBA l'insertion d'une nouvelle colonne entre la première et la deuxième colonne de ma table importée.
    Pour l'alimenter cette nouvelle colonne, je veux récupérer avec la fonction left les 7 premières caractères de la première colonne de ma table (sur toute la colonne).


    Svp: est-ce quelqu'un à une idée pour ce code?


    Merci par avance pour vos réponses.


    Cordialement

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    pour l'insertion d'une colonne : méthode Insert (voir l'aide à ce sujet)
    utilise l'enregistreur de macro pour avoir une base de code

    pour la récupération des 7 premiers caractères : tu as le bon outil (left), il suffit de lui passer en argument la cellule et la longueur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MaChaine = Left(Activecell.Value, 7)

    pour effectuer l'extraction des 7 premiers caractères sur toute la colonne, il sera plus rapide de passer par un tableau virtuel :

    1) récupérer la colonne voulue
    2) remplacement des valeurs
    3) restitution du tableau dans la colonne voulue

    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
    18
    19
    Sub Gauche()
    Dim Tablo
    Dim Plage As Range
     
    ' Colonne A
    Set Plage = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
     
    ' mise sous tableau
    Tablo = Plage
     
    ' récupération des 7 premiers caractères
    For i = LBound(Tablo, 1) To UBound(Tablo, 1)
        Tablo(i, 1) = Left(Tablo(i, 1), 7)
    Next i
     
    ' restitution des données en colonne B
    Plage.Offset(0, 1).Value = Tablo
    Set Plage = Nothing
    End Sub

    tu n'as plus qu'à ajouter l'insertion de la colonne au début de la macro, et adapter ma proposition

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 934
    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 : 12 934
    Points : 28 930
    Points
    28 930
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Autre solution en insérant la formule dans les cellules de la colonne insérée et ensuite remplacer cette fonction par son résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub t()
     Dim rng As Range, myFormula As String
     myFormula = "=LEFT(RC[-1],7)" ' Formule
     Set rng = ThisWorkbook.Worksheets("Feuil1").Range("A1").CurrentRegion
     With rng
     .Columns(2).Insert
     Set rng = .Columns(2).Offset(1).Resize(.Rows.Count - 1).Cells
     End With
     With rng
     .FormulaR1C1 = myFormula
     .Value = .Value ' Equivalent du Collage spécial/Valeur
     End With
    End Sub

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Il peut place une formule dans la colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     activesheet.columns(10).formular1c1=etc...
    activesheet.columns(10)=activesheet.columns(10).value 'pour supporter les formules!

  5. #5
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Mars 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 32
    Points : 23
    Points
    23
    Par défaut Foction Left sous VBa EXCEL
    Bonjour à tous,

    Je viens de tester les codes.

    joe.levrai, ton code marche bien,génial, j'ai le résultats que je voulais.
    merci beaucoup.

    Pour Philippe Tulliez, quand je lance ton code, j'ai comme message d’erreur:

    "L'indice n'appartient pas à ,la solution"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set rng = ThisWorkbook.Worksheets("ANOMALIE_TELEREG").Range("A1").CurrentRegion
    c'est à partir de cette ligne où ça bloque

    J'ai remplacé "feuille1" par "ANOMALIE_TELEREG" , nom de ma feuille.

    Je trouve ton code simple et très intéressant, c'est quoi je veux avoir la solution.

    Merci par avance.

  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
    12 934
    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 : 12 934
    Points : 28 930
    Points
    28 930
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    "L'indice n'appartient pas à ,la solution"
    A mon avis c'est la sélection et pas la solution
    Ce message signifie que le nom de la feuille n'est pas correct donc soit l'orthographe du nom n'est pas la bonne soit c'est le classeur qui n'est le bon.
    L'objet ThisWorkbook représente le classeur où se trouve le code VBA. Si la feuille nommée ANOMALIE_TELEREG se trouve dans un autre classeur il s'agit d'utiliser Workbooks("Nom du classeur") suivi de la feuille et de la cellule de départ de la liste (A1)

  7. #7
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Mars 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 32
    Points : 23
    Points
    23
    Par défaut Foction Left sous VBa EXCEL
    Re Bonjour Philippe Tulliez,

    Oui vous avez raison c'est le classeur qu'il ne reconnait pas.

    Quand je mets seulement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rng = Worksheets("ANOMALIE_TELEREG").Range("A1").CurrentRegion
    ça marche, mais le nom de la colonne insérée qui est vide
    Pour le reste tout est ok, il me récupère bien les 7 caratères sur toute la colonne.

    Ps: J’utilise le même classeur à la suite de l'importation

    Merci par avance

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 934
    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 : 12 934
    Points : 28 930
    Points
    28 930
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour éviter les soucis, il est toujours préférable de préciser la filiation complète d'un range.
    Si c'est le classeur actif, il serait bon de définir la plage dès l'ouverture de celui-ci
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim rng As Range
    Set rng = Workbooks(ActiveWorkbook.Name).Worksheets("feuil1").Range("A1").CurrentRegion
    ça marche, mais le nom de la colonne insérée qui est vide
    Là je n'ai pas compris

  9. #9
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Mars 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 32
    Points : 23
    Points
    23
    Par défaut Foction Left sous VBa EXCEL
    Bonjour ,

    Oui merci encore, ça fonctionne bien.

    ça marche, mais le nom de la colonne insérée qui est vide
    Je voulais dire il me manque le libellé de la colonne inséré.

    Je veux mettre un nom sur l'entête de la colonne insérer!

    par exemple je veux l'appeler " ENTITE"


    Cordialement

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 934
    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 : 12 934
    Points : 28 930
    Points
    28 930
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Exemple (Voir la ligne en rouge qu'il faut ajouter après l'insertion de la colonne)
    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 rng As Range, myFormula As String
     myFormula = "=LEFT(RC[-1],7)" ' Formule
     Set rng = Workbooks(ActiveWorkbook.Name).Worksheets("feuil1").Range("A1").CurrentRegion
     With rng
     .Columns(2).Insert
     .Columns(2).Cells(1, 1) = "Entité"
      Set rng = .Columns(2).Offset(1).Resize(.Rows.Count - 1).Cells
     End With
     With rng
     .FormulaR1C1 = myFormula
     .Value = .Value ' Equivalent du Collage spécial/Valeur
     End With
    End Sub

  11. #11
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Mars 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 32
    Points : 23
    Points
    23
    Par défaut Foction Left sous VBa EXCEL
    Bonjour,
    Merci beaucoup, ça marche très bien .

    C'est très sympa, votre aide m'est précieux.

    Cordialement

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 934
    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 : 12 934
    Points : 28 930
    Points
    28 930
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ravi d'avoir pu t'aider.

  13. #13
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut




    Bonjour,

    juste en passant, WorkBooks(ActiveWorkbook.Name) est une périphrase d'ActiveWorkbook pourtant suffisant à lui seul !



    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  14. #14
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 934
    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 : 12 934
    Points : 28 930
    Points
    28 930
    Billets dans le blog
    53
    Par défaut
    Bonjour Marc,
    juste en passant, WorkBooks(ActiveWorkbook.Name) est une périphrase d'ActiveWorkbook pourtant suffisant à lui seul !
    D'accord avec toi. Il y a des moment où on a envie de se chatouiller pour se faire rire.

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

Discussions similaires

  1. Formater le résultat d'une fonction perso sous VBA Excel
    Par miron_fds dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/06/2013, 15h07
  2. [VBA-E]Fonction Racine sous VBA
    Par vuong1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/04/2007, 00h48
  3. [VBA-E] Comment créer un tableau sous vba excel
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/01/2007, 09h52
  4. Arc de cercle sous VBA excel?
    Par fredieuric dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/11/2006, 13h58
  5. ptit probleme combobox sous vba/excel
    Par bandito dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/10/2006, 09h34

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