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 :

Création d'un code VBA pour automatiser le remplissage d'un fichier à partir d'autres fichiers


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur d'exploitation carrière
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur d'exploitation carrière
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Par défaut Création d'un code VBA pour automatiser le remplissage d'un fichier à partir d'autres fichiers
    Bonjour à tous,

    Je souhaite remplir automatiquement un fichier excel à partir d'autres. Jusque la rien de compliqué, cependant je souhaite que le chemin d’accès écrit dans mon code dépende d'une cellule qui contient elle même une date. Le code entré directement dans la cellule fonctionne, cependant je cherche à le faire passer sous une fonction en VBA pour éviter de faire des copier/coller et modifier au fur et à mesure.

    Je vous joins un screenshot en espérant que ce soit assez explicite

    Nom : Etat-du-fichier-.jpg
Affichages : 1085
Taille : 210,4 Ko

    J'ai écrit pour le moment le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
     
    Function Manu2(DAT,EQPT)
     
    Dim DAT as string 'DAT correspond à la date sous le format 2019_02_18
    Dim EQPT as string 'EQPT correspond à l'équipement de travail (Broyeur G2,Tapis roulés,...)
     
    If RECHERCHEV(IndirectEx("'J:\MATERIELS\Test\Essais rapports journaliers\[DAT Rapport journalier.xlsm]Numérique 2019'!EQPT");IndirectEx("'J:\MATERIELS\Test\Essais rapports journaliers\[DAT Rapport journalier.xlsm]Numérique 2019'!E$16:$I$25");2;)="Maintenance"
     
    Then Manu2(DAT,EQPT)=RECHERCHEV(IndirectEx("'J:\MATERIELS\Test\Essais rapports journaliers\[DAT Rapport journalier.xlsm]Numérique 2019'!EQPT");IndirectEx("'J:\MATERIELS\Test\Essais rapports journaliers\[DAT Rapport journalier.xlsm]Numérique 2019'!$E$16:$I$25");3;)
     
    Else Manu2(DAT,EQPT)=""
     
    End Function
    L’algorithme est plutôt simple :
    Si en recherchant dans le tableau la variable EQPT apparaît et que la 2ème colonne contient "Maintenance" alors afficher la durée.

    J'utilise IndirectEx pour prendre les données lorsque le rapport journalier est fermé.

    J'espère avoir été suffisamment clair, je suis novice dans le VBA donc je pense qu'il doit y avoir beaucoup de faute.

    Par avance, merci pour votre aide.

  2. #2
    Candidat au Club
    Homme Profil pro
    Ingénieur d'exploitation carrière
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur d'exploitation carrière
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Par défaut
    Quelqu'un pour m'aider svp?

    La formule indique #REF donc je pense qu'il y a un soucis dans le répertoire.

    Merci

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai juste parcouru en vitesse la lecture de ton code
    Il est impossible au VBA d'interpréter le code des lignes 8 et 10. En effet RECHERCHEV est inconnu pour lui.
    Les fonctions natives d'excel peuvent être exécutées avec la propriété WorksheetFunction de l'objet Application suivi du nom de la fonction (en anglais) et suivant la même syntaxe qu'avec Excel soit en utilisant la fonction Evaluate mais en écrivant la formule en anglais.

    Exemple de l'utilisation de la propriété WorksheetFunction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub t()
      Dim fx As WorksheetFunction
      Set fx = Application.WorksheetFunction
      MsgBox fx.Match("Alias", Range("db_Header"), 0)
    End Sub
    Même exemple avec la fonction Evaluate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub t()
      MsgBox Evaluate("=Match(""Alias"", db_Header, 0)")
    End Sub
    Pour les exemples, db_Header est une plage de cellules nommée
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Candidat au Club
    Homme Profil pro
    Ingénieur d'exploitation carrière
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur d'exploitation carrière
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Par défaut
    Bonjour,

    Ma macro est devenue :

    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
    Function Manu2(DAT, EQPT)
     
    Dim DAT As String 'DAT correpond à la date sous le format 2019_02_18
    Dim EQPT As String 'EQPT correpond à l'équipement de travail (Broyeur G2,Tapis roulés,...)
     
     
    Dim fx As WorksheetFunction
    Set fx = Application.WorksheetFunction
     
     
    If fx.VLookup((Workbooks("J:\MATERIELS\Test\Essais rapports journaliers\DAT Rapport journalier.xlsm").Sheets("Numérique 2019").Range("EQPT")), (Workbooks("J:\MATERIELS\Test\Essais rapports journaliers\DAT Rapport journalier.xlsm").Sheets("Numérique 2019").Range("E$16:$I$25")), 2, False) = "Maintenance" Then
     
    Manu2(DAT, EQPT) = fx.VLookup((Workbooks("J:\MATERIELS\Test\Essais rapports journaliers\DAT Rapport journalier.xlsm").Sheets("Numérique 2019").Range("EQPT")), (Workbooks("J:\MATERIELS\Test\Essais rapports journaliers\DAT Rapport journalier.xlsm").Sheets("Numérique 2019").Range("E$16:$I$25")), 2, False)
     
    Else: Manu2(DAT, EQPT) = ""
     
    End Function
    Mais cela ne marche toujours pas.
    Quand je tape =manu2("2019_02_18";"Broyeur 1152"), je me retrouve dans le debogueur avec le message "déclaration existante dans la portée en cours".

    Merci pour votre aide.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 242
    Par défaut
    Bonjour,

    Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function Manu2(DAT, EQPT)
     
    Dim DAT As String 'DAT correpond à la date sous le format 2019_02_18
    Dim EQPT As String 'EQPT correpond à l'équipement de travail (Broyeur G2,Tapis roulés,...)
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Manu2(DAT As String, EQPT As String)
    'DAT correpond à la date sous le format 2019_02_18
    'EQPT correpond à l'équipement de travail (Broyeur G2,Tapis roulés,...)
    En effet, DAT et EQPT sont déclarés directement dans la déclaration de la fonction, tu ne dois donc pas les re-déclarer via Dim dans le corps de la fonction.

  6. #6
    Candidat au Club
    Homme Profil pro
    Ingénieur d'exploitation carrière
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur d'exploitation carrière
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Par défaut
    Merci le défaut est enlevé, malheureusement ça ne marche toujours pas, je pense que c'est un problème de répertoire...
    Dans la cellule est affiché "#VALEUR!"

    Je n'ai trouvé aucun sujet qui traitait de mettre en variable une partie d'un chemin d’accès à un fichier.

    Code actuel :

    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
    Function Manu2(DAT As String, EQPT As String)
     
    'DAT correpond à la date sous le format 2019_02_18
    'EQPT correpond à l'équipement de travail (Broyeur G2,Tapis roulés,...)
     
     
    Dim fx As WorksheetFunction
    Set fx = Application.WorksheetFunction
     
     
    If fx.VLookup((Workbooks("J:\MATERIELS\Test\Essais rapports journaliers\DAT Rapport journalier.xlsm").Sheets("Numérique 2019").Range("EQPT")), (Workbooks("J:\MATERIELS\Test\Essais rapports journaliers\DAT Rapport journalier.xlsm").Sheets("Numérique 2019").Range("E$16:$I$25")), 2, False) = "Maintenance" Then
     
    Manu2(DAT, EQPT) = fx.VLookup((Workbooks("J:\MATERIELS\Test\Essais rapports journaliers\DAT Rapport journalier.xlsm").Sheets("Numérique 2019").Range("EQPT")), (Workbooks("J:\MATERIELS\Test\Essais rapports journaliers\DAT Rapport journalier.xlsm").Sheets("Numérique 2019").Range("E$16:$I$25")), 2, False)
     
    Else: Manu2(DAT, EQPT) = ""
    End If
     
    End Function

Discussions similaires

  1. Soucis Code VBA pour copie de données d'un fichier xls vers un autre xls
    Par Jafar123 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/05/2018, 15h37
  2. Réponses: 5
    Dernier message: 16/10/2017, 14h57
  3. Réponses: 2
    Dernier message: 23/11/2016, 18h14
  4. Réponses: 2
    Dernier message: 19/07/2013, 14h34
  5. Réponses: 3
    Dernier message: 06/09/2005, 10h27

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