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 un nombre mais pas le chiffre en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Acoustique
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Acoustique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Par défaut Remplacer un nombre mais pas le chiffre en VBA
    Bonjour à toutes et a tous,

    Voila mon problème j'aimerais utiliser un bouton pour actualiser des valeurs dans un tableau pour ce faire j'utilise la macro suivante :

    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
    Private Sub Actualiser_Click()
     
    Dim J As Long, I As Long
     J = 10
       For I = 1 To 5
     
          Columns("AA").Replace what:=Range("B" & J).Value, replacement:=Range("D" & J).Value
          Range("B" & J).Value = Range("D" & J).Value
     
          J = J + 2 ' Opération utilisé pour sélectionner les bonne cellule
     
          Columns("AB").Replace what:=Range("B" & J).Value, replacement:=Range("C" & J - 1).Value
     
          Range("B" & J).Value = Range("C" & J - 1).Value
          J = J + 1
     
       Next I
     
    End Sub
    Cette macro fonctionne bien, mais le problème c'est qu'elle ne va pas changer le nombre, elle va changer le chiffre

    Ce qui veut dire : si je veut changer 14430 par 2, Cela va fonctionner. Par contre si par la suite je veut changer a nouveau le 2 en 14430, et qu'une valeur comme 14432 se trouve dans la colonne alors la valeur 2 va bien se transformer en 14430 mais la valeur 14432 se trouvant déjà dans la colonne et qui ne doit pas être modifée va se transformer en 144314430.

    Avez vous une solution a mon problème.

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Replace
    Bonjour,

    2 remarques préliminaires:
    - Pour le report d'un code, utilise les bornes "#" en début et fin. Cette précaution facilitera la lecture du post.
    - Vérifie si les variables I et J doivent être déclarées en Long (Voir le tutoriel de Silkyroad à ce sujet)

    Peut-être une piste:
    Balayer les objets Range cellule par cellule pour effectuer tes remplacements mais au préalable enrichir un dictionnaire de son adresse.
    Pour le remplacement suivant, tester l'existence de cette adresse dans le dictionnaire.

    Je vais quitter le Forum bientôt.

    Mais RV à lundi.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Acoustique
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Acoustique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Par défaut
    merci Marcel pour ta réactivité

    Je ne pense pas que les variable I et J puissent avoir une influence sur la fonction replace étant donner qu'elles servent d'incrément.

    je ne sais pas encore me servir de dictionnaire. mais une des solution qui pourrais fonctionner serais de réaliser l'actualisation avec des chaînes de caractère ayant le même nombre de caractères. mais si tu as ou quelqu’un a une solution pour que je ne sois pas limité en longueur de chaîne de caractère je suis preneur.

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par ToToPifou Voir le message
    une des solution qui pourrais fonctionner serais de réaliser l'actualisation avec des chaînes de caractère ayant le même nombre de caractères.
    Une autre solution serait de lire l'aide VBA de la fonction Replace...

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par ToToPifou Voir le message
    Ce qui veut dire : si je veut changer 14430 par 2, Cela va fonctionner. Par contre si par la suite je veut changer a nouveau le 2 en 14430, et qu'une valeur comme 14432 se trouve dans la colonne alors la valeur 2 va bien se transformer en 14430 mais la valeur 14432 se trouvant déjà dans la colonne et qui ne doit pas être modifée va se transformer en 144314430.

    Avez vous une solution a mon problème.
    Regarde le paramètre LookAt de Replace.
    https://msdn.microsoft.com/fr-fr/lib.../ff194086.aspx

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Acoustique
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Acoustique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Regarde le paramètre LookAt de Replace.
    https://msdn.microsoft.com/fr-fr/lib.../ff194086.aspx
    Cela me semble être la solution par contre je ne vois pas comment utiliser se fameux LookAt, il me semble qu'il faut l'utiliser avec xlWHOLE mais je ne vois pas quelle syntaxe utiliser.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Acoustique
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Acoustique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Par défaut
    Parfait ! j'ai trouvé la syntaxe qui était évidente en fin de compte

    la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        For I = 1 To 5
      
        Columns("AA").Replace what:=Range("B" & J).Value, replacement:=Range("D" & J).Value, LookAt:=xlWhole
        
        
        Range("B" & J).Value = Range("D" & J).Value
        J = J + 2
        Columns("AB").Replace what:=Range("B" & J).Value, replacement:=Range("C" & J - 1).Value, LookAt:=xlWhole
        Range("B" & J).Value = Range("C" & J - 1).Value
        J = J + 1
      
      Next I

    Merci

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 01/02/2017, 20h54
  2. double precision mais pas de chiffres après la virgule
    Par mathieu_r dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 03/01/2012, 23h33
  3. [RegEx] expression reguliere pour remplacer un mot mais pas un autre
    Par chagam dans le forum Langage
    Réponses: 3
    Dernier message: 30/03/2011, 14h32
  4. [RegEx] Détecter 2 chiffres mais pas 3.
    Par DranDane dans le forum Langage
    Réponses: 3
    Dernier message: 23/04/2009, 16h07
  5. Réponses: 6
    Dernier message: 22/06/2005, 13h24

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