Exporter des info dans des fichier excel fermer

Y compris Power BI, Power Query et toute autre question en lien avec Excel
K
Kannen68
Nouveau venu
Nouveau venu
Messages : 9
Inscrit le : 24 novembre 2019

Message par Kannen68 » 3 janvier 2020, 21:36

bonjours

je cherche a réaliser une commande pour remplir des saisies d'heures plus rapidement depuis un classeur excel vers d'autre classeur fermer
étant novice en excel j'ai déjà pu réaliser quelque commande mais cela dépasse mes compétence je recherche un challenger pouvant m'aider a réaliser cette commande

je joint deux fichier
le premier pour la saisie des heures "FEUILLE D'HEURE" avec une image avec plus d'info sur le fonctionnement
le second l'un des classeur qui va réceptionner les info
FEUILLES D'HEURES.xlsm
(115.79 Kio) Téléchargé 2 fois
FEUILLES D'HEURES.xlsm
(115.79 Kio) Téléchargé 2 fois
IMPUTATION HEURES PROJET CE2019-001.xlsx
(85.66 Kio) Téléchargé 2 fois
Avatar du membre
pierrep56
Membre impliqué
Membre impliqué
Messages : 1'099
Appréciations reçues : 183
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 4 janvier 2020, 11:57

Bonjour,

Pour être franc, les fichiers proposés sont un peu ... indigestes.

Alors voici une démo simpliste pour écrire des données d'un fichier emeteur vers un fichier récepteur fermé sans l'ouvrir.
Le traitement est contenu dans le code suivant :
Sub Ecrire_vers_Classeur_Fermé()
Dim lg As Long, i As Long
        
    Connect_xls ThisWorkbook.Path & "\Recepteur.xlsx"
    With Sheets("Feuil1")
        lg = .Cells(Rows.Count, 1).End(xlUp).Row
        
        For i = 2 To lg
            Req = "INSERT INTO [Cible$] VALUES (" & _
                  Esc(.Range("A" & i).Value) & "," & _
                  Esc_date(.Range("B" & i).Value) & "," & _
                  Esc_num(.Range("C" & i).Value) & ")"
                  
            Cnx.Execute Req
        Next i
    End With
    Close_Cnx
End Sub
Explications :
1/ pour commencer on se connecte au fichier récepteur (ici dans le même dossier que l'emeteur)
2/ on écrit pour chaque ligne de donnée une requête Sql type "INSERT"
3/ on l'exécute
4/ à la fin du processus on ferme la connexion.

Précisions sur la rédaction de la requête Sql :
- INSERT INTO [Cible$] => indique qu'on souhaite insérer les données dans l'onglet "Cible" (le $ indique que c'est un onglet)
- ensuite on place les valeurs à insérer dans la liste => VALUES(valeur1, valeur2, etc ...)
- ici le nombre de valeurs doit correspondre au nombre de colonne de l'onglet cible
- chaque type de valeur doit être formatée de façon particulière :
. une valeur texte doit être entourée de guillemets =>'Valeur1'
. une valeur numérique doit voir son éventuelle virgule remplacée par un point => 123.45
. une date est transformée en valeur "Long Integer"

=> d’où les 3 fonctions de traitement pour valeurs texte/date/numérique contenues dans le code
Particularité pour un texte contenant déjà un guillemet, celui-ci doit être doublé :
exemple pour la valeur Armel le Cléac'h, la fonction esc la transforme en 'Armel le Cléac''h'


Mais si je veux insérer, par exemple, uniquement qu'une seule valeur dans une nouvelle ligne => on devra spécifier la colonne dans la requête, exemple pour insérer uniquement une date :
Req = "INSERT INTO [Cible$] (`Date`) VALUES (" & Esc_date(.Range("B" & i).Value) & ","
Remarques :
. l'entête Date est un mot clé du VBA il convient de l'entourer de guillemets-du-7 (Alt_Gr+7 2 fois)
. mais c'est une "bonne pratique" également pour tous les noms de colonnes (surtout si composé de plusieurs mot du genre `Total débit mensuel` par exemple).

Il ne reste plus qu'à adapter ce code pour le besoin indiqué.
Pierre
Démo emeteur-recepteur.zip
(32.41 Kio) Téléchargé 4 fois
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message