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 :

Définir à partir d'une cellule contenant des retours chariot ce que doit chercher la méthode find [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 50
    Points : 36
    Points
    36
    Par défaut Définir à partir d'une cellule contenant des retours chariot ce que doit chercher la méthode find
    Bonjour,

    Le titre n'est peut-être pas très clair, mais c'est un peu compliqué :
    J'ai une cellule contenant plusieurs mots séparés par des retours chariot.
    Je souhaite utiliser la méthode find pour chercher chacun de ces mots dans une autre feuille.
    Mais quand je fais what:=là_ou_se_trouve_la_cellule_avec_les_retours_chariot la méthode find ne cherche que le premier mot de ladite cellule.
    Comment chercher les autres ?

    Merci d'avance (en espérant avoir été clair).

  2. #2
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Montre nous ce que cela donne dans ton code car en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim c As Range
    Set c = Range("A1:B10").Find("Hello")
    MsgBox c.Address
    Avec un cellule contenant
    Hel
    Hello
    Bob
    j'ai son adresse qui s'affiche sans aucun problème


    Rassure moi tu remplace
    là_ou_se_trouve_la_cellule_avec_les_retours_chariot
    Par un des mot de la cellule pas par son adresse ou autre chose?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 50
    Points : 36
    Points
    36
    Par défaut
    Mon problème à moi c'est l'inverse :

    Mettons que j'ai dans la cellule B12 (peu importe) :

    dans une cellule.

    Je souhaite chercher Hel dans une autre feuille, après chercher Hello toujours dans cette autre feuille, et enfin chercher Bob toujours dans cette autre feuille.

    Cependant, je ne veux pas écrire (je simplifie, ce n'est pas du code) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    find("Hel")
    find("Hello")
    find("Bob")
    Ce que je veux, c'est chercher ces mots à partir de la cellule où ils se trouvent. J'ai donc écrit (toujours en simplifiant) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find(what:=adresse_de_B12)
    ce qui va chercher seulement Hel.

    Ma question est : comment chercher ensuite Hello puis Bob ?

    (Suis-je clair ? Pas facile à expliquer...)

  4. #4
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Tu peux pas lui dire de chercher chaque mot d'une cellule comme ca je suis déjà étoné que tu obtienne quelque chose

    Voila un code pour essayer d'avancer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim i As Long
    Dim c As Range
    Dim tableau() As String
    tableau = Split(Range("B1"), Chr(10))
    For i = 0 To UBound(tableau)
    Set c = Range("A1:A10").Find(tableau(i))
    MsgBox c.Address
    Next i

    Mon Hel
    Hello HELLO sont en cellule B2
    et jes les ai mis séparément dans ma colonne A
    Le chr(10) ets le caractère de retour a la ligne pour le connaitre j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Asc(Mid(Range("B1"), 4, 1))
    puisqu'il été en 4ème position

    Je découpe le contenu de la cellule avec split tableau(0) contient le premier mot, tableau(1) le deuxième,.... les mot sont les morceaux séparé par un retour a la ligne s'il y a plusieur mots par ligne tu peux encore découpé les tableau (i)

    Ensuite je fait une recher par élément de tableau.

    Dans ce code je n'ai aucune gestion des répétition ou de la possibilité de ne par trouvé je te laisse rajouté cela. Mais au moins tu a la base. Découper le contenu de ta cellule ligne par ligne et faire des recherche une ligne a la fois

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 50
    Points : 36
    Points
    36
    Par défaut
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    Sub pcm_to_pdv()
     
        Dim PDVrefobj As Object
        Dim PCMobj As Object
        Dim PDVobj As Object
        Dim obj As Object
        Dim test1 As Object
        Dim lot_id As String
        Dim s1 As String
        Dim i As Integer
        i = 0
     
        Set PDVrefobj = Range(Cells(1, 1).End(xlDown), Cells(1, 1).End(xlToRight))
        Application.Workbooks.Open (Application.GetOpenFilename)
     
        Set PCMobj = Range(Cells(2, 1).End(xlDown), Cells(2, 1).End(xlToRight))
     
        Set obj = PCMobj.Find(What:="lot_id", LookAt:=xlPart)
        If Not (obj Is Nothing) Then
            lot_id = PCMobj.Cells(obj.Row, obj.Column).Offset(5, 0).Value
        Else
            lot_id = "No_lot_id"
        End If
     
        PCMobj.EntireColumn.AutoFit
        ActiveSheet.Name = lot_id
     
        Sheets.Add After:=ActiveSheet
        ActiveSheet.Name = lot_id & "_ok"
        PCMobj.Copy (Cells(1, 1))
     
        Set PCMobj = Range(Cells(1, 1).End(xlDown), Cells(1, 1).End(xlToRight))
        Set obj = PCMobj.Range(Cells(1, 1), Cells(1, PCMobj.Columns.Count))
     
        For Each thing In obj
            If PCMobj.Cells(2, thing.Column).Value <> " " Then
                If PCMobj.Cells(2, thing.Column).Value <> "" Then
                    If PCMobj.Cells(2, thing.Column).Value <> "Key" Then
                        thing.Value = PCMobj.Cells(2, thing.Column) & Chr(10) & PCMobj.Cells(3, thing.Column) & Chr(10) & PCMobj.Cells(4, thing.Column)
                    End If
                End If
            End If
        Next
     
        PCMobj.Rows(2).Delete: PCMobj.Rows(2).Delete: PCMobj.Rows(2).Delete:
        PCMobj.Rows(1).VerticalAlignment = xlTop
        PCMobj.Rows(1).AutoFit
        PCMobj.EntireColumn.AutoFit
     
        Set PDVobj = Range(Cells(1, PCMobj.Columns.Count + 1), Cells(PCMobj.Rows.Count, PCMobj.Columns.Count + 32))
     
        i = i + 1
        PDVobj.Cells(1, i).Value = PDVrefobj.Cells(i, 1).Value
        Set test1 = PCMobj.Find(What:=PDVrefobj.Cells(i, 3).Value, LookAt:=xlPart)
        If Not (test1 Is Nothing) Then
            s1 = test1.Offset(1, 0).Address(RowAbsolute:=False)
            PDVobj.Cells(2, i).Value = "=IF(ISBLANK(" & s1 & "),""""," & s1 & "/57)"
            PDVobj.Cells(2, i).AutoFill Destination:=PDVobj.Range(Cells(2, i), Cells(PDVobj.Rows.Count, i)), Type:=xlFillDefault
        Else
            PDVobj.Cells(2, i).Value = "EAL00014 not found"
            PDVobj.Cells(2, i).AutoFill Destination:=PDVobj.Range(Cells(2, i), Cells(PDVobj.Rows.Count, i)), Type:=xlFillDefault
        End If
     
    End Sub
    Ca marche très bien. Seulement je ne sais pas comment faire une recherche à partir des autres mots qui se trouvent dans PDVrefobj.Cells(i, 3).

    Je pense qu'il y a une astuce simple, mais je ne vois pas laquelle...

  6. #6
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Je ne vois pas ou tu utilise le code que je t'ai donnée
    Il faut que tu découpe le contenue de ta cellule a l'aide de la fonction split, dans la "vecteur" tableau tu as pour chaque "ligne" un des mot de ta cellule. Et ensuite tu fait une recherche dans la boucle qui parcoure les ligne de tableau.

    Teste la macro que je t'ai donné en mode pas a pas en faisant dans le menue affichage, afficher les variable local. Et regarde un peu le contenu de tableau et des autres variables.

    Une fois que tu a compris comment cela fonctionne essaye de l'adapter a ton code. Mais c'est sur que si tu n'utilise pas les codes que l'on te donne ton problème ne va pas avancer L'astuce ou du moins une astuce, peut être pas la plus simple tu l'as déjà

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

Discussions similaires

  1. [XL-2007] Découpage de cellules contenant des retours chariots
    Par steelk dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 17/10/2014, 13h55
  2. Réponses: 0
    Dernier message: 22/02/2012, 17h23
  3. Réponses: 0
    Dernier message: 18/11/2008, 21h29
  4. Réponses: 2
    Dernier message: 16/11/2008, 16h09

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