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 :

Formule Excel ok mais VBA non exécutable


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Formule Excel ok mais VBA non exécutable
    Bonjour à tous,

    Voilà mon défis, j'ai mis en place une formule (avec des recherchev, fonction si, concatener, stxt) qui marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(RECHERCHEV($B23;CONVERT!$1:$1048576;10;FAUX)="CDR";"MAILLING000DTRCDR";SI(RECHERCHEV($B23;CONVERT!$1:$1048576;10;FAUX)="SND";"MAILLING000DTRSND";SI(RECHERCHEV($B23;CONVERT!$1:$1048576;10;FAUX)="ELE";"MAILLING000DTRELE";SI(RECHERCHEV($B23;CONVERT!$1:$1048576;10;FAUX)="FTV";"MAILLING000FTV";CONCATENER(STXT(RECHERCHEV(B23;CONVERT!$1:$1048576;5;FAUX);1;8);RECHERCHEV($B23;CONVERT!$1:$1048576;16;FAUX);RECHERCHEV($B23;CONVERT!$1:$1048576;17;FAUX);"DTR";RECHERCHEV($B23;CONVERT!$1:$1048576;10;FAUX))))))
    Vu que je suis débutant en vba, j'ai bidouillé quelque chose (voir ci-dessous) en enregistrant une macro dans laquelle j'ai utilisé la formule sur la feuille et étirée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     Range("C23").Select
        ActiveCell.FormulaR1C1 = _
            "=IF(VLOOKUP(RC2,CONVERT!R1:R1048576,10,FALSE)=""CDR"",""MAILLING000DTRCDR"",IF(VLOOKUP(RC2,CONVERT!R1:R1048576,10,FALSE)=""SND"",""MAILLING000DTRSND"",IF(VLOOKUP(RC2,CONVERT!R1:R1048576,10,FALSE)=""ELE"",""MAILLING000DTRELE"",IF(VLOOKUP(RC2,CONVERT!R1:R1048576,10,FALSE)=""FTV"",""MAILLING000FTV"",CONCATENATE(MID(VLOOKUP(RC[-1],CONVERT!R1:R1048576,5,FALSE),1,8),VLOOK" & _
            "ONVERT!R1:R1048576,16,FALSE),VLOOKUP(RC2,CONVERT!R1:R1048576,17,FALSE),""DTR"",VLOOKUP(RC2,CONVERT!R1:R1048576,10,FALSE))))))"
            Range("C23").Select
        Selection.AutoFill Destination:=Range("C23:C200"), Type:=xlFillDefault
        Range("C23:C200").Select
    Je veux que cette formule s'applique à partir de la cellule C23 jusqu'à C200.

    Pouvez-vous réussir à programmer cette fonction?
    nb: Fichier avec la macro dans "MAJ Classeur1.xls" -> MAJ Classeur1.xls

    Merci par avance de votre aide

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour,

    en utilisant l'Enregistreur de macros, le code est fourni sur un plateau !

  3. #3
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour

    En utilisant formulalocal, la formule a utiliser sous VBA reste identique a celle utilisé sur la feuille excel, ce qui donnerait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("C23").Formulalocal = _
    =SI(RECHERCHEV($B23;CONVERT!$1:$1048576;10;FAUX)="CDR";"MAILLING000DTRCDR";SI(RECHERCHEV($B23;CONVERT!$1:$1048576;10;FAUX)="SND";"MAILLING000DTRSND";SI(RECHERCHEV($B23;CONVERT!$1:$1048576;10;FAUX)="ELE";"MAILLING000DTRELE";SI(RECHERCHEV($B23;CONVERT!$1:$1048576;10;FAUX)="FTV";"MAILLING000FTV";CONCATENER(STXT(RECHERCHEV(B23;CONVERT!$1:$1048576;5;FAUX);1;8);RECHERCHEV($B23;CONVERT!$1:$1048576;16;FAUX);RECHERCHEV($B23;CONVERT!$1:$1048576;17;FAUX);"DTR";RECHERCHEV($B23;CONVERT!$1:$1048576;10;FAUX))))))
     Range("C23").AutoFill Destination:=Range("C23:C200"), Type:=xlFillDefault
    Plus compréhensible lorsque l'on a pas l'habitude d'utiliser VBA. A part les select que j'ai nettoyé, quel est la difficulté que vous rencontré pour rendre cette macro opérationelle.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Comme mentionné ci-dessus, j'ai utilisé l'enregistreur macro mais elle n'est pas opérationnelle.

    Dans le module, lorsque j'exécute le programme (F5), il y a une fenêtre inscrit "Erreur d'exécution '1004': Erreur définie par l'application ou par l'objet".
    Lorsque je clique sur "Débogage", ça me surligne en jaune le programme suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        ActiveCell.FormulaR1C1 = _
            "=IF(VLOOKUP(RC2,CONVERT!R1:R1048576,10,FALSE)=""CDR"",""MAILLING000DTRCDR"",IF(VLOOKUP(RC2,CONVERT!R1:R1048576,10,FALSE)=""SND"",""MAILLING000DTRSND"",IF(VLOOKUP(RC2,CONVERT!R1:R1048576,10,FALSE)=""ELE"",""MAILLING000DTRELE"",IF(VLOOKUP(RC2,CONVERT!R1:R1048576,10,FALSE)=""FTV"",""MAILLING000FTV"",CONCATENATE(MID(VLOOKUP(RC[-1],CONVERT!R1:R1048576,5,FALSE),1,8),VLOOK" & _
            "ONVERT!R1:R1048576,16,FALSE),VLOOKUP(RC2,CONVERT!R1:R1048576,17,FALSE),""DTR"",VLOOKUP(RC2,CONVERT!R1:R1048576,10,FALSE))))))"
    Merci de voir

  5. #5
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    ! Plus pratique pour indiquer le n° d'une ligne en erreur …

    Il y a donc une faute dans le code, donc reprendre de zéro depuis la feuille en ré-entrant la formule
    tout en utilisant l'Enregistreur de macros …

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Cher Marc,

    Je me suis rendu compte qu'il y avait une faute, j'ai refais la manip plusieurs fois mais à chaque fois c'est le même problème.

    J'ai mis le fichier avec la macro dans "MAJ Classeur1.xls" juste à l'instant.

    Merci

  7. #7
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Si la formule fonctionne et si la recopie manuelle vers le bas ne pose pas de souci, alors en VBA via AutoFill non plus !

    Sinon le problème est peut-être mal présenté … Et quid de la proposition de keygen08 ?!

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Marc,

    Merci pour votre réactivité.

    A vrai dire, dans mon fichier original, j'ai beaucoup de données avec plusieurs onglets.

    Cette macro fait partie d'UNE seule macro exécutant plusieurs codes.

    J'espère avoir été assez clair

  9. #9
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour

    j'aurai une autre approche a proposé, jeté cette vilaine formule a la poubelle et tous faire en VBA avec ceci

    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
    Sub nouvelle()
    Dim cell As Range
    For Each cell In Range("b23:b" & [b65000].End(xlUp).Row)
    Set valeur = Sheets("convert").Columns(1).Find(cell.Value, LookIn:=xlValues)
    Select Case valeur.Offset(0, 9).Value
        Case "CDR", "SND", "ELE"
        cell.Offset(0, 1) = "MAILLING000DTR" & valeur.Offset(0, 9).Value
        Case "FTV"
        cell.Offset(0, 1) = "MAILLING000" & valeur.Offset(0, 9).Value
        Case Else
        a = Left(valeur.Offset(0, 4).Value, 8)
        cell.Offset(0, 1) = Left(valeur.Offset(0, 4), 8) & valeur.Offset(0, 15) & valeur.Offset(0, 16) & "DTR" & valeur.Offset(0, 9)
        End Select
    Next cell
     
    End Sub
    Integrable dans n'importe quel autre code. Le resultat est conditionné a la lecture que j'ai faite de votre formule magique.

  10. #10
    Membre habitué
    Homme Profil pro
    Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Inscrit en
    Novembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 63
    Points : 169
    Points
    169
    Par défaut
    Bonjour,

    Le code tel que tu le voulais avec l'enregistreur de macro :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub macro()
     
        Range("C23").Select
        ActiveCell.FormulaR1C1 = _
            "=IF(VLOOKUP(RC2,CONVERT!C[-2]:C[7],10,FALSE)=""CDR"",""MAILLING000DTRCDR"",IF(VLOOKUP(RC2,CONVERT!C[-2]:C[7],10,FALSE)=""SND"",""MAILLING000DTRSND"",IF(VLOOKUP(RC2,CONVERT!C[-2]:C[7],10,FALSE)=""ELE"",""MAILLING000DTRELE"",IF(VLOOKUP(RC2,CONVERT!C[-2]:C[7],10,FALSE)=""FTV"",""MAILLING000FTV"",CONCATENATE(MID(VLOOKUP(RC[-1],CONVERT!C[7],5,FALSE),1,8),VLOOKUP(RC2,CONVERT!C[7],16,FALSE),VLOOKUP" & _
            "(RC2,CONVERT!C[7],17,FALSE),""DTR"",VLOOKUP(RC2,CONVERT!C[-2]:C[7],10,FALSE))))))"
            Range("C23").Select
        Selection.AutoFill Destination:=Range("C23:C200"), Type:=xlFillDefault
        Range("C23:C200").Select
     
    End Sub
    Il fallait revoir la formule initialement entrée sur ta feuille et pour laquelle il manquait des infos ("CONVERT!$1:$1048576" au lieu de "CONVERT!A:J").

    Ensuite, lorsque tu enregistre une formule assez longue via l'enregistreur, celle-ci se retrouve coupée au niveau du passage à la ligne.
    Il faut donc veiller à rajouter le code manquant, ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VLOOK" & _"ONVERT!C[7],17,FALSE)
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "VLOOKUP" & _"(RC2,CONVERT!C[7],17,FALSE)"
    Finalement, ta formule ne prends pas en compte les #N/A pourtant rencontrés dans ton exemple.
    Je te conseille donc de la modifier ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "=IF(ISNA(VLOOKUP(RC2,CONVERT!C[-2]:C[7],10,FALSE)),""Valeur non trouvée"",IF(VLOOKUP(RC2,CONVERT!C[-2]:C[7],10,FALSE)=""CDR"",""MAILLING000DTRCDR"",IF(VLOOKUP(RC2,CONVERT!C[-2]:C[7],10,FALSE)=""SND"",""MAILLING000DTRSND"",IF(VLOOKUP(RC2,CONVERT!C[-2]:C[7],10,FALSE)=""ELE"",""MAILLING000DTRELE"",IF(VLOOKUP(RC2,CONVERT!C[-2]:C[7],10,FALSE)=""FTV"",""MAILLING000FTV"",CONCATENATE(MID(VLOOKUP(RC[-1],CONVERT!C[7],5,FALSE),1,8),VLOOKUP(RC2,CONVERT!C[7],16,FALSE),VLOOKUP" & _
            "(RC2,CONVERT!C[7],17,FALSE),""DTR"",VLOOKUP(RC2,CONVERT!C[-2]:C[7],10,FALSE)))))))"
    Néanmoins, privilégie le code de keygen08 s'il te donne le résultat escompté.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bonjour Chtik,

    J'ai essayé ce que tu as programmé, c'était presque parfait (^_-) !!!!

    Après 1 heure de bidouille (ci-dessous), ça a fonctionné. Il y avait juste la partie concatener qui posait problème, je pense que c'est dû à la sélection de la plage lors de la recherchev.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "=CONCATENATE(MID(VLOOKUP(RC[-1],CONVERT!R1:R65536,5,FALSE),1,8),VLOOKUP(RC2,CONVERT!R1:R65536,16,FALSE),VLOOKUP(RC2,CONVERT!R1:R65536,17,FALSE),""DTR"",VLOOKUP(RC2,CONVERT!R1:R65536,10,FALSE))"
    En tout cas fortement merci pour ton aide ainsi qu'à tout le monde.

    Bonne journée

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

Discussions similaires

  1. Formule Excel en code VBA
    Par enretard dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 10/11/2011, 16h19
  2. Exécution automatique d'une formule Excel à partir de VBA
    Par jumiara dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/11/2010, 13h13
  3. Formules excel écrites via VBA
    Par Loki83 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 20/11/2008, 09h58
  4. [E-00] Transcrire une formule Excel en script VBA
    Par ritournelle dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 16/10/2008, 12h53
  5. Transformé une formule Excel en script VBA ?
    Par SFLEY dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 06/01/2007, 12h48

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