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 If like [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut fonction If like
    Bonjour,
    je souhaiterais améliorer un programme en inserant la fonction "If..like....".

    Lorsque la macro est lancée, le programme fonctionne :
    si A2 contient 69 alors B2= ain-rhone etc..

    Le soucis est :
    Aprés que la macro soit lancée, si je desire changer le contenu de la cellule A2, qui contient non plus "69" mais "26", la cellule B2 reste toujours avec le terme "ain-rhone" alors que je voudrais que que le contenu de la cellule B2 change également et contient alors le nom "drome-ardeche" comme le stipule la macro ci dessous.

    Pourriez vous m'aider ?
    Merci

    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
    20
    21
    22
    Sub test()
    Dim ligFin As Long
    Dim Macell As Range
     
    ligFin = Range("A2").End(xlDown).Row
     
    For Each Macell In Range("A2:A" & ligFin)
    If Macell Like "*69*" Then Macell.Offset(0, 1).Value = "ain-rhone"
    If Macell Like "*1*" Then Macell.Offset(0, 1).Value = "ain-rhone"
    If Macell Like "*26*" Then Macell.Offset(0, 1).Value = "drome -ardeche"
    If Macell Like "*38*" Then Macell.Offset(0, 1).Value = "isere"
    If Macell Like "*42*" Then Macell.Offset(0, 1).Value = "loire"
    If Macell Like "*39*" Then Macell.Offset(0, 1).Value = "jura"
    If Macell Like "*71 ctc*" Then Macell.Offset(0, 1).Value = "saone et loire 71"
    If Macell Like "*73 ctc*" Then Macell.Offset(0, 1).Value = "svoie 73"
    If Macell Like "*74 ctc*" Then Macell.Offset(0, 1).Value = "haute savoie 74"
    If Macell Like "*national*" Then Macell.Offset(0, 1).Value = "national"
    If Macell Like "*nyk*" Then Macell.Offset(0, 1).Value = "nyk"
     
    Next Macell
     
    End Sub

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,
    attention, la fonction
    Macell.Offset(0, 1)
    va se deplacer de la colonne A a la colonne B, donc normal que si tu passes de A2 a A3, tu pointeras sur B3 a la place de B2...

    Dis moi si j'ai mal compris ta problematique
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Bonjour jpcheck,
    Justement , c'est le gros prblème..
    Le programme ne sais pas modifier ce genre de chose. Je souhaiterais rajouter une ligne qui permettrait, apres que la macro soit lancée,
    que le contenu de la cellule B2 soit toujours en correlation avec le contenu de la cellule A2 et que le contenu de la cellule B3 soit également en correlation avec le contenu de la cellule A3 ..etc
    Est ce difficile ?

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    salut

    je ne suis pas certain de t'avoir bien compris.
    Ce qu'il me semble, c'est que tu cherches à faire ceci, à adapter et compléter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Column = 1 Then traduire Target
    End Sub
     
    Private Sub traduire(ByVal quoi As Range)
      donnees = Array("69", "1", "26", "38", "42", "39", "71 ctc", "73 ctc", "74 ctc", "national", "nyk")
      trads = Array("ain-rhone", "ain-rhone", "drome-ardeche", "isere", "loire", "jura", "saone et loire 71", "savoie 73", "haute savoie 74", "national", "nyk")
      For i = 0 To UBound(donnees)
        If quoi.Value Like "*" & donnees(i) & "*" Then
          quoi.Offset(0, 1) = trads(i)
          Exit Sub
        End If
      Next
    End Sub
    Si tel est d'ailleurs bien le cas, il sera encore plus adroit de faire une fonction personnalisée

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Salut babaothe,

    J'ai saisie cette procédure evenementielle. mais comme je ne suis pas un as de VBA , comment enclencher cette procédure : dois je créer un bouton userform ?

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    re

    euh...
    il s'agit là d'une procédure évènementielle qui intervient à chaque modification des données de ta feuille .
    Va donc dans VBA et clique sur le module de ta feuille dans ton projet VBA. dans la colonne gauche : choisis WorkSheet, puis choiisis, dans la colonne de droite : "Change". Le reste est évident.

  7. #7
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Bonsoir babaothe,
    La je suis completement perdu .
    J'ai bien suivie la mise en place de la procedure evenementielle. Mais cela ne fonctionne pas.

    Je resume brievement mon soucis
    J'ai un tableau avec deux colonnes A et B.
    Je desire mettre en place une procedure evenementielle qui me permetterait d'une part,
    1) d'afficher dans la cellule B2 un nom en fonction d'un terme contenu dans cellule A2 et d'autre part,
    2) que cette procedure modifie automatiquement le contenu de la cellule B2 si je change ulterieurement le contenu de la cellule A2.
    Meme chose pour la cellule B3 en fonction de B3..etc

    Merci

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    désolé, mais je ne vois vraiment pas quoi te dire de plus que les précisions que je t'ai déjà données !
    J'ajoute que (déjà dit plus haut) le choix de la création d'une fonction personnalisée serait encore plus adroit.
    Elle te permettrait de l'utiliser comme "formule" dans tes cellules de "traduction".
    Si tu la veux, je te la fais. Encore te faudra-t-il comprendre comment l'écrire dans un module bas (donc posséder un minimum de connaissances en VBA)

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Re,
    J'ai quelques notions en VBA..
    Et si la création d'une fonction personnalisée est plus judicieuse car comme tu le dis elle me permetrait alors de l'utiliser comme "formule" dans mes cellules de "traductuin" alors je suis preneur

  10. #10
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    voilà donc ta fonction personnalisée, à écrire dans u_n module.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function traduire(ByVal quoi As String) As String
      donnees = Array("69", "1", "26", "38", "42", "39", "71 ctc", "73 ctc", "74 ctc", "national", "nyk")
      trads = Array("ain-rhone", "ain-rhone", "drome-ardeche", "isere", "loire", "jura", "saone et loire 71", "savoie 73", "haute savoie 74", "national", "nyk")
      For i = 0 To UBound(donnees)
        If quoi Like "*" & donnees(i) & "*" Then
          traduire = trads(i)
          Exit Function
        End If
      Next
    End Function
    dans la première ligne (disons la 2, par exemple) de ta colonne B, la formule est donc :
    puis la copier et la coller sur chaque ligne concernée de la colonne B
    Voilà !

  11. #11
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    re babaothe
    Ta fomule personnalisee fonctionne a merveille .
    Je te remercie de ce coup de main.

    encore une petite question babaothe
    Si la colonne B devient la colonne AA...la formule ne fonctionne plus

  12. #12
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    C'est Ok babaothe.
    J'ai fait une erreur de frappe.
    Bonne nuit a toi et merci encore

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

Discussions similaires

  1. fonction "Regex like"
    Par calagan99 dans le forum Développement
    Réponses: 8
    Dernier message: 22/02/2012, 19h25
  2. Fonction VB "LIKE" sous VBScript ?
    Par chrish71 dans le forum VBScript
    Réponses: 7
    Dernier message: 04/03/2009, 21h39
  3. Créer une fonction "native-like"
    Par xordonez dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 31/01/2008, 17h02
  4. [VBA-E]Problème avec la fonction [B]LIKE[/B]
    Par srame dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 23/04/2007, 14h53
  5. [MySQL] besoin d'aide sur fonctions WHERE LIKE
    Par rvm31 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 24/08/2006, 21h37

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