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 :

Formule TEXTE sous VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut
    Bonjour,

    J'ai besoin de ne conserver que certaines lignes en fonction du premier caractère de la valeur des cellules d'une feuille de données. Si le nombre de caractères est inférieur à 6, cela signifie que le(s) caractère(s) manquant(s) pour arriver à 6 sont un (des) 0, placé(s) en début de chaîne. Par exemple, si j'ai 123456, pas de problème, si j'ai 1234, cela signifie que la "bonne" valeur est 001234. Je souhaite donc passer par l'équivalent de la formule TEXTE afin d'avoir tous mes comptes au même format. Ci-dessous le code que j'ai écrit. L'embêtant c'est que lors de l'exécution de la macro, celle-ci ne se lance pas car Excel me dit "Sub or Function not defined" en me surlignant "Text". Que faut-il écrire pour arriver au résultat voulu ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test()
     
        With Sheets("Compile BS")
                Dim LR As Integer, Account As Range, AccClass As String
                LR = .Cells(.Rows.Count, 1).End(xlUp).Row
                For Each Account In .Range("A2:A" & LR)
                AccClass = Left(Text(Account.Value, "000000"), 1)
                If AccClass = "4" Or AccClass = "7" Then Rows(Account).Delete
                Next Account
        End With
    End Sub
    Je vous remercie par avance pour votre aide !

    Runsh

    J'ai remplacé la définition de mon AccClass par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AccClass = Left(Format(Account.Value, "000000"), 1)
    et ça ne me bloque plus. Mon problème maintenant c'est que je n'ai aucune ligne qui a été supprimée alors qu'il devrait y en avoir justement. Pouvez-vous m'expliquer pourquoi ma boucle ne fonctionne pas ?
    Merci d'avance !

    Cordialement,

    Runsh

  2. #2
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    bonjour,
    ton probleme vient du fait que tu formates le contenu de la cellule comme suit "000000" donc si dans la cellule il y a 1234 lui il considére qu'il y a "001234".
    La fonction LEFT comme tu l'as écrite recherche le premier caractère en partant de la gauche, donc dans l'exemple "=0".
    Dans ta condition tu effaces la ligne si c égale à 4 ou 7. Donc comme c'est égale à 0 il efface rien.

    Voila ce que j'ai compris.

  3. #3
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut
    Bonjour rvtoulon.,

    Je te donne un exemple de numéros de compte que j'ai dans ma liste : 70401, 401330, 100201, 763101. Le 70401 est donc bien 070401 et ne doit pas être suprimé. Par contre le 401330 ainsi que 763101 devrait être supprimé mais ce n'est pas le cas. Pourtant j'ai l'impression d'avoir fait quelque chose de correct...

  4. #4
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Re je comprend,
    il faut remplacer ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If AccClass = "4" Or AccClass = "7" Then Rows(Account).Delete
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If AccClass = "4" Or AccClass = "7" Then Rows(Account.Row).Delete
    Mais ceci va te causer un autre probleme car lorsque tu auras supprimé la ligne celle du dessous va monter et la boucle for each va aller à la ligne suivante du coup tu ne vas pas analyser toutes les lignes.

    Pour éviter cela, il faut faire une boucle ex: for i=10 to 2 step -1. Tu pars de la dernière ligne pour remonter vers la première.

    ça donnerais ceci à peu près :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test()
    Dim LR As Integer, Account As Range, AccClass As String
     With Sheets("Compile BS")
        LR = .Cells(.Rows.Count, 1).End(xlUp).Row
     
          For i = LR To 2 Step -1
             AccClass = Left(Format(.Range("A" & i).Value, "000000"), 1)
               If AccClass = "4" Or AccClass = "7" Then Rows(i).Delete
          Next i
    End With
    End Sub
    EDIT: petite erreur corrigée, j'ai remplacé "next account" par "next i" c'est mieux .

  5. #5
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut
    Merci beaucoup pour ton aide, c'est parfait !
    Pour le coup du For... To, j'aurai pu éviter, je connais ce genre de trucs. En tout cas merci, car j'aurai quand même cherché un moment !!
    Bonne journée !

    Runsh

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

Discussions similaires

  1. Formules texte en VBA
    Par kelly27 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 16/12/2014, 00h52
  2. [XL-2003] Formule index sous VBA
    Par applemilk dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 04/08/2011, 13h56
  3. [XL-2003] creation fichier word en texte sous vba excel
    Par pulco41 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/01/2011, 16h00
  4. creation fichier word en texte sous vba excel
    Par pulco41 dans le forum Word
    Réponses: 6
    Dernier message: 06/01/2011, 15h37
  5. [E-02] formules excel sous vba
    Par ladygtk dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 19/02/2009, 13h19

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