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 for each & activecell


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 74
    Par défaut Fonction for each & activecell
    Bonjour

    J'ai recupéré un bout de code que je n'arrive plus a faire fonctionné. impossible de retrouver ce bout de code sur le net

    Mon probleme est le suivant, j'ai dans la colonne A des mots.
    Je souhaite faire pour tous les mots de la colonne A fair une modification et reporter le résultat dans la colonne B en phase de ce mot


    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 foreach()
     
    Range("A2").Select
    Range(Selection, Selection.End(xlDown)).Select
     
    For Each chaine In Selection
     
    'Garder la chaine de charactere a gauche de ' -'
    chaine = Left(chaine, InStr(2, chaine, " -")) 
    chaine = ActiveCell.Offset(0, 1)
    Next chaine
     
     
    End Sub
    Avec ce bout de code je reste toujours sur la premiere ligne, je suis entrain de m'y agacer depuis environs 2 heures :-((


    Merci d'avance pour votre aide
    jerome

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    les Select ralentissent considérable les procédures
    les activecell sont à éviter autant que possible

    ton cas en est l'illustre exemple :
    - tu sélectionnes une cellule
    - tu sélectionnes la plage partant de cette cellule (jusqu'en bas)
    - tu boucles sur ta sélection (qui est une plage de plusieurs cellules)
    ==> dans ta boucle, Activecell sera TOUJOURS la première cellule de ta plage de cellules

    voici une autre approche commentée

    si tu ne comprend pas la fonction Split, je te laisse consulter l'aide à ce sujet


    Regarde si ça correspond à ton besoin, et s'il faut adapter des choses

    Attention : je suis parti du principe que la cellule A1 est remplie !

    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
    Sub foreach()
        Dim Tablo()
        ' transfert de la colonne A dans un tableau (à partir de la ligne 2)
        Tablo = Cells(2, 1).Resize(UsedRange.Rows.Count - 1, 1).Value
            ' boucle sur le tableau
            For i = LBound(Tablo) To UBound(Tablo)
                ' si la cellule contient au moins un "-"
                If UBound(Split(Tablo(i, 1), "-")) > 0 Then
                    ' on ne garde que ce qui est à gauche du premier "-"
                    Tablo(i, 1) = Split(Tablo(i, 1), "-")(0)
                End If
            Next i
        ' restitution des valeurs en colonne B
        Cells(2, 2).Resize(UBound(Tablo), 1).Value = Tablo
    End Sub

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 74
    Par défaut Fonction for each & activecell
    Bonjour

    Merci pour ton retour/conseil,
    je viens de l'essayer mais arriver à la 3eme ligne
    Table =cell (2,1...
    j'ai un "run time error 424 - object required"

    Sinon avec mon bout de code,
    est ce que tu saurais rectifier le code pour qu il descende à chaque next la selection de la cellule?

    Encore merci
    jerome

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je ne veux pas rafistoler ta procédure mal construite et pas optimisée.


    je n'ai aucun problème en utilisant le code que je t'ai fourni, et à aucun moment dans mon code je n'ai le mot "Table" et le mot "cell"
    peux-tu me montrer le code tel que tu l'as lancé, il semblerait que tu ai modifié des choses ?

    Ps : j'ai oublié de te dire de rajouter la feuille où ça se passe ... là c'est sur la feuille active

  5. #5
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour.

    Rafistoler

    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 foreach()
     
    Range("A2").Select
    Range(Selection, Selection.End(xlDown)).Select
     
    For Each chaine In Selection
     
    'Garder la chaine de charactere a gauche de ' -'
     
    chaine.Offset(0, 1) = Left(chaine, InStr(2, chaine, " -"))
    Next chaine
     
     
    End Sub

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 74
    Par défaut Fonction for each & activecell
    Hi

    j'ai rafistolé ma procédure , voici ce que ca donne:

    Avant macro
    Match / Equipe domicile
    Bourg Peronnas - Creteil
    Paris SG - Creteil
    *Dijon - Niort
    *Evian Thonon - Clermont *
    Laval - Nancy


    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
    Sub fore()
    Dim ChaineR As Range
    Dim Rng As Range
    Dim DerligneCM As Long
     
    Range("A2").Select
    Range(Selection, Selection.End(xlDown)).Select
    DerligneCM = [A11000].End(xlUp).Row
    Set Rng = Range("A2:A" & DerligneCM)
     
    For Each ChaineR In Rng.Cells
    Chaine = Right(ChaineR, Len(ChaineR) - 1)
    Chaine = Left(Chaine, InStr(2, Chaine, " -") - 1) 
    ChaineR.Offset(0, 1) = Chaine
    Next ChaineR
    End Sub
    Apres macro
    Match / Equipe domicile
    Bourg Peronnas - Creteil Bourg Peronnas
    Paris SG - Creteil Paris SG
    *Dijon - Niort Dijon
    *Evian Thonon - Clermont Evian Thonon
    *Laval - Nancy Laval


    Concernant ton code, j'ai fait des erreurs de frappe pour stipuler ou ca bloque chez moi -desole-, la ligne qui plante est la suivante:
    " Tablo = Cells(2, 1).Resize(UsedRange.Rows.Count - 1, 1).Value"

    Je vais essayer de redemarrer excel :-s.

    Dernière questions pour dormir moins bete ce soir, tu me dis d'éviter le select.
    Que me propose-tu pour selectionner la plage de cellule d'un colonne A ou se trouve des valeurs de la ligne 1 a 9.
    En gros pour éviter le select dans ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Range("A2").Select
    Range(Selection, Selection.End(xlDown)).Select
    DerligneCM = [A11000].End(xlUp).Row
    Set Rng = Range("A2:A" & DerligneCM)
    Encore merci pour ton aide
    Jerome

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Personnellement je suis allergique aux selects!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub foreach()
    For Each chaine In Range(Range("A2"), Range("A2").End(xlDown))
    'Garder la chaine de charactere a gauche de ' -'
    chaine.Offset(0, 1) = Left(chaine, InStr(2, chaine, " -"))
    Next chaine
    End Sub

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 74
    Par défaut Fonction for each & activecell resolu :)
    Super merci beaucoup !!!

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

Discussions similaires

  1. [XL-2007] Fonction IsNumeric et For Each _In _Next
    Par souad12 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/08/2011, 11h01
  2. [XSLT 1.0] XSLT: utilisation de la fonction position() dans <for-each> imbriqués
    Par bernidupont dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/05/2011, 21h33
  3. for-each et traitement alternatif en fonction de la position
    Par Bernard Grosdoy dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 15/09/2005, 17h12
  4. fonction for each key .......
    Par trialrofr dans le forum ASP
    Réponses: 13
    Dernier message: 10/01/2005, 14h29
  5. [VB6] For Each ... In ...
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/02/2003, 12h56

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