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 :

CODE et MID dans formule VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 260
    Par défaut CODE et MID dans formule VBA
    Bonjour à tous,

    Ce que je souhaite faire:
    Appliquer une validation de données dans une colonne de table (Tab_CSV) fraichement ajoutée par l'utilisateur.
    Format accepté: nombre/nombre ou */nombre
    ex: 1/2 ou 1/2154 ou 5454/11 ou */5 ou */21
    La fonction wColNm transforme un numéros de colonne en lettre de colonne.
    snewColAddress contient l'adresse de la première ligne de la nouvelle colonne de ma table (ex: $G11 => je récupère sous ce format de façon à ce que la validation soit faite sur toute la colonne de la table).

    Ce qui plante:

    La ligne rouge dans la formule ligne 17 provoque l'erreur 1004 (inutile de lire tout le code que j'ai posté)

    Je ne comprends pas pourquoi... sachant que tout le reste de la formule marche...

    Voici les 3 blocs de codes dans la formule complète:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ISNUMBER(SEARCH(""/"",  " & snewColAddress & "))
    ==> vérifie la présence du /
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      OR(ISNUMBER(1*MID(" & snewColAddress & ",1,1*(SEARCH(""/""," & snewColAddress & ")-1))),  CODE(1*MID(" & snewColAddress & ",1,1*(SEARCH(""/""," & snewColAddress & ")-1)))=42)
    ==> vérifie qu'on a soit un nombre soit un * à gauche du /
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ISNUMBER(1*MID(" & snewColAddress & ",1*(SEARCH(""/""," & snewColAddress & ")+1),LEN(" & snewColAddress & ")))
    ==> vérifie qu'on a un nombre à droite du /

    Je fais donc un:
    ET(CODE1, CODE2, CODE3)


    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
    If gnCols_1 < nCols Then
                 Usfrm_CalibSelection.Show
                 snewColName = gTypeCalib & "/" & gNameCalib
                 Rheader(Target.Column - Rcsv.Column + 1) = snewColName
                 Set RnewCol = Tab_CSV.ListColumns(snewColName).DataBodyRange
                 ' On récupère l'addresse en format type $H11 par exemple (si les données de la nouvelles colonne commencent en H11).
                 ' Il y a un $ devant le H mais pas devant le 11, de manière à ce que la validation soit récursive sur toute la colonne du tableau
                 snewColAddress = "$" & wColNm(RnewCol.Column) & RnewCol.Row
                 With RnewCol
                    .NumberFormat = "@"
                    With .Validation
                      .Delete
                      .Add _
                           Type:=xlValidateCustom, _
                           AlertStyle:=xlValidAlertStop, _
                           Operator:=xlBetween, _
                           Formula1:="=IF(AND(ISNUMBER(SEARCH(""/"",  " & snewColAddress & ")),   OR(ISNUMBER(1*MID(" & snewColAddress & ",1,1*(SEARCH(""/""," & snewColAddress & ")-1))),    CODE(1*MID(" & snewColAddress & ",1,1*(SEARCH(""/""," & snewColAddress & ")-1)))=42   ) ,    ISNUMBER(1*MID(" & snewColAddress & ",1*(SEARCH(""/""," & snewColAddress & ")+1),LEN(" & snewColAddress & ")))               ),true,false)"
                           
                                                      
                          
                    End With
                 End With
            End If

  2. #2
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 260
    Par défaut
    J'ai résolu mon problème de manière sale en remplaçant le bloc 2 par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OR(ISNUMBER(1*MID(" & snewColAddress & ",1,1*(SEARCH(""/""," & snewColAddress & ")-1))),    AND(MID(" & snewColAddress & ",1,1)=""*"",  MID(" & snewColAddress & ",2,1)=""/"")

    La fonction Search renvoie la première occurrence donc je retombe sur mes pattes.

Discussions similaires

  1. [XL-2007] Recherche mot dans formule (VBA)
    Par XceSs dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/01/2014, 04h16
  2. [XL-2010] Pblm code sur fichier dans macro VBA
    Par Anna_2013 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/06/2013, 00h53
  3. [XL-2007] Résulats différents avec Datdif dans formule Excel et Datediff en VBA ?
    Par Jay29 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/10/2009, 16h12
  4. Référence dans formule Excel depuis VBA
    Par Neosquall2 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/09/2008, 09h09
  5. [VBA-E]date dans formule
    Par illight dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/06/2006, 11h16

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