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éer un classeur Excel à partir d'autres classeurs


Sujet :

Macros et VBA Excel

  1. #21
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    En ce qui concerne le code, je n'y comprends pas grand chose non plus. Je pense que Nakolito sera la personne la plus adaptée à te répondre.
    Désolé

  2. #22
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Je vais le contacter en mp, ce sera peut-être mieux que de déborder ce sujet qui est différent

    Bon courage pour la suite !

  3. #23
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    derniere mise a jour du code,

    + commentaire

    + condition de savoir si la cellule demandée est vide ou pas
    Fichiers attachés Fichiers attachés

  4. #24
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Effectivement avec les commentaires c'est déjà beaucoup mieux pour les novices.

    Je vais moins ramer, y'a des trucs qui ne vont pas me servir comme la mise en page ou les entêtes mais je vais pourvoir me servir de quelques choses.
    (c'est pas gagné )

  5. #25
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    il y a des super tutos pour VBA Excel et ACCESS sur developpez.com,n'hésitez pas y aller, meme pour les novices, c'est suffisament clair.

    si le problème est résolu ==>

  6. #26
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    Franchement c'est super Nakolito, Merci beaucoup.
    Mais est-ce que je peux pousser le bouchon un peu plus loin?

    Sur la fiche client que je t'ai envoyé, en-dessous des informations décrivant le client, on a une partie qui nous donne les dates de visite, le code de la prestation, et les achats éventuels.

    Sur le fichier, est-il possible de récupérer la dernière ligne (c'est à dire la date de sa dernière visite) avec ces 3 critères et de les copier à la suite des autres informations? La difficulté (s'il y en a une pour toi Nakolito) est que la première ligne d'en-tête est toujours la même (ligne 11), mais la dernière est aléatoire puisque tous les clients ne suivent pas le même rythme de visites bien évidemment.

    Merci

    Une précision désolé.
    Il y a toujours une date (puisque le client est venu), mais pas forcemment de prestation et d'achat. Peut-on garder le même principe que si la cellule prestation et/ou achat est vide, alors on la remplace par des "_" pour ne pas tout mélanger.
    Merci

  7. #27
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    dans le code, il faut rajouter une ligne dans les en tete pour rajouter "derniere date visite"

    et dans les copierColler, il faut en rajouter un avec en parametre de la cellule, l'adresse de la derniere cellule utilisé.

    Tu peux mettre une cellule en dynamique, par exemple en mettant

    .range("J" & lastRow(colonne J)) ou quelque chose dans le genre, et avec ca, il te trouvera la derniere cellule de la colonne J et te la mettra dans ton tableau.

  8. #28
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    OK Nakolito çà marche pour créer les en-têtes du fichier, mais pour recopier les données en fonction de la dernière cellule, je bug, je ne sais pas faire.
    Merci de ton aide.
    PS: si possible j'aimerai avoir les 3 informations (dernière visite, prestation, achat)

    J'ai peut-être un petit bout, j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      'Date dernière visite
            copierColler "B & lastRow(colonne B)", 13
      'Prestation
            copierColler "C & lastRow(colonne C)", 14
      'Achat
            copierColler "E & lastRow(colonne E)", 15
    Mais lorsque je lance la macro, il bug sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Workbooks(Workbooks.Count).Sheets(2).Range(rangeSource) = "" Then
    Je suppose qu' il lit la colonne mais il faut qu'il commence à partir de la ligne 12.

    Est ce que c'est çà?
    Et là, je bloque.
    Peux-tu me dépanner stp,
    Merci beaucoup.

  9. #29
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    derniere réponse de ma part, desolé.
    Si vous avez des question, des tutos sont la pour ca, on s'improvise pas developpeur, il faut bosser et y passer du temps, et se faire faire quelque chose ca aide sur le moment, mais au final, vous n'avez pas saisi la moitié des infos qu'on vous a refilé.

    Donc, je met le projet terminé (a mon gout).
    Si il manque des trucs, essayer de chercher par vous meme.
    Fichiers attachés Fichiers attachés

  10. #30
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour tout le monde,

    Je viens mettre mon grain de sel à ce stade de la discussion mais ne serait il pas mieux de récupérer les valeurs en laissant les classeurs fermés ? (je doi avouer que je n'ai pas lu tous les posts du sujet)mais si ça intéresse, voici un code qui fait celà (sur 500 classeurs ça va mouliner). Il faut exécuter la proc "RecupValeurCellules" en adaptant le chemin du dossier contenant les classeurs . Cette proc récupère le nom, prénom, rue, n°, CP et ville, il faut adapter pour plus de valeurs :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
     
     
    Dim ConnectCL As Object
    Dim Rs As Object
     
    Sub ConnectCLasseur(ConnectCL As Object, _
                        Fichier As String, _
                        Optional Rs)
     
        Set ConnectCL = CreateObject("ADODB.Connection")
     
        If Not IsMissing(Rs) Then
            Set Rs = CreateObject("ADODB.Recordset")
        End If
     
        'HDR > YES ou NO; entêtes de colonnes
        'IMEX > 1 lecture seule, 2 lecture/écriture
        ConnectCL.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                  "Data Source=" & Fichier & ";" & _
                  "Extended Properties=""Excel 8.0;HDR=NO;IMEX= 1;"""
     
    End Sub
     
    Sub RecupValeur(Classeur As String, _
                    NomFeuille As String, _
                    Cellule As String, _
                    ValRetour As String)
     
        'connecxion
        ConnectCLasseur ConnectCL, Classeur, Rs
     
        'lecture
        With Rs
            .CursorType = 1
            .LockType = 3
            .Open "SELECT * FROM `" & NomFeuille & "$" & _
            Cellule & "` ", ConnectCL
     
            ValRetour = .Fields(0).Value
     
        End With
     
    End Sub
     
    Function ChargeFichiers(Chemin As String) As String()
     
        Dim TableauFichiers() As String
        Dim Fichier As String
        Dim I As Integer
     
        Fichier = Dir(Chemin)
     
        Do While (Len(Fichier) > 0)
     
            'seulement des classeurs Excel
            If Right(Fichier, 4) = ".xls" Then
                I = I + 1
                ReDim Preserve TableauFichiers(1 To I)
                TableauFichiers(I) = Fichier
            End If
     
            Fichier = Dir()
     
        Loop
     
        ChargeFichiers = TableauFichiers()
     
    End Function
     
     
     
    Sub RecupValeurCellules()
     
        Dim TblClasseurs() As String
        Dim TblRetour(1 To 6) As String
        Dim TblCellule(1 To 6) As String
        Dim CheminDossier As String
        Dim NomFeuille As String
        Dim Cellule As String
        Dim I As Integer
        Dim J As Integer
        Dim K As Integer
        Dim L As Integer
     
        On Error GoTo Fin
     
        'adapter ici le chemin du dossier contenant les classeurs
        'récupère dans un tableau les noms des classeurs
        CheminDossier = "D:\Dossier Classeurs à récuperer\"
        TblClasseurs = ChargeFichiers(CheminDossier)
     
        'si aucun classeur dans le dossier indiqué
        If UBound(TblClasseurs()) = 0 Then
            MsgBox "Aucun classeur trouvé dans le dossier " & CheminDossier
            Exit Sub
        End If
     
        'incrément car pas de ligne 0
        K = 1
     
        'toutes les feuilles des classeurs doivent avoir le même nom
        NomFeuille = "COMMERCIAL"
     
        TblCellule(1) = "C4:C4"
        TblCellule(2) = "F4:F4"
        TblCellule(3) = "C5:C5"
        TblCellule(4) = "G5:G5"
        TblCellule(5) = "C6:C6"
        TblCellule(6) = "E6:E6"
     
        'boucle sur tous les classeurs
        For I = 1 To UBound(TblClasseurs())
     
            'boucle sur les différentes cellules
            For J = 1 To 6
            RecupValeur CheminDossier & TblClasseurs(I), _
                        NomFeuille, _
                        TblCellule(J), _
                        TblRetour(J)
            Next J
     
            'inscrit les valeurs dans la feuille "Feuil1" du classeur où se trouve
            'cette proc
            For J = 1 To 6
                ThisWorkbook.Worksheets("Feuil1").Cells(K, J) = TblRetour(J)
            Next J
     
            Erase TblRetour()
     
            'incrémente pour la ligne suivante
            K = K + 1
     
        Next I
     
     
    Fin:
     
        ConnectCL.Close
     
        Set Rs = Nothing
        Set ConnectCL = Nothing
     
        Exit Sub
     
        If Err.Number <> 0 Then
            MsgBox "Erreur de fichier !"
        End If
     
    End Sub
    Bon courrage.

    Hervé.

  11. #31
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    Merci beaucoup Nakolito,
    Ce que tu as envoyé fonctionne parfaitement.
    Cela va beaucoup nous aider pour notre gestion.
    Désolé si j'ai été "un peu" lourd, ou "trop débutant", mais cela m'aurait pris énormement de temps à pouvoir faire ce que tu m'as donné. D'autant plus que je ne sais pas si j'aurais été capable de le faire.
    Pour ta réponse Theze, j'ai essayé mais certains codes ne fonctionnaient pas dans mon cas, et comme la solution de Nakolito me convient parfaitement, je n'ai pas approfondi.
    Merci.
    Je mets la discussion comme "Résolu".

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [XL-2010] Copier une plage de données d'un classeur excel X a un classeur excel Y
    Par CmsrFr dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/05/2012, 19h00
  2. [XL-2007] exporter les une ligne excel vers un autre classeur excel en vba
    Par Maxim0 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/06/2011, 21h55
  3. [XL-2007] exporter les donnée excel vers un autre classeur excel en vba
    Par aminee1666 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/06/2011, 10h58
  4. Réponses: 1
    Dernier message: 29/05/2008, 17h10
  5. [VBA-E] enregistrer un classeur excel depuis un autre classeur
    Par roseau dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/03/2007, 15h15

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