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 :

chercher, copier et coller avec une macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations forums :
    Inscription : Mai 2009
    Messages : 48
    Par défaut chercher, copier et coller avec une macro
    Bonjour à tous et à toutes,

    J’ai quelques problèmes avec une macro d’Excel (dans le fichier A), la macro doit chercher plusieurs fichiers d’Excel et copier quelques donnes, le problème est que le donnes ne sont pas dans la même colonne et n’ont pas la même quantité de données.

    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
    Dim IndiceProduct As Long
        Dim sProduct As String
        Dim IndiceMold As Long
        Dim sMold As String
        Dim IndiceGen As Long
        Dim sGen As String
        Dim IndiceVersion As Long
        Dim sVersion As String
        Dim IndiceFichierProgression As Long
        Dim sFichierProgression As String
        Dim sOeil As String
        Dim IndiceBase As Long
        Dim sBase As String
        Dim IndiceRefBase As Integer
        Dim sRefBase As String
        Dim Base As Integer
        Dim IndiceApp As Long
        Dim sApp As String
        Dim IndiceMarque As Long
        Dim sMarque As String
        Dim NumeroOutil As Long
        Dim NumeroOutillage As Long ' numero outillage (num de base de donnée)
        Dim IndiceTool As Long
        Dim sTool As String
        Dim sRef As String
        Dim IndiceRef As Long
        Dim IndiceVR As Long
        Dim IndiceSite As Integer
        Dim sSite As String
        Dim NumeroSite As Long
        Dim VR As Long
     
        ' on va deja retrouver les colonne clef pour la suite
        sOeil = "S" 'oeil symetrique par defaut
        While sNomColonne <> ""
            IndiceColonne = IndiceColonne + 1
            sNomColonne = UCase(FeuilleXLS.Cells(IndiceLigne, IndiceColonne))
            Select Case sNomColonne
                Case "PRODUCT"
                    IndiceProduct = IndiceColonne
                Case "PRODUIT"
                    IndiceProduct = IndiceColonne
                Case "MOLD"
                    IndiceMold = IndiceColonne
                Case "GEN"
                    IndiceGen = IndiceColonne
                Case "VERSION"
                    IndiceVersion = IndiceColonne
                Case "SURFACE"
                    IndiceFichierProgression = IndiceColonne
                Case "BASE"
                    IndiceBase = IndiceColonne
                Case "REFBASE"
                    IndiceRefBase = IndiceColonne
                Case "APP"
                    IndiceApp = IndiceColonne
                Case "CODE MARQUE"
                    IndiceMarque = IndiceColonne
                Case "TOOL #"
                    IndiceTool = IndiceColonne
                Case "REF"
                    IndiceRef = IndiceColonne
                Case "SITE"
                    IndiceSite = IndiceColonne
                Case "VR"
                    IndiceVR = IndiceColonne
            End Select
        Wend
    Malheureusement elle ne copie pas les donnes dans le fichier « A ».
    quelqu'un peut m'aider??

  2. #2
    Membre expérimenté
    Inscrit en
    Juillet 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 239
    Par défaut
    Bonjour ,
    Si je comprends bien le problème , les entêtes de colonnes sont connues mais l'ordre des colonnes peut changer.

    J'ai cette problématique : il faut envisager le cas ou il y a des espaces avant ou après l'entête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     sNomColonne = UCase(FeuilleXLS.Cells(IndiceLigne, IndiceColonne))
    'à remplacer par 
     sNomColonne = UCase(trim (FeuilleXLS.Cells(IndiceLigne, IndiceColonne)))
    Ensuite dans ton code , tu n'initialise pas IndiceLigne qui est donc = 0 .

    Ton algorithme doit fonctionner (sauf si il y a une colonne vide d'entête), mais il permet simplement de récupérer les indices correspondants aux colonnes, mais il ne permet pas de faire les recopies.

    Pour ma part j'ai développé une fonction qui renvoie le numéro de colonne par rapport au nom de l'entête. Je lui indique la ligne des entêtes et le nom de la colonne , la fonction suivante renvoit le numero de colonne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Public Function colonne_entete_lig( nom_col As String, lig As Integer) As Integer
    ' Fonction pour rechercher le numéro de la colonne à partir de son nom d'entête recherché sur la ligne donnée 
    ' nomcol doit être l'entête et lig la ligne ou doit s'effectuer la recherche
     
    colonne_entete_lig = 0
    for colonne = 1 to 255
     
    if trim ( ucase( cells ( lig , colonne).value) = ucase (nom_col ) then 
    colonne_entete_lig  = colonne
    exit for
    end if 
    next 
    end function

    ensuite dans mes traitements je procéde de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IndiceSite  =  colonne_entete_lig( "SITE" , 1)
    ' si les entêtes sont sur la ligne 1
    Pour industrialiser plus encore , tu dois t'assurer que IndiceSite n'est pas égal à zéro , sinon il y a plantage pour la suite .
    Tu peux mettre tous tes entétes "BASE" , "VERSION" , "SITE" dans un tableau tab_entête [ 1 ....N] , tu récupéres à la volée les indices correspondants dans un tableau ex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    indices_col (N) = colonne_entete_lig ( tableau tab_entête (N))
    et dans ton code, tu arrives à faire abstraction de l'ordre des colonnes.ex :

Discussions similaires

  1. [XL-2007] Probleme avec une macro copier coller
    Par young 25 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/02/2012, 10h37
  2. [XL-2007] Copier un classeur excel avec une macro
    Par XceSs dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/12/2010, 19h03
  3. recherche dans une base de donnees; copier coller via une macro
    Par yannlvr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/04/2010, 17h58
  4. copier et coller avec une boucle
    Par tony847 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/04/2008, 22h27
  5. Réponses: 3
    Dernier message: 23/09/2006, 15h19

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