Correspondance entre colonne de deux feuille différente, Excel VBA

  • Initiateur de la discussion Initiateur de la discussion Vorens
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Vorens

XLDnaute Occasionnel
Bonjour à tous


Mon problème du jours est pour moi quelque peux complexe étant donné que je ne maitrise pas le sujet Array en VBA.


J'ai un tableau que l'on va nommer Array_1. Celui si est composer de X colonne ( le nombre peux varier). Chaque colonne est idientifée par son nom d'en tête en A1, B1 , etc..

J'ai un deuxième tableau se trouvant sur une autre feuille de même dimention, avec les même nom d'en tête. Je dois copier les données du talbeau 1 dans le 2 eme. Le problème est que les nom d'en tête du tableau 1 ne sont pas dans les même colonne. En claire, admetons que en colonne A du tableau un, l'en tête est "Toto". Dans le tableau 2, "Toto sera en colonne E.

Je joint un fichier exemple avec les deux tableau. Je cherche à faire une macro qui permet de copier les données du tableau 1 dans les colonne corespondante du tableau 2.


Si quelqu'un peux me donner quelque tuyaux ou un début de code cela m'avancerais beaucoup.

Par avance un grand merci pour l'interet porté à mon problême

COrdialement

Vorens
 

Pièces jointes

Re : Correspondance entre colonne de deux feuille différente, Excel VBA

Bonjour, Vorens.

Pourquoi, une macro ?
Cette formule en A2 feuille 2, à recopier à droite et vers le bas fait ce que tu demandes :
Code:
=INDEX(Feuil1!$A$1:$I$18;LIGNE();EQUIV(A$1;Feuil1!$A$1:$I$1;0))
 
Re : Correspondance entre colonne de deux feuille différente, Excel VBA

Bonjour à tous,

Re Victor21

Pourquoi, une macro ?

Parce que c'est mieux ! Il ne faut pas décourager les candidats au VBA, il y a des choses qu'on ne peut pas faire par formules.
Enfin, ce n'est que mon humble avis.

Re Vorens

Voici ton fichier complété par une macro qui se lance par le bouton Transfert Tableau.

Espérant avoir répondu.

Cordialement.
 

Pièces jointes

Re : Correspondance entre colonne de deux feuille différente, Excel VBA

Re, Papou-net.

Il ne faut pas décourager les candidats au VBA, il y a des choses qu'on ne peut pas faire par formules.
Loin de moi l'idée de décourager quiconque à utiliser le VBA ...

Je ne fais qu'allusion à l'adage de Daniel Josserand, MVP
"La meilleure macro : ne pas l'écrire - Utiliser les fonctionnalités d'Excel qui sont très riches."

Mais nous avons la chance de vivre dans un monde libre, où chacun fait ce qu'il veut, ou presque, et c'est heureux 🙂

Quoi qu'il en soit, Vorens a désormais le choix.

Edit : Et pour compléter encore son choix :
VB:
   Sub Macro1()
     With Range("A2:I18")
    .FormulaR1C1 = "=INDEX(Feuil1!R1C1:R18C9,ROW(),MATCH(R1C,Feuil1!R1C1:R1C9,0))"
    .Copy: .PasteSpecial Paste:=xlPasteValues
    End With
 End Sub
🙂
 
Dernière édition:
Re : Correspondance entre colonne de deux feuille différente, Excel VBA

Re

Merci pour cette macro que je vais m'empresser d'étudier.

Pour répondre a "pourquoi par par formule" car ses deux tableau ne sont pas dans les même fichier et que le code est écrit dans un fichier tamplate qui piloite les deux autres. Je dois suprimer tout les lien entre fichiers et transformer les formules qu'il y avait en code vba.

Je vais adapter ce bout de code à mon programme.

Je risque d'avoir quelque question par la suite sur cette macro, je les poserais directement ici.

Merci encore

Cordialement Vorens
 
