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 :

Select case sur une partie d'une chaine de caractere


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut Select case sur une partie d'une chaine de caractere
    Bonjour à tous,

    Mon problème est le suivant:

    J'ai un tableur excel avec dans une colonne une chaine de caractere de type :
    "élèment>sous-élement>mon objet>ma pièce"
    Et selon la valeur de "mon objet" je souhaite mettre la cellule suivante à une certaine valeur

    Voici mon code cba pour le moment, mais il ne fonctionne pas, j'ai créer une fonction que je lance à partir d'un bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function Secteur()
        For i = 3 To Sheets("PA2011").Range("A" & Rows.Count).End(xlUp).Row
            Select Case Sheets("PA2011").Cells(i, 10).Value
                Case "entrepôt>Production>piece A32"
                    Sheets("PA2011").Cells(i, 15).Value = "PA"
                Case "entrepôt>Production"
                    Sheets("PA2011").Cells(i, 15).Value = "production"
                Case "entrepôt>Production>Pièce B*"
                    Sheets("PA2011").Cells(i, 15).Value = "AMG DC"
                Case "*maintenance"
                    Sheets("PA2011").Cells(i, 15).Value = "maintenance"        
            End Select
        Next
    End Function
    Pour les deux premier cas, celà fonctionne car j'ai mis la chaine de caractère en entier. Mais je voudrais effectuer le select case uniquement sur une partie de la chaine, comme les cas 3 et 4 par exemple ... qui pour le moment ne fonctionne pas.

    Merci d'avance pour votre aide!
    Dernière modification par Invité ; 23/01/2012 à 13h42.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    For i = 3 To Sheets("PA2011").Range("A" & Rows.Count).End(xlUp).Row
        With Sheets("PA2011")
            If InStr(.Cells(i, 10), "entrepôt>Production>piece A32") > 0 Then
                .Cells(i, 15).Value = "PA"
            ElseIf InStr(.Cells(i, 10), "entrepôt>Production") > 0 Then
                .Cells(i, 15).Value = "production"
            ElseIf InStr(.Cells(i, 10), "entrepôt>Production>Pièce B") > 0 Then
                .Cells(i, 15).Value = "AMG DC"
            ElseIf InStr(.Cells(i, 10), "maintenance") > 0 Then
                .Cells(i, 15).Value = "maintenance"
            End If
        End With
    Next

  3. #3
    Invité
    Invité(e)
    Par défaut
    ça raccourci un peu mon code ... mais le pb reste le même. Si je met la chaine de caractère entière ça marche .. mais si je ne met qu'une partie ça ne marche pas ..

    EDIT

    Je retire ce que j'ai dit, ça marche, un erreur de majuscule que je viens de corriger et c'est bon

    Merci beaucoup!!

  4. #4
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Tu peux utiliser Like dans ce cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if .Cells(i, 10) like "entrepôt>Production>piece A32" then
     
    if .Cells(i, 10) like "*>Production>*" then

    Si le projet est plus conséquent, il serait peut-être utile de créer un type perso, voir une class en fonction de ce que tu veux faire par la suite.

    Tu peux aussi regarder du coté de la fonction Split, qui te permettrait de découper ta chaîne en utilisant les ">" comme clef.

    ++
    Qwaz

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci pour l'info, ce que tu m'as proposé avant marche parfaitement, mais je retiens quand même =)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/04/2013, 15h57
  2. Réponses: 2
    Dernier message: 17/04/2007, 17h14
  3. masquer une partie d'une vidéo par une banniere
    Par lezabour dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 16/10/2006, 16h47
  4. copier une partie d'une image vers une autre
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 13h39
  5. comparaison d une partie de la chaine de caractere
    Par sneb5757 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/12/2005, 15h50

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