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 :

[VBA] Fonctions Right et Left pour plage de cellules


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Par défaut [VBA] Fonctions Right et Left pour plage de cellules
    Bonjour à tous,

    Je suis à la recherche d'une solution pour un problème de programmation en VBA.

    En effet dans mon code, je souhaite récupérer uniquement une partie de texte contenue dans ma colonne C. Pour l'instant ça fonctionne très bien sur une cellule, le soucis étant que je souhaiterais désormais étendre cela sur la sélection C4:C30000.

    Quelqu'un aurait-il une idée de ce qu'il faut modifier ?

    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Range("C4:C30000").Select
    ActiveCell = Right(ActiveCell, Len(ActiveCell) - 151)
    ActiveCell = Left(ActiveCell, Len(ActiveCell) - 1)
    Merci d'avance

  2. #2
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    salut,

    Je te propose ce code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub traite()
    Range("C4:C30000").Select
     
    For Each c In Selection
        c.Offset(0, 1).Value = Right(c.Value, Len(c.Value) - 151)
        c.Offset(0, 2).Value = Left(c.Value, Len(c.Value) - 1)
    Next
    End Sub
    J'ai fait afficher les éléments dans les 2 colonnes suivantes. Pour moi, tu ne peux pas faire afficher dans la même cellule le gauche ... et le droite ... dans la même cellule ..

    C'est une base.

    En espérant que cela te mette sur la piste.

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Par défaut
    J'avais réalisé un right et left pour récupérer uniquement le partie 4 of 8 et enlever les parenthèses qui l'entourait.

    Je viens de tester le code et j'ai une erreur qui s'affiche : "Argument ou appel de procédure incorrect".

    Cela vient de la fonction offset ? Car j'ai regardé l'aide vba et pourtant celle ci est correct ..

  4. #4
    Invité
    Invité(e)
    Par défaut
    J'avais réalisé un right et left pour récupérer uniquement le partie 4 of 8 et enlever les parenthèses qui l'entourait.
    je ne comprends pas la notion des 151!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    txt = "1234567890"
    tx = Trim(Mid(txt & Space(8), 4, 5))     ' 4 of 8

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Par défaut
    En pièce jointe mon fichier, si on regarde la ligne 991 qui est le texte initial, je souhaite supprimer le texte et garder uniquement 4 of 8 pour pouvoir ensuite faire un graphique à partir de ces données.
    Fichiers attachés Fichiers attachés

  6. #6
    Invité
    Invité(e)
    Par défaut
    ça j'ai bien compris mais mon code fait 4 of 8!

    mais la notion des 151 ,pas compris vue que ce qui t’enterres ce sont le caractères de 4 à 8!

  7. #7
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    Salut,

    Sauf que si tu as "4 of 8" (ou autre) dans une cellule, amuse toi pour faire un graphique avec !

    Il vaut mieux, dans ce cas, mettre le 4 dans une cellule et le 8 dans une autre. Là tu auras des valeurs numériques et Excel sera, alors capable de les utiliser pour un graph ...

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Par défaut
    Je ne comprends pas vraiment ton code, pourrais-tu l'expliquer ?

    J'avais utiliser le 151 pour enlever les 151 premiers caractères et ainsi garder ce qui m’intéresse car le nombre d'utilisateurs n'est jamais le même ainsi que le texte.

  9. #9
    Invité
    Invité(e)
    Par défaut
    ce que tu vue récupérer,c'est du quatrième caractères au huitième caractères! donc 5 caractère!

    le mid te permet d’extraire un texte du caractère 4 au nombre de caractères précisé sachant que la position 1 commence à 1! si JE FAIS Mid("AB",1,1) ça revient = faire un left("AB",1) ça retourne "A"!

    si je fais Mid("AB"),2,1) ça me retourne "B". si je fais mid("1234567890",4,5) ça me retourne "45678"

    le mid c'est le Left et le Right dans une seule instruction!

    ensuite la vrai question est ton texte commence à 4 ou à 151!

    mid(txt,151+4,5)

  10. #10
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    voici ce que je te propose pour remplace le 151.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub essai()
     
        Range("C4:C30000").Select
     
        For Each c In Selection
            pos = InStr(1, c.Value, "of", vbTextCompare) - 2
            c.Offset(0, 2).Value = Mid(c, pos, 6)
        Next
     
    End Sub
    L'instruction instr est là pour trouver où est le "of" dans la cellule. Après je fais -2 pour récupérer le nombre placé avant (et oui il y a aussi l'espace)

    Le seul hic c'est s'il n'y pas de "of" dans la cellule ... mais dans ce cas, il n'y a rien à extraire. NON ?

  11. #11
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Par défaut
    Je reviens vers vous car après plusieurs tests, le développeur m'indique qu'il y a un argument incorrect à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C.Offset(0, 2).Value = Mid(C, pos, 6)
    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Range("C4:C30000").Select
    For Each C In Selection
            pos = InStr(1, C.Value, "of", vbTextCompare) - 2
            C.Offset(0, 2).Value = Mid(C, pos, 6)
    Next
    Je ne comprends pas vraiment pourquoi une erreur apparait sur cette ligne sachant que les paramètres sont corrects

    Et oui Jerome, quand il n'y a pas de of dans la cellule, on ne récupère rien

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