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 :

Rechercher une partie du contenu d'une Cellule


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Points : 9
    Points
    9
    Par défaut Rechercher une partie du contenu d'une Cellule
    Salut,


    Je suis en train de faire une macro pour récupérer les données de différents devis et les classer dans une feuille excel, mais je bloque sur un problème pour récupérer le numéro du devis.

    Je vous met la partie de code qui coince :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For u = 1 To 10 Step 1
    For k = 1 To 6 Step 1
     
    If Cells(u, k).FormulaR1C1 = "        N° DEVIS" Then Devis = Cells(u, k + 1).Value
     
    Next k
    Next u
    En gros, je recherche la valeur "N° DEVIS" et dès que je la trouve je donne la valeur de la cellule suivante (celle juste à droite de "N° DEVIS") à ma variable Devis.

    Le soucis qui se pose c'est que le type qui a fait les devis s'est amusé à modifier non seulement l'emplacement de la celulle contenant "N° DEVIS" (d'où la nécessité de la recherche) mais a aussi parfois mis cette valeur dans des cellules fusionnées dans lesquelles il a recentré la valeur avec des espaces ...

    En conséquence je me retrouve à devoir rechercher une valeur avec un nombre indéterminé d'espaces. J'imagine qu'il y a une solution moins "bricolage" que de rentrer toutes le valeurs possibles avec des "Or" au milieu et donc je viens vous poser la question.

    Existe il une fonction de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(u, k).Value = "*N° DEVIS*"
    avec les étoiles permettant comme pour une recherche windows de signaler qu'il peut y avoir d'autres caractères à gauche ou à droite du terme recherché ?

    Merci d'avance

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 288
    Points : 281
    Points
    281
    Par défaut
    salut

    essaie avec ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    instr(1,chaine_cible, chaine_recherché)
    le 1 pour dire que ca commence au caractere n°1
    la chaine cible c'est là ou tu rechercher
    la chaine recherché c'est " N° Devis"

    ca marche! sauf si j'ai ecrit des betises

  3. #3
    Invité
    Invité(e)
    Par défaut
    Vous pouvez essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    numdev = "*123*"
     
    With Worksheets("MaFeuille").Range("A1:F10")
    Set Cel1 = .Find(numdev, LookIn:=xlValues, LookAt:=xlWhole)
    End With
        If Not Cel1 Is Nothing Then
        ad2 = Cel1.Address
        mavaleur = Range(ad2).Offset(0, 1).Value
        End If

  4. #4
    Membre actif Avatar de ilcocodrillo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Âge : 17
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 276
    Points
    276
    Par défaut
    Citation Envoyé par kuma_buzz Voir le message
    Le soucis qui se pose c'est que le type qui a fait les devis s'est amusé à modifier non seulement l'emplacement de la celulle contenant "N° DEVIS" (d'où la nécessité de la recherche) mais a aussi parfois mis cette valeur dans des cellules fusionnées dans lesquelles il a recentré la valeur avec des espaces ...

    il y a aussi les fonctions trim très pratique pour les espaces baladeurs !

    LTrim, RTrim et Trim, fonctions

    Renvoie une valeur de type Variant (String) contenant une copie d'une chaîne en supprimant les espaces de gauche (LTrim), les espaces de droite (RTrim) ou les deux (Trim).

    Syntaxe

    LTrim(string)

    RTrim(string)

    Trim(string)

    L'argument string peut être toute expression de chaîne valide. Si l'argument string contient une valeur de type Null, Null est renvoyé.
    80% des pannes informatiques se situent entre le clavier et la chaise...

    L'informatique ça vous énerve, prenez 5mns de détente ici


    =========== ===========

    Une fois que le problème à trouvé une solution n'oubliez pas le

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup pour votre aide.

    La solution la plus simple à intégrer dans mon code (et avec mon niveau de débutant) a été celle de pyrene.

    Voici donc le code final pour ceux que ça intéresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    For J = 1 To 10 Step 1
    For s = 1 To 6 Step 1
     
    If InStr(1, Cells(J, s), "N° DEVIS") Or InStr(1, Cells(J, s), "Quotation n°") Then
        If Cells(J, s + 1).Value <> "" Then
            devis = Cells(J, s + 1).Value
        Else: devis = Cells(J, s + 2).Value
        End If
    End If
     
    Next s
    Next J
    J'ai rajouté une valeur "Quotation" parce que certains devis sont en anglais.
    La parti avec les + 1 et +2 c'est pour gérer le décalage de cellules du au fusionnement. En effet, si ma chaine est dans une cellule fusionnée il faut "sauter" la cellule suivante avant de récupérer la valeur.
    C'est d'ailleurs pourquoi je ne me suis pas lancé dans l'utilisation de la solution de jacques_jean, ça aurait dépassé mes compétences.

    @ilcocodrillo : je ne comprend pas bien comment utiliser les fonctions que tu me donnes, aurait il fallu que je mette quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cells(J, s).Value = Trim("N° DEVIS") Then ...

    En tout cas merci pour la rapidité et l'efficacité de vos réponse.

    a +

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

Discussions similaires

  1. [XL-2007] Récupération d'une partie du contenu d'une cellule
    Par Jay-P dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/08/2010, 11h23
  2. [8i] Exporter une partie du contenu d'une table
    Par nicdo77 dans le forum Oracle
    Réponses: 1
    Dernier message: 12/12/2007, 14h59
  3. [VBA-E] Affecter une partie du contenu d'une cellule à une autre.
    Par CAFOUIN dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/02/2007, 10h03
  4. Excel : mettre une partie du contenu d'une cellule en gras
    Par cladsam dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/08/2006, 10h05
  5. [VBA-E] Inscrire dans le textbox une partie du contenu d'une cellule
    Par AliochaBada dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/08/2006, 08h06

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