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 :

Erreur de syntaxe dans une condition


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Points : 33
    Points
    33
    Par défaut Erreur de syntaxe dans une condition
    Voici ma ligne de code ou j'e rencontre un bug à cause d'une erreur de syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Right(sh.Range("am" & i), Len(sh.Range("am" & i).Value) - 3).Value = sh2.Range("aa" & j).Value Then
    Je pense que j'ai un problème au niveau du -3. Je voudrais que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Right(sh.Range("am" & i), Len(sh.Range("am" & i).Value) - 3).Value
    me renvoit le contenu de la cellule "am" mais sans les trois premières lettres (il s'agit d'un code ( ex: REF324586 doit me renvoyer 324586).

    Quelqu'un pourrait-il me donner une correction svp? Merci

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,
    Essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Mid(sh.Range("am" & i), 4) = sh2.Range("aa" & j).Value Then
    Pour exemple tu peux tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub test()
    MsgBox Mid("REF324586", 4)
    End Sub
    Ce qui va te renvoyer tout le contenu de ta cellule à partir du 4ème caractère et ceci peu importe la longueur de ta chaîne de caractères

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut derech

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Right(sh.Range("am" & i), Len(sh.Range("am" & i).Value) - 3).Value = sh2.Range("aa" & j).Value Then
    Then
    la syntaxe me semble bonne mais si ne nombre de caractères est inférieur à 3, Excel n'aime pas. Idem avec i ou j inférieur à 1
    De plus, il faut faire attention à ta comparaison : le texte "324586" ne sera pas égal au nombre 324586, maisn reconnaitra l'égalité avec CStr(324586)
    A+

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Points : 33
    Points
    33
    Par défaut
    J'ai essayé différentes possibilités mais ca ne fonctionne pas.
    Voici mon code entier

    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
    Sub test()
     
    Dim i As Double
    Dim j As Integer
    Dim derli As Double
    Dim derli2 As Integer
    Dim wk As Workbook
    Dim wk2 As Workbook
    Dim sh As Worksheet
    Dim sh2 As Worksheet
    Dim k As Integer
    k = 6
     
    Set wk = Workbooks("x.xls")
    Workbooks("x.xls").Activate
    Set sh = Worksheets("y")
    Set wk2 = Workbooks("xx.xls")
    Workbooks("xx").Activate
    Set sh2 = Worksheets("yy")
     
     
    Workbooks("x.xls").Activate
    derli = sh.Columns(1).Find("*", , , , , xlPrevious).Row
    Workbooks("xx.xls").Activate
    derli2 = sh2.Columns(1).Find("*", , , , , xlPrevious).Row
     
     
    Workbooks("x.xls").Activate
    For i = 2 To derli
        For j = 6 To derli2
        Workbooks("x.xls").Activate
            Dim tab1(1 To 8, 1 To 1) As Variant
                If Mid(Range("am" & i), 4) = CStr(sh2.Range("aa" & j).Value) Then
                tab1(1, 1) = Mid(sh.Range("Am" & i), 4).Value 
                tab1(2, 1) = sh.Range("s" & i).Value 
                tab1(3, 1) = sh.Range("bj" & i).Value 
                tab1(4, 1) = sh.Range("bs" & i).Value 
                tab1(5, 1) = sh.Range("da" & i).Value
                tab1(6, 1) = sh.Range("dl" & i).Value 
                tab1(7, 1) = sh.Range("dq" & i).Value 
                tab1(8, 1) = sh.Range("dr" & i).Value 
                k = k + 1
                End If
                wk2.Activate
                sh2.Activate
                Range(Cells(k, 86), Cells(k, 93)).Value = Application.Transpose(tab1)
                Next j
            Next i
     
    End Sub
    Donc ce code est censé faire la chose suivante:

    à partir du classeur x.xls, chercher dans la colonne "AM" des references (qui sont de la forme "ref321547" ) et trouver son homologue dans l'autre classeur "xx.xls" dans la colonne "AA" ou les ref sont de la forme entier ( ex: 321547"). Lorsque une ref identique est trouvée, copier certaines cellules de la ligne concernée dans l'autre classeur ("xx.xls").

    Je dois me planter au niveau des strings et des integers, ou bien lorsque je veux ne selectionner que 321547 au lieu de ref321547...ou bien encore lorsque je set mes classeurs et mes feuilles.

  5. #5
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    as tu essayé de convertir les 2 en valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If val(Right(sh.Range("am" & i), Len(sh.Range("am" & i).Value) - 3).Value) = val(sh2.Range("aa" & j).Value) Then
    NB : la syntaxe de ton code avec mid est incorrect, il manque un paramètre
    mid(texte, debut, longueur)

  6. #6
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Citation Envoyé par jfontaine Voir le message

    NB : la syntaxe de ton code avec mid est incorrect, il manque un paramètre
    mid(texte, debut, longueur)
    Bonjour,
    Non il ne manque pas de paramètre, si tu ne précises pas la longueur, il prend toute la longueur à partir du paramètre "début"

    dans son cas, Mid(texte, début) est suffisant ce qui permet de fonctionner aussi bien pourREF1, que REF302, que REF30256 ou que REF30256897412

  7. #7
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    meaculpa

  8. #8
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Points : 33
    Points
    33
    Par défaut
    Merci pour votre aide, finalement voici mon code qui fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Right(Range("am" & i), Len(Range("am" & i).Value) - 3) = CStr(sh2.Range("aa" & j).Value) Then

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

Discussions similaires

  1. Erreur de syntaxe dans une requete SQL
    Par fikou dans le forum VB.NET
    Réponses: 5
    Dernier message: 26/07/2007, 17h14
  2. Erreur de syntaxe dans une requête SQL
    Par amnesias dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/01/2007, 12h50
  3. [Mail] Erreur de codage dans une condition
    Par Damned Poc dans le forum Langage
    Réponses: 4
    Dernier message: 05/11/2006, 00h29
  4. [SQL] erreur de syntaxe dans une requete
    Par einsteineuzzz dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 15/06/2006, 09h24
  5. Erreur de syntaxe dans une requete
    Par linou dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/08/2005, 12h44

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