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 :

[VBA-E]Problème avec la fonction [B]LIKE[/B]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Points : 55
    Points
    55
    Par défaut [VBA-E]Problème avec la fonction [B]LIKE[/B]
    Bonjour,

    J'ai un petit problème avec la fonction Like.

    Celle-ci me trouve d'autres données que celles que je recherche a cause d'une erreur dans une cellule.

    Je vous donne mon code et je m'explique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim Descr, valigne, l, c
        valigne = 6
            For Each Descr In Range("B1:B5")
            l = Descr.Row
            c = Descr.Column
                If UCase(Descr) Like "*DESC*" Then
                    valigne = Descr.Row
                        'reponse = MsgBox(meserror + " erreur à la ligne N°" & valigne & " colonne N°" & c, vbYesNo + vbCritical + vbDefaultButton2)
                    If reponse = vbNo Then Exit Sub
                End If
            Next
    Je cherche a trouver la donné "DESC" dans les cases "B1:B5" mais en ligne B2, j'ai une erreur de #REF qui sera résolue plus loin dans mon code. Cependant, je dois ajouter une ou plusieurs lignes avant de faire la màj de ma valeur en B2 (pour éviter de faire 2 fois le boulot et surtout que ce n'est pas focément en B2, mais peut-être en B3 ou B4).

    Pourquoi mon Like me trouve cette ligne dont la valeur est : "=CONCATENER("PIÈCE N° ";#REF!$C$6)". Ca n'a rien à voir avec mon "DESC"

  2. #2
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    déja, si ta formule c'est ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "=CONCATENER("PIÈCE N° ";#REF!$C$6)"
    C'est normal que ça te fasse une erreur

    Ensuite (mais je dis peut etre une betise), c'est parce qu'il y aune formule dans ta cellule, du coup ça trouve pas ta valeur car dans ta cellule il ne prend pas en compte le résultat de ta formule, mais la formule en elle meme

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Points : 55
    Points
    55
    Par défaut
    Le problème c'est que cette formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "=CONCATENER("PIÈCE N° ";#REF!$C$6)"
    est dans ma page excel pas dans mon VBA.


    Et plus tard, je la renomme cette formule en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "=CONCATENER("PIÈCE N° ";FORM!$C$6)"
    Chose qui marche très bien. Si je relance ma macro après avoir modifié à la main ma formule, je n'ai pas de problème, il ne s'arrete pas sur cette case.

    Et qu'il prenne en compte la formule ou le résultat de la formule, de toute façon, il n'y a jamais le mot DESC dedans.

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Change le nom de Dresc, dans
    For Each Descr In Range("B1:B5")
    ça peut peut-être venir de là (?) Je ne vois pas comment mais sait-on jamais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Cel In Range("B1:B5")
    par exemple...
    Tu ne parles pas d'erreur, mais si tu as une erreur sur la ligne, je me range à l'avis très autorisé d'illight

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par ouskel'n'or
    Change le nom de Dresc, dans
    ça peut peut-être venir de là (?) Je ne vois pas comment mais sait-on jamais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Cel In Range("B1:B5")
    par exemple...
    Tu ne parles pas d'erreur, mais si tu as une erreur sur la ligne, je me range à l'avis très autorisé d'illight

    Ca ne change absolument rien

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu as une erreur sur la ligne ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Points : 55
    Points
    55
    Par défaut
    Je viens de faire un test avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim Descr, valigne, l, c, test
        valigne = 6
            For Each Descr In Range("a1:d5")
            l = Descr.Row
            c = Descr.Column
            test = Descr.Value
                If UCase(test) Like "*DES*" Then
                    valigne = Descr.Row
                        reponse = MsgBox(meserror + " erreur à la ligne N°" & valigne & " colonne N°" & c, vbYesNo + vbCritical + vbDefaultButton2)
                    If reponse = vbNo Then Exit Sub
                End If
            Next
    En Pas a Pas, j'obtient une erreur "Erreur 2023" dans ma variable "test" ce qui me déclenche la formule Like et me la considère comme True

    Je nage complètement là.

    En fait....mon but de tout ça, est de tester si dans un range particulier, je n'ai pas "Description" ou approchant dans mes 5 premières lignes, au quel cas je vais insérer des lignes pour éviter d'éffaçer certaines données de ma feuilles.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Points : 55
    Points
    55
    Par défaut
    Bon, j'ai trouvé une parrade, mais c'est pas vraiment le top.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim Descr, valigne, l, c
        valigne = 6
            For Each Descr In Range("a1:d5")
            l = Descr.Row
            c = Descr.Column
                If Descr = Error(2023) Then GoTo enderror
                    If UCase(Descr) Like "*DES*" Then
                        valigne = Descr.Row
                            reponse = MsgBox(meserror + " erreur à la ligne N°" & valigne & " colonne N°" & c, vbYesNo + vbCritical + vbDefaultButton2)
                        If reponse = vbNo Then Exit Sub
                    End If
    enderror:
            Next
    J'ai rajouté ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Descr = Error(2023) Then GoTo enderror
    et voilà.

    Mais maintenant, il faut que je test ça avec 2-300 autres classeurs pour etre sur que c'est toujours la 2023 l'erreur. Donc, pour le moment il n'est pas encore totalement résolu mon problème.

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu as la solution On error resume next
    Si tu as une erreur, tu passes à la ligne suivante
    Risqué utilisé comme ça mais si tu testes le N° d'erreur en plus, ça devrait aller. Je reprends ton code
    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
    Dim Descr, valigne, l, c
        valigne = 6
        On error resume next
        For Each Descr In Range("a1:d5")
            l = Descr.Row
            c = Descr.Column
            If UCase(Descr) Like "*DES*" Then
                   if not err then
                       valigne = Descr.Row
                      elseif err <> 2023 then
                        Msgbox error(err) 'identifie une autre erreur
                   endif
            End If
            Err.clear
        Next
        On error goto 0

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Points : 55
    Points
    55
    Par défaut
    Ca ne marche pas, parce que excel ne fait pas d'erreur en fait, il donne juste la valeur "Erreur 2023" à mon Descr. Comme si c'était ce qui était marqué dans la cellule.

    Et le On error resume Next je l'avais déjà un peu plus haut.

    Vla le début de mon code au complêt.
    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
    Sub CHANGEMENT_GAMME_MACH1()
    '
    On Error Resume Next
    Application.ScreenUpdating = False
    Windows(nw).Activate
        Sheets("GAMME_MACH1").Select
        ActiveSheet.Unprotect
        ActiveSheet.Tab.ColorIndex = ONGLETGAMME
     
    100001: 'VERIFICATION DES LIGNES SI BESOINS
    meserror = ("!!!   ERREUR, LA LIGNE CONTENANT ""DESCRIPTION"" NE DOIT PAS SE TROUVER SUR LES 5 PREMIERES LIGNES.   !!!" + Chr(10) + Chr(10) + "   --=> CONTINUER ?" + Chr(10) + Chr(10))
     
    Dim Descr, valigne, l, c
        valigne = 6
            For Each Descr In Range("a1:d5")
            l = Descr.Row
            c = Descr.Column
                If Descr = Error(2023) Then GoTo enderror
                    If UCase(Descr) Like "*DES*" Then
                        valigne = Descr.Row
                            reponse = MsgBox(meserror + " erreur à la ligne N°" & valigne & " colonne N°" & c, vbYesNo + vbCritical + vbDefaultButton2)
                        If reponse = vbNo Then Exit Sub
                    End If
    enderror:
            Next
     
     
    100003: 'AJOUT DE CE QU'IL FAUT COMME LIGNE(S)
    Dim INS, lGn
    INS = (6 - valigne)
    lGn = ("1:" & INS)
     
        If INS <> 0 Then
            Rows(lGn).Select
                Selection.EntireRow.Insert 'Shift:=xlDown
        End If
     
    GoTo finsub
     
    (Suite du code sauté pour le moment)
     
     
    finsub:
    Application.ScreenUpdating = True
    End Sub

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ok, je comprends. Mais je ne mettrais pas de goto dans un boucle. Tu as vite fait de saturer la pile et de planter ton appli (et je parle d'Excel)
    Modifie ton code ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                If not Descr = Error(2023) Then
                    If UCase(Descr) Like "*DES*" Then
                        valigne = Descr.Row
                            reponse = MsgBox(meserror + " erreur à la ligne N°" & valigne & " colonne N°" & c, vbYesNo + vbCritical + vbDefaultButton2)
                        If reponse = vbNo Then Exit Sub
                    End If
               endif
            Next
    A+

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par ouskel'n'or
    Ok, je comprends. Mais je ne mettrais pas de goto dans un boucle. Tu as vite fait de saturer la pile et de planter ton appli (et je parle d'Excel)
    Oui, merci, j'ai modifié le code, mais ainsi, ta version me faisait la même chose que d'habitude.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    For Each Descr In Range("a1:d5")
            l = Descr.Row
            c = Descr.Column
                If Descr = Error(2023) Then
                Else
                    If UCase(Descr) Like "*DES*" Then
                        valigne = Descr.Row
                            reponse = MsgBox(meserror + " erreur à la ligne N°" & valigne & " colonne N°" & c, vbYesNo + vbCritical + vbDefaultButton2)
                        If reponse = vbNo Then Exit Sub
                    End If
                End If
            Next
    En espérant que ce sera toujours l'erreur 2023.

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ok, manquait sans doute des parenthèses. Ceci étant, l'espoir fait vivre.
    Il me semble que j'ai vu quelque part que #REF pouvait être testé mais je ne me souviens plus où ni dans quel contexte. Et je ne parles pas de instr(LaCellule,"REF") <> 0.
    Si je trouve quelque chose, je te dirai ça
    A+ et bonne chance

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Points : 55
    Points
    55
    Par défaut
    J'ai même pu mettre ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If UCase(Descr) Like "*ERROR*" Then
    qui marche très bien, ce que je comprend pas, c'est que le systeme arrive à identifier la variable Descr avec la valeur "Erreur" dedans, mais je ne peux pas l'utiliser dans un msgbox ?!??

    Bref, je vais arreter de me prendre la tête. La ça marche comme ça. J'éspère juste que je vais pouvoir faire la modif de mes 8000 classeurs à modifier.

    Merci beaucoup pour ton aide ouskel'n'or

    A+
    srame

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Voilà, j'ai testé cette formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(TYPE.ERREUR(Feuil5!D25)=4;"";Feuil5!D25)
    Type.erreur 4 = Erreur de réf. Tu trouves ça dans Excel.
    Suffit de modifier toutes tes formules
    Je n'ai pas mieux
    A+

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par ouskel'n'or
    Suffit de modifier toutes tes formules
    Je dois justement modifier toutes mes formules
    Remarque, j'aime autant avoir l'erreur écrite en fait.

    Merci

  17. #17
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Alors modifie "ma" formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(TYPE.ERREUR(Feuil5!D25)=4;"ERREUR ! NOM DE GU !";Feuil5!D25)

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

Discussions similaires

  1. [XL-2010] Problème avec les fonctions VBA String
    Par JOHN14 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/02/2011, 23h07
  2. [XL-2007] fonction vba excel problème avec hh:mm:ss
    Par chantalina dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/01/2010, 16h47
  3. [VBA-E]Problème avec la fonction Find
    Par Mirx1 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 27/04/2006, 19h43
  4. [VBA-E] problème avec la fonction print#
    Par phoon dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/03/2006, 10h51
  5. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 14h24

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