Microsoft 365 VBA - Instruction d'un feuillet Base de donnée à un autre

Heim

XLDnaute Nouveau
Bonjour,

Je débute en VBA, mais je m'y passionne au vu des possibilités. J'aimerai mettre en application des tableurs pour mon travail.
Voilà ce que je cherche à faire:

J'ai 3 feuillet:
"Copie GS"
"Résultats"
"Base de Donnée"

Je dois extraire des données plus ou moins longues (50 à 200 lignes) d'un logiciel que je copie colle sur une premier feuillet Excel nommé "Copie GS", je souhaite les comparer les références avec le feuillet "Base de donnée" pour ensuite copier la ligne de la "Base de donnée" dans "Résultat".

L'instruction
Regarde ligne par ligne les références Colonne A feuillet "Copie GS", les comparer à la colonne A feuillet "Base de donnée" afin de retrouver la même référence.
Dès que la correspondance est faite, ordre de copier la ligne entière de "Base de donnée" et la coller dans le feuillet résultat les une à la suite des autres.
Si il ne trouve pas de référence correspondante, qu'il copie la ligne du feuillet "Copie GS" à la place. (ça me permettra de voir que la référence n'est pas dans la base de donnée, et je pourrait ensuite la rajouter.)

But:
Pour donner du contexte, c'est pour faire des interventions de maintenance régulière dans l'industrie. J'ai un nombre de pièces à changer tous les 5 ans sur des machines mais d'autre pièces ne sont pas à changer, ou alors selon état.
Dans la base de donné je donne l'instruction pièce par pièce selon la référence, et je peux modifier les ordres au cours du temps.
Quand je colle ma nomenclature dans le feuillet "Copie GS", et que j'active la macro, je souhaite avoir dans le feuillet résultat ma référence et l'action de maintenance à effectuer sur celle-ci.

J'ai essayé plusieurs truc mais je ne trouve pas/ connais pas les instructions à écrire dans mon tableau VBA.

Merci d'avance pour votre aide ;)
 

Heim

XLDnaute Nouveau
Re

Ce code supprime les lignes du tableau 2 et 3

VB:
Public Sub Reset_data()
If Range("Tableau3").ListObject.DataBodyRange Is Nothing Then
    'Tableau vide je sors par exemple
    Exit Sub
Else
    'Tableau remplit je le vide
    Range("Tableau3").ListObject.DataBodyRange.Delete
End If

If Range("Tableau2").ListObject.DataBodyRange Is Nothing Then
    'Tableau vide je sors par exemple
    Exit Sub
Else
    'Tableau remplit je le vide
    Range("Tableau2").ListObject.DataBodyRange.Delete
End If
End Sub

@Phil69970
Merci, c'est presque nickel. Le problème que ça bug à cause du faite qu'il manque une ligne au 2 tableaux.

ça me met ça quand une ligne du tableau3 n'est pas ajoutée

1641554906312.png


du coup je dois insérer une ligne pour que ça fonctionne, puis je recolle mes données dans le tableaux:
1641555003332.png


et je dois faire la même chose pour mon tableau2 sinon j'ai le même bug
 

Heim

XLDnaute Nouveau
Génial! ça fonctionne parfaitement, t'es un as!

Merci beaucoup à vous deux pour votre temps. Je crois que je vais prendre sur mon compte CPF pour me faire une bonne formation au VBA, je trouve ça passionnant mais sacrement difficile :s

à bientôt, merci pour tout!
 

Heim

XLDnaute Nouveau
Bonjour,

J'ai une nouvelle petite demande.
J'ai un nouvel onglet avec des références de mise à jour nommé "MAJ"

Le besoin, est le même qu'avant, il ne faut pas toucher à la base de donnée car il y a pleins de nomenclature avec de vieilles références qui doivent pouvoir être retrouvée dans la base de donnée.

Cependant, j'aimerai pouvoir remplacer les références obsolètes un fois la première macro terminé dans l'onglet "Résultat", par les références trouvées dans l'onglet MAJ.

J'ai essayé de me débrouiller et faire un boucle, mais elle coince au moment de remplacer la référence. Je n'arrive pas à supprimer de la cellule du tableau, l'ancienne référence pour l'à remplacer par l'ancienne.

Actuellement j'ai fais une nouvelle macro "MAJ" commandé par un bouton dans l'onglet "Résultat" mais dans l'idée j'aimerai l'ajouter à la suite de l'autre macro "Rechercher"
Par contre, j'aimerai quand même quelle soit distinct de celle-ci et quelle démarre après car si j'ai de nouvelles mises à jour à faire dans un avenir proche avec encore de nouveaux onglets, je préfère ajouter de nouvelles macros qui viennent corriger la première plutôt que construire une grosse usine à gaz en 1 seul macro

J'espère que j'ai été clair. Vous trouverez mon excel en PJ

Aussi, j'ai une petite question de culture, dans la ligne de code For I = 2 et For J = 1, pourquoi l'un à 2 et l'autre à 1? je pensais que ces nombre correspondait à un genre de suite arithmétique mais je comprend pas pourquoi la boucle 1 I = 2.

1643709620250.png


Mercie d'avance pour votre aide
 

Pièces jointes

  • Test.xlsm
    93.7 KB · Affichages: 2

Discussions similaires

Réponses
14
Affichages
501
Réponses
5
Affichages
438

Statistiques des forums

Discussions
315 095
Messages
2 116 162
Membres
112 674
dernier inscrit
AKD