Re : Correspondance entre colonne de deux feuille différente, Excel VBA

Re,


J'ai adapter la macro proposée et voi^çi le code

Code:
Public Sub ImportData()

Dim NbColStruc As Integer


Dim ClSource As Integer, ClCible As Integer, Lg As Integer

'Nombre colonne de la structure

SourceFile = Sheets("Execution Sequencer").Range("H" & ActiveRowMaint)
SourceTab = Sheets("Execution Sequencer").Range("I" & ActiveRowMaint)

TargetFile = Sheets("Execution Sequencer").Range("M" & ActiveRowMaint)
TargetTab = Sheets("Execution Sequencer").Range("N" & ActiveRowMaint)

NbColStruc = Application.WorksheetFunction.CountA(Workbooks(SourceFile).Sheets(NameTabRac).Range("1:1"))


With Workbooks(SourceFile).Sheets(SourceTab)
  For ClSource = 1 To NbColStruc
    Set nom = Workbooks(TargetFile).Sheets(NameTabRac).Range("1:1").Find(.Cells(1, ClSource), LookIn:=xlValues)
    If Not nom Is Nothing Then ClCible = nom.Column
    For Lg = 2 To Workbooks(SourceFile).Sheets(SourceTab).Cells(1, ClSource).End(xlDown).Row
      Sheets(NameTabRac).Cells(Lg, ClCible) = .Cells(Lg, ClSource)
    Next
  Next
End With


End Sub

Ce code est dans un module. qui st lui même appeler dans un aute codul via l'inscruction "call ...."

Le programme entre dans le module dans problème, s'execute normalement jusqu au With. Puis c'est comme si il n'executais pas la fonction. En y ajoutant un curseur par exemple a la ligne "For ClSource = 1 To NbColStruc", le programme passe outre et ne s'arrête pas.

Voyez vous par azard mon erreur ?


Par avance merci

Vorens
 
Re : Correspondance entre colonne de deux feuille différente, Excel VBA

Re,


Mon problème est maintenant à la ligne "For Lg = 2 To Workbooks(SourceFile).Sheets(SourceTab).Cells(1, ClSource).End(xlDown).Row"

L'erreur est un dépassement de capacité. surement ici ClSource).End(xlDown car il y a une valeur de -4301.
 
Re : Correspondance entre colonne de deux feuille différente, Excel VBA

Re,

Je pense que le bug viens du fait que si une des colonne de la feuille est vide, la fonction ClSource).End(xlDown).Row" pose problème.

Si je met des valeur dans les colonnes qui sont vide, l'erreur se déplace à la ligne suivante:

Sheets(NameTabRac).Cells(Lg, ClCible) = .Cells(Lg, ClSource)

Cette fois si l'erreur est "Erreur définie par l'application ou par l'objet"
 
Re : Correspondance entre colonne de deux feuille différente, Excel VBA

bonjour Vorens,Victor
déclare les variables lignes en long
application.screenupdating=false est aussi utile(aide touche F1)

Code:
    With Workbooks(SourceFile).Sheets(SourceTab)
        For ClSource = 1 To NbColStruc
            Set Nom = Workbooks(TargetFile).Sheets(NameTabRac).Range("1:1").Find(.Cells(1, ClSource), LookIn:=xlValues)
            If Not Nom Is Nothing Then ClCible = Nom.Column
            'ou pour remplacer les 2 lignes précédentes
            '    ClCible = Workbooks(TargetFile).Sheets(NameTabRac).Range("1:1").Find(.Cells(1, ClSource), LookIn:=xlValues).Column
            derl = .Cells(1, ClSource).End(xlUp).Row
            If derl > 1 Then
                For Lg = 2 To derl
                    Sheets(NameTabRac).Cells(65536, ClCible) = .Cells(Lg, ClSource)    'tu peux diminuer 65536
                Next
            End If
        Next
    End With

à bientôt
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
672
Compte Supprimé 979
C
Retour