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 :

Remplacer dans toutes les cellules [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 178
    Points : 122
    Points
    122
    Par défaut Remplacer dans toutes les cellules
    Bonjour tout le monde,

    Je n'y connais rien en VBA, et du coup, j'ai un algo simple que je ne sais pas traduire...

    Pour résumer, j'ai un fichier avec des noms de personnes (la liste est exhaustive).
    Je dois parser toutes mes cellules, et remplacer un nom par son trigramme. Par exmple, j'ai pierre.dupont, après mon script je dois avoir PDT. La liste étant exhaustive, la transformation se fera "en dur"

    En fonction des possibilités de VBA, mon algo est soit une liste de 'if', soit un 'switch-case' :

    Boucle sur toutes les cellules remplies, pour chaque cellule
    Si 'contenu-cellule' == 'mon nom'
    Alors Remplacement 'contenu-cellule' par 'mon trigramme'
    Sinon
    Rien
    Fin Si
    Fin boucle
    Merci d'avance

  2. #2
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 63
    Points : 38
    Points
    38
    Par défaut
    Bonjour !

    Citation Envoyé par arnogb69 Voir le message
    Je dois parser toutes mes cellules, et remplacer un nom par son trigramme. Par exmple, j'ai pierre.dupont, après mon script je dois avoir PDT. La liste étant exhaustive, la transformation se fera "en dur"
    Tu as déjà une liste avec dans une colonne les noms et une colonne les trigrammes, ou il faut créer les trigrammes ?

    Rassure toi, je ne crois pas que c'est très compliqué, je pourrais m'y pencher si tu as besoin, mais dans ce forum certains sont très forts et sauront sûrement répondre plus facilement que moi.

    Mais si ta liste de trigrammes n'est pas créée, il y a facilement moyen de, par une boucle qui parcourt tous tes noms, de remplacer chaque nom par son trigramme, ou alors de remplir la colonne d'à côté. Il existe une fonction qui pourra te permettre de :
    1) Prendre la première lettre du nom
    2) Prendre la première lettre après le point
    3) Prendre la dernière lettre du nom
    4) Regrouper le tout et le copier soit dans la colonne d'à côté soit à la place du nom

    Je crois que c'est possible, d'autres te répondront peut-être plus vite, mais je vais regarder

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 178
    Points : 122
    Points
    122
    Par défaut
    Citation Envoyé par Piixx_e Voir le message
    Tu as déjà une liste avec dans une colonne les noms et une colonne les trigrammes, ou il faut créer les trigrammes ?
    Je l'ai déjà la liste des trigrammes...
    En fait, je ne voulais pas compliquer mon algo, surtout qu'il faudrait que je rajoute une règle du style "si mon contenu est du type prenom.nom" pour limiter mes remplacements là où il faut

    Je sais que mon algo n'est pas compliqué, ça me prendrait juste 3 minutes en php, mais je n'y connais vraiment rien en VBA.

    Merci en tout cas

  4. #4
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 63
    Points : 38
    Points
    38
    Par défaut
    Ahh d'accord !

    Excuse moi, je n'avais pas du tout saisi ta demande

    Mais que peut-il y avoir d'autres pour que tu doutes que ce soit de la forme prenom.nom ?
    Est-ce que ça suffirait de vérifier qu'il y a un point dans la cellule ? Ou il faut vérifier qu'il y a "une chaine de caractères" + "." + "une chaine de caractères" ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 178
    Points : 122
    Points
    122
    Par défaut
    Je pense qu'il faut plus vérifier "chaine de caractères" + "." + "une chaine de caractères"

    Mes autres cellules contiennent du texte (sans concaténation ou des chiffres...)

  6. #6
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 63
    Points : 38
    Points
    38
    Par défaut
    Hum d'accord, je suppose que tu ne peux pas m'envoyer quelques exemples de trucs pas bons pour que je puisse essayer ça ?

    Parce que je me disais que peut-être, il suffisait de lui dire : s'il n'y a pas un point (donc s'il y en a zéro c'est faux et s'il y en a strictement plus qu'un c'est faux) ou s'il y a un chiffre, c'est faux. Et peut être rajouter que si le point est le 1er ou dernier caractère c'est faux aussi.

    Il y a d'autres cas, ou ça pourrait convenir et suffire comme raisonnement ?

  7. #7
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Pix, il suffit d'affecter à une variable x un split avec le point et de tester le uperbound de faire un if ubound(x) = 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub toto()
    Stringue = "nom.prenom"
    x = Split(Stringue, ".")
    If UBound(x) = 1 Then MsgBox ("C'est un nom et prénom")
    End Sub

  8. #8
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 63
    Points : 38
    Points
    38
    Par défaut
    Wow. Je suis impressionnée, je fais vraiment pas le poids

    Mais pour le coup, je serais vraiment ravie que tu m'expliques ce que tu viens d'écrire, je ne connais pas la moitié des fonctions utilisées. (si tu as le temps bien sûr, sinon l'aide VBA est mon amie !)

    Merci d'avance

  9. #9
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Tu as le code en dessous...

    La fonction split(Chaine,Delimiteur) va te séparer ta chaine de caractères dans un tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    stringue = nom.prenom:
    x = split(stringue,".")
    Va te donner un tableau avec x(0) = nom et x(1) = prenom

    Donc si la borne supérieure de x vaut 1 la condition "chaine" & "." & "chaine" est vérifiée...

  10. #10
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 63
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par EngueEngue Voir le message
    Tu as le code en dessous...
    J'avais vu, mais ça ne m'a pas aidée, d'où ma question, je ne voulais pas encombrer la page en recopiant le code c'est tout

    J'ai compris maintenant, merci pour l'explication

  11. #11
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Voilà ce qui devrait répondre à ta question l'ami si ma compréhension de ton pb est bonne et s'il n'y a pas de coquilles puisque non testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub toto2()
    dim x() As string
        with sheets("Feuil1")
            For each c in .usedrange
                x = split(c.value, ".")
                If ubound(x) = 1 Then
                    c.value = ucase(left(x(0), 1)) & ucase(left(x(1), 1)) & ucase(right(x(1), 1))
                End if
            next
        end with
    end sub
    Testé et approuvé: Il va te changer toutes les cases de la sorte "chaine" & "." & "chaine" dans la Feuille qui s'appelle Feuil1 par la premiere lettre de la premiere chaine la premiere de la deuxieme et la derniere de la deuxieme en majuscules.

  12. #12
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 63
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par arnogb69 Voir le message
    Je l'ai déjà la liste des trigrammes...
    En fait, je ne voulais pas compliquer mon algo, surtout qu'il faudrait que je rajoute une règle du style "si mon contenu est du type prenom.nom" pour limiter mes remplacements là où il faut
    En fait il a déjà la liste des trigrammes ! Mais voilà arnogb69, si jamais tu voulais aussi ne pas avoir la colonne des trigrammes à faire, EngueEngue t'as tout dit je crois

    Bonne continuation !

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 178
    Points : 122
    Points
    122
    Par défaut
    Citation Envoyé par EngueEngue Voir le message
    Voilà ce qui devrait répondre à ta question l'ami si ma compréhension de ton pb est bonne et s'il n'y a pas de coquilles puisque non testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub toto2()
    dim x() As string
        with sheets("Feuil1")
            For each c in .usedrange
                x = split(c.value, ".")
                If ubound(x) = 1 Then
                    c.value = ucase(left(x(0), 1)) & ucase(left(x(1), 1)) & ucase(right(x(1), 1))
                End if
            next
        end with
    end sub
    Testé et approuvé également!!
    Merci beaucoup
    Juste une dernière remarque, plus d'ordre générique... il n'y a pas possibilité de ne pas nommer la feuille, mais de prendre toutes les feuilles actives? (la c'est pour chipoter )

  14. #14
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Toutes les feuilles actives ? Il n'y a qu'une seule feuille active en même temps..

    Pour la feuille active:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub toto2()
    dim x() As string
        with Activesheet
            For each c in .usedrange
                x = split(c.value, ".")
                If ubound(x) = 1 Then
                    c.value = ucase(left(x(0), 1)) & ucase(left(x(1), 1)) & ucase(right(x(1), 1))
                End if
            next
        end with
    end sub
    Pour toutes les feuilles du classeur:

    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 toto2()
    dim x() As string
        For each WS in activeworkbook.worksheets
    With WS
            For each c in .usedrange
                x = split(c.value, ".")
                If ubound(x) = 1 Then
                    c.value = ucase(left(x(0), 1)) & ucase(left(x(1), 1)) & ucase(right(x(1), 1))
                End if
            next
     
        end with
    Next Ws
    end sub

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 178
    Points : 122
    Points
    122
    Par défaut
    Citation Envoyé par EngueEngue Voir le message
    Toutes les feuilles actives ? Il n'y a qu'une seule feuille active en même temps..
    En effet, je me suis trompé

    Citation Envoyé par EngueEngue Voir le message
    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 toto2()
    dim x() As string
        For each WS in activeworkbook.worksheets
    With WS
            For each c in .usedrange
                x = split(c.value, ".")
                If ubound(x) = 1 Then
                    c.value = ucase(left(x(0), 1)) & ucase(left(x(1), 1)) & ucase(right(x(1), 1))
                End if
            next
     
        end with
    Next Ws
    end sub
    Et je pars sur celle là

    Merci

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

Discussions similaires

  1. [Toutes versions] rajouter deux 0 dans toutes les cellules d une colonne sans effacer leur contenues
    Par mikeactuaire dans le forum Access
    Réponses: 3
    Dernier message: 08/09/2011, 14h31
  2. Réponses: 1
    Dernier message: 18/03/2011, 18h35
  3. [AC-2007] Creation de table avec calculs de ratio : "#Nom?" dans toutes les cellules
    Par jbulysse dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/09/2009, 09h48
  4. Ajouter * dans toutes les cellules d'une colonne
    Par islyoung2 dans le forum Excel
    Réponses: 4
    Dernier message: 04/02/2009, 11h13
  5. copier dans toutes les cellules jaunes ?
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 19/11/2007, 23h36

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