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 :

Formula1: error 1004


Sujet :

Macros et VBA Excel

  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 Formula1: error 1004
    Bonjour à tous,

    Ce que je veux faire:

    Je dois entrer en VBA une formule de validation des données dans une nouvelle colonne d'une Table (validation active sur toutes les cellules de la nouvelle colonne).
    Donc lorsque l'utilisateur rentre une valeur dans une cellule de cette nouvelle colonne de cette table, cela vérifira le forma suivant:
    Format accepté: nombre/0 ou nombre/1 ou */0 ou */1 et les nombres peuvent être des chiffres à virgule (125454.12) avec un point comme séparateur... là aussi je n'ai pas trouvé comment faire...
    ex: 5454/0 ou 12/1 ou */0

    Je veux rentrer cette formule de validation en VBA dans le code, sans passer par la validation des données d'Excel (la colonne étant ajoutée dynamiquement par l'utilisateur).

    Ci-dessous la colonne "param_eceu/Cxx1_gear_rat_tgt" ajoutée avec sa validation des données (j'essaye de rentrer une valeur non permise)
    Pièce jointe 433714

    ************************************************************************************
    Concentrons-nous durant cette étude sur la détection du zéro à la fin, après le /


    Voici mon soucis:

    Ce code marche:
    On vérifie ci-dessous la présence du "/" dans les données saisies (voir la ligne Formula1).
    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
     
    ' Ajout d'une colonne de calibration
            If gnCols_1 < ncols Then
                 Usfrm_CalibSelection.Show
                 snewColName = 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 = "@" ' On met au format texte sinon le format 4/3 sera pris comme une date
                    ' Le format accepté sera:
                    ' - nombre/nombre ou
                    ' - */nombre
                    With .Validation
                      .Delete
                      .Add _
                           Type:=xlValidateCustom, _
                           AlertStyle:=xlValidAlertStop, _
                           Operator:=xlBetween, _
                           Formula1:="=IF(ISNUMBER(SEARCH(""/"",  " & snewColAddress & ")) ,true,false)" ' cette formule marche !!!
     
                    End With
                 End With
            End If


    Cette formule marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            Formula1:="=IF(RIGHT(" & snewColAddress & ", 2)=""0"" ,true,false)"
    Cette formule ne marche pas, apparemment c'est le Search dans la formule qui sème la pagaille, alors qu'il marche dans le premier exemple..... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            Formula1:="=IF(RIGHT(" & snewColAddress & ", SEARCH(""/"",  " & snewColAddress & "))=""0"" ,true,false)"
    Ne marche pas (erreur 1004):
    C'est pourtant ce que je souhaite faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
                           Formula1:="=IF(RIGHT(" & snewColAddress & ", LEN(" & snewColAddress & ")-SEARCH(""/""," & snewColAddress & "))=""0"" ,true,false)"

    Pourquoi ?

  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
    Apparemment ce sont les opérations dans les formules qui plantent.

    Ceci marche:
    Mais ne sert à rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Formula1:="=IF(RIGHT(" & snewColAddress & ", LEN(" & snewColAddress & ")   )=""0"" ,true,false)"

    Ne marche pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Formula1:="=IF(RIGHT(" & snewColAddress & ", LEN(" & snewColAddress & ") -5  )=""0"" ,true,false)"
    Ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Formula1:="=IF(RIGHT(" & snewColAddress & ", SEARCH(""/""," & snewColAddress & "  ))=""0"" ,true,false)"
    Donc la fonction Search me boude ici !!! mais pourquoi ??

  3. #3
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    Ta demande est incompréhensible au moins pour moi ... tu cherche à exiger une forme : xxxx/1 ou xxxxx/0 lors de la saisie d'un textbox ou quoi ??
    ou bien tu as une colonne avec des données de format xxxxx/1 et xxxx/0 et tu veux extraire ce dernier chiffre??? Un problème bien posé est un problème à moitié résolu

  4. #4
    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 reformulé ma question plus précisément..
    Ce n'est pas une txtbox, mais une cellule d'une table.
    Lorsque l'utilisateur ajoute une colonne dans la table, ca lance un évènement qui va appeler ce code de manière à rentrer une formule de validation des données pour toutes les cellules de cette nouvelle colonne.

    Le format accepté est : nombre/0 ou nombre/1 ou */0 ou */1
    ex:
    121454545/0
    5/0
    1/1
    1/0
    245/1
    */1
    */0

    J'ai réussi à tout faire, sauf la détection du 0 ou du 1 à la fin..... j'ai une erreur 1004. C'est incompréhensible.

  5. #5
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonsoir
    à adapter et à essayer avec (ça concerne la colonne A):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Application.Intersect(Target, Columns(1)) Is Nothing Then Exit Sub
    If Target.Value <> "" Then
    Liste = Array("/1", "/0")
    If Not IsNumeric(Application.Match(CStr(Right$(Target.Value, 2)), Liste, 0)) Then
    MsgBox "Format non valide ! "
    Target.Value = ""
    End If
    End If
    End Sub

  6. #6
    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
    Merci mais je ne souhaite pas procéder à une vérification évènementielle à chaque saisie.
    Je souhaite rentrer directement, en une fois, une formule de validation des données pour toute la colonne.

    Voici une formule complète qui marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Formula1:="=IF(AND(ISNUMBER(SEARCH(""/"",  " & snewColAddress & ")),   OR(ISNUMBER(1*MID(" & snewColAddress & ",1,1*(SEARCH(""/""," & snewColAddress & ")-1))),    AND(MID(" & snewColAddress & ",1,1)=""*"",  MID(" & snewColAddress & ",2,1)=""/"")     ) ,        ISNUMBER(1*MID(" & snewColAddress & ",1*(SEARCH(""/""," & snewColAddress & ")+1),LEN(" & snewColAddress & ")-SEARCH(""/""," & snewColAddress & ")))               ),true,false)"
    Cette formule se décompose ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF (AND (PRESENCE_FLASH   , OU (NOMBRE_A_GAUCHE_DU_FLASH , AND(ASTERIX_EN_POS_1, FLASH_EN_POS_2))   , NOMBRE_A_DROITE_DU_FLASH))
    PRESENCE_FLASH :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ISNUMBER(SEARCH(""/"",  " & snewColAddress & "))
    NOMBRE_A_GAUCHE_DU_FLASH:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ISNUMBER(1*MID(" & snewColAddress & ",1,1*(SEARCH(""/""," & snewColAddress & ")-1)))
    ASTERIX_EN_POS_1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MID(" & snewColAddress & ",1,1)=""*""
    FLASH_EN_POS_2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MID(" & snewColAddress & ",2,1)=""/""
    NOMBRE_A_DROITE_DU_FLASH:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ISNUMBER(1*MID(" & snewColAddress & ",1*(SEARCH(""/""," & snewColAddress & ")+1),LEN(" & snewColAddress & ")-SEARCH(""/""," & snewColAddress & ")))
    Mais je répète que si j'essaye de détecter le 0 ou le 1 à la fin (à la place d'un nbre qqnque), ça plante !! (voir premier message)

  7. #7
    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
    Il s'agit donc de formules....

  8. #8
    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
    Pour finir, à présent quelque soit la formule rentrée dans le code ,j'ai l'erreur 1004.......

    Nom : Capture7.PNG
Affichages : 533
Taille : 41,2 Ko

  9. #9
    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
    Toujours personne pour m'aider à faire ça ?

    J'ai toujours cette satanée erreur 1004, et VBA ne dit bien sûr pas d'où vient le problème.... piètre débugger....

    Je veux détecter le 0 après le /.

    Ceci plante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MID(" & snewColAddress & ",1*(SEARCH(""/""," & snewColAddress & ")+1),LEN(" & snewColAddress & ")-SEARCH(""/""," & snewColAddress & "))=""0""

Discussions similaires

  1. Run time error 1004 - Select method class failed
    Par fhuyet dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/07/2008, 11h18
  2. Excel 2003 - Run-time error '1004'
    Par GuyRo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/05/2008, 10h20
  3. error 1004 columns
    Par ouioui_cmoi dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 27/03/2008, 17h37
  4. [VBA-E] Run-time error 1004, pourquoi ?
    Par Capsule dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 25/01/2007, 22h12
  5. Excel - macro (format conditionnel - run-time error 1004)
    Par Chewi dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/09/2006, 19h18

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