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 :

Copie des valeurs de cellules d'un tableau 1 dans celles d'un tableau 2 [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien Fonctionnel
    Inscrit en
    Août 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien Fonctionnel
    Secteur : Service public

    Informations forums :
    Inscription : Août 2013
    Messages : 4
    Par défaut Copie des valeurs de cellules d'un tableau 1 dans celles d'un tableau 2
    Bonjour.

    Après presque 2 jours de recherches infructueuse pour créer une macro, je viens solliciter votre aide.

    Voici mon besoin :

    Je voudrais copier toutes les valeurs des cellules de la colonne B d'un tableau Excel nommé Tableau1 situé dans une feuille nommée Test1 dans la première cellule vide de la colonne B d'un tableau Excel nommé Tableau2, situé dans une feuille nommée Test2.

    Voici mon code actuel qui me renvoi une erreur :

    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
    Sub CopierValeursColonneB()
     
        Dim wsSource As Worksheet
        Dim wsDest As Worksheet
        Dim sourceTable As ListObject
        Dim destTable As ListObject
        Dim sourceRange As Range
        Dim destRange As Range
        Dim nextRow As Long
     
        ' Définir les feuilles de calcul
        Set wsSource = ThisWorkbook.Sheets("Test2")
        Set wsDest = ThisWorkbook.Sheets("Test1")
     
        ' Définir les tableaux
        Set sourceTable = wsSource.ListObjects("Tableau1")
        Set destTable = wsDest.ListObjects("Tableau2")
     
        ' Définir la plage de cellules à copier (colonne B du tableau source)
        Set sourceRange = sourceTable.ListColumns("B").DataBodyRange
     
        ' Trouver la première cellule vide dans la colonne B du tableau de destination
        With destTable.ListColumns("B").DataBodyRange
            If .Cells(.Cells.Count).Value <> "" Then
                nextRow = .Cells(.Cells.Count).Row + 1
            Else
                nextRow = .Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
            End If
        End With
     
        ' Définir la plage de cellules de destination
        Set destRange = destTable.ListColumns("B").DataBodyRange.Cells(nextRow, 1).Resize(sourceRange.Rows.Count, 1)
     
        ' Copier les valeurs des cellules de la colonne B du tableau source vers la colonne B du tableau de destination
        destRange.Value = sourceRange.Value
     
    End Sub
    Systématiquement, je reçois l'erreur 9 "L'indice n'appartient pas à la sélection".

    Si j'utilise cette macro sur des plages de données (en l'adaptant), la copie des données se fait bien.

    Avez-vous une idée d'où provient le problème ?

  2. #2
    Community Manager

    Avatar de Malick
    Homme Profil pro
    Community Manager
    Inscrit en
    Juillet 2012
    Messages
    9 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Community Manager
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9 291
    Billets dans le blog
    15
    Par défaut
    Salut,

    Peut-être des pistes :

    Est-ce qu'il n'y a pas inversions sur la définition des variables ?

    ' Définir les feuilles de calcul
    Set wsSource = ThisWorkbook.Sheets("Test2") ====> la feuille Source c'est Test1
    Set wsDest = ThisWorkbook.Sheets("Test1") ====> la feuille Destination c'est Test2

    Est-ce que les tableaux existent bien respectivement dans les deux feuilles ? Sinon VBA enverra aussi l'erreur 9

    Aussi, ListColumns("B") est censé prendre le nom de la colonne du tableau en question et non pas la lettre B qui représente le nom de la colonne de cette feuille Excel.
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien Fonctionnel
    Inscrit en
    Août 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien Fonctionnel
    Secteur : Service public

    Informations forums :
    Inscription : Août 2013
    Messages : 4
    Par défaut
    Merci pour votre réponse rapide Malick.

    Le problème venait effectivement fait qu'il fallait mettre le nom de la colonne du tableau et non pas celui de la colonne de la feuille.

    Cependant, ma macro bloque maintenant sur la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nextRow = .Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
    avec le message d'erreur suivant : "variable objet ou variable de bloc with non définie".

    Une idée ?

  4. #4
    Community Manager

    Avatar de Malick
    Homme Profil pro
    Community Manager
    Inscrit en
    Juillet 2012
    Messages
    9 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Community Manager
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9 291
    Billets dans le blog
    15
    Par défaut
    Peut-être qu'il faudra reposter le code complet après la correction faite sur le nom de colonne.
    Cela permettra aux éventuels membres de pouvoir aider aussi
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  5. #5
    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 114
    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 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si vous expliquiez avec illustration à l'appui ce que vous cherchez à faire ce serait plus simple que d'afficher un code VBA qui nous oblige à traduire vos intentions.
    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

  6. #6
    Membre à l'essai
    Homme Profil pro
    Technicien Fonctionnel
    Inscrit en
    Août 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien Fonctionnel
    Secteur : Service public

    Informations forums :
    Inscription : Août 2013
    Messages : 4
    Par défaut
    Bonjour.

    J'ai mis mon fichier en pièce jointe (j'espère avoir suivi la bonne procédure, étant donné que c'est la première fois).

    Le but est de copier les valeurs au format texte (il s'agit de formule dans le véritable fichier) de la colonne B "Concaténation fournisseur + lot / code BPU" de la feuille 'VHM (Lot 1)"
    dans la colonne B "Fournisseur - lot - Référence BPU" du tableau de la feuille 'PIECES EN STOCKS' et ce à partir de la première cellule vide de la colonne B.

    Pour répondre à la demande de Malick, voici le code bloquant à la ligne 30 :

    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
    Sub CopierValeursColonnesTexte()
     
        Dim wsSource As Worksheet
        Dim wsDest As Worksheet
        Dim sourceTable As ListObject
        Dim destTable As ListObject
        Dim sourceRange As Range
        Dim nextRow As Long
     
        ' Définir les feuilles de calcul
     
        Set wsSource = ThisWorkbook.Sheets("VHM (Lot 1)")
        Set wsDest = ThisWorkbook.Sheets("PIECES EN STOCKS")
     
        ' Définir les tableaux
     
        Set sourceTable = wsSource.ListObjects("VHMLOT1")
        Set destTable = wsDest.ListObjects("PiecesStock")
     
        ' Définir la plage de cellules à copier (colonne "Concaténation fournisseur + lot / code BPU" du tableau source)
     
        Set sourceRange = sourceTable.ListColumns("Concaténation fournisseur + lot / code BPU").DataBodyRange
     
        ' Trouver la première cellule vide dans la colonne "Fournisseur - lot - Référence BPU" du tableau de destination
     
        With destTable.ListColumns("Fournisseur - lot - Référence BPU").DataBodyRange
            If .Cells(.Cells.Count).Value <> "" Then
                nextRow = .Cells(.Cells.Count).Row + 1
            Else
                nextRow = .Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
            End If
        End With
     
        ' Copier les valeurs des cellules de la colonne source vers la colonne de destination au format texte
     
        sourceRange.Copy
        wsDest.Cells(nextRow, destTable.ListColumns("Fournisseur - lot - Référence BPU").Index).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
     
        ' Nettoyer le presse-papiers
     
        Application.CutCopyMode = False
     
    End Sub
    Merci de votre aide.

  7. #7
    Community Manager

    Avatar de Malick
    Homme Profil pro
    Community Manager
    Inscrit en
    Juillet 2012
    Messages
    9 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Community Manager
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9 291
    Billets dans le blog
    15
    Par défaut
    Salut,

    Voici le fichier corrigé avec le code légèrement modifié (voir les commentaires)
    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
    Sub CopierValeursColonnesTexte()
     
        Dim wsSource As Worksheet
        Dim wsDest As Worksheet
        Dim sourceTable As ListObject
        Dim destTable As ListObject
        Dim sourceRange As Range
        Dim nextRow As Long
        Dim lastCell As Range
        ' Définir les feuilles de calcul
     
        Set wsSource = ThisWorkbook.Sheets("VHM (Lot 1)")
        Set wsDest = ThisWorkbook.Sheets("PIECES EN STOCKS")
     
        ' Définir les tableaux
     
        Set sourceTable = wsSource.ListObjects("VHMLOT1")
        Set destTable = wsDest.ListObjects("PiecesStock")
     
        ' Définir la plage de cellules à copier (colonne "Concaténation fournisseur + lot / code BPU" du tableau source)
     
        Set sourceRange = sourceTable.ListColumns("Concaténation fournisseur + lot / code BPU").DataBodyRange
     
        ' Trouver la première cellule vide dans la colonne "Fournisseur - lot - Référence BP
     
            With destTable.ListColumns("Fournisseur - lot - Référence BPU").DataBodyRange
                Set lastCell = .Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
     
                ' On vérifie si la méthode .Find a trouvé quelque chose
     
                If Not lastCell Is Nothing Then
                    nextRow = lastCell.Row + 1
                Else
                    ' Si le tableau est vide, démarrer à la première ligne du DataBodyRange
                    nextRow = .Cells(1, 1).Row
                End If
            End With
     
       ' With destTable.ListColumns("Fournisseur - lot - Référence BPU").DataBodyRange
        '    If .Cells(.Cells.Count).Value <> "" Then
       '         nextRow = .Cells(.Cells.Count).Row + 1
         '   Else
          '      nextRow = .Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
          '  End If
        'End With
     
        ' Copier les valeurs des cellules de la colonne source vers la colonne de destination au format texte
     
        sourceRange.Copy
        wsDest.Cells(nextRow, destTable.ListColumns("Fournisseur - lot - Référence BPU").Index).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
     
        ' Nettoyer le presse-papiers
     
        Application.CutCopyMode = False
     
    End Sub
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Technicien Fonctionnel
    Inscrit en
    Août 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien Fonctionnel
    Secteur : Service public

    Informations forums :
    Inscription : Août 2013
    Messages : 4
    Par défaut
    Merci beaucoup Malick.

    Cela fonctionne parfaitement comme je le souhaitais.

    Bonne fin de journée.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/05/2024, 13h54
  2. VBa : problème de copie des valeurs d'un tableau
    Par BPython dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/02/2017, 15h14
  3. [XL-2003] Copie des valeurs des cellules dans un userform de Word
    Par SSOOAADD dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 15/02/2011, 14h34
  4. Réponses: 7
    Dernier message: 02/11/2006, 11h49
  5. Réponses: 1
    Dernier message: 08/07/2006, 18h55

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