Macro de Recuperation de données d'un classeur

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 !

Desouzaa

XLDnaute Nouveau
Bonjour,
Étant actuellement en stage et n'ayant pas de connaissance approfondi en VBA, j'ai comme objectif de créer une macro permettant de récupérer des informations d'un classeur à partir d'un autre et de mettre les informations récupérer dans un troisième classeur.
J'explique:
J’ai commencée à le faire il me reste la macro qui me récupère les données et ça qui me bloque depuis 3 semaine je cherche me je ne trouve pas la solution.

Le but de la macro c'est de permettre de récupérer toutes les numéros du classeur1 qui ne sont pas dans le classeur2, et me les relevés en prenant toutes les infos sur un troisième classeur.

La macro doit faire une comparaison des numéros de la colonne B du classeur1 à ceux de la colonne C du classeur2.

1) Si les numéros de la colonne B du claseur1 se trouvent dans la colonne C du classeur2 il ne se passera rien.
2)Si non il récupère toutes les informations qui se trouves sur la ligne du numéro et les mettent dans un classeurs3, en fonction du libellée que j’ai déjà créé.

Je vous remercie par avance de votre aide.
 
Dernière édition:
Re : Macro de Recuperation de données d'un classeur

Bonjour,

c'est pas très clair ton truc d'autant que la solution parait simple (si j'ai compris).

Voici un début de piste : la macro ci dessous pour chaque ligne de classeurs 1 compare avec chaque ligne du classeur 2

A toi de compléter


Code:
Sub extraction()

    Dim Ligne As Long    ' n° ligne classeur 1
    Dim Ligne2 As Long    ' n° ligne classeur 2
    Dim Ligne3 As Long    ' n° ligne classeur 3
    Dim Trouve As Boolean

    ' Créer un nouveau Classeur
    Workbooks.Add
    Classeur3 = ActiveWorkbook.Name
    Ligne3 = 2

    Ligne = 3
    'lire chaque ligne du classeur 1
    While Workbooks("Classeur1.xlsx").Sheets("Projet & Production").Cells(Ligne, 2) <> ""

        If Workbooks("Classeur1.xlsx").Sheets("Projet & Production").Cells(Ligne, 6) = "DEMANDE DE CHANGEMENT GCE" _
           Or Workbooks("Classeur1.xlsx").Sheets("Projet & Production").Cells(Ligne, 6) = "DEMANDE DE CHANGEMENT EDITEUR" _
           Then
' le test peu être   If Workbooks("Classeur1.xlsx").Sheets("Projet & Production").Cells(Ligne, 6) like "DEMANDE DE CHANGEMENT*" then

            'Compare à chaque ligne du classeur 2
            Ligne2 = 2
            Trouvé = False
            Do
                If Workbooks("Classeur1.xlsx").Sheets("Projet & Production").Cells(Ligne, 2) = _
                   Workbooks("Classeur2.xlsm").Sheets("Anomalies en cours").Cells(Ligne2, 3) Then
                    Trouve = True    ' égalité classeur 1 et 2 on sort de la boucle
                    Exit Do
                End If
                Ligne2 = Ligne2 + 1
            Loop While Workbooks("Classeur2.xlsm").Sheets("Anomalies en cours").Cells(Ligne2, 2) <> ""

            'recopie vers classeur 3 si pas trouvé dans classeur 2
            If Trouve = False Then
                With Workbooks(Classeur3).Sheets(1)
                    .Cells(Ligne3, 1) = Workbooks("Classeur1.xlsx").Sheets("Projet & Production").Cells(Ligne, 2)
                    .Cells(Ligne3, 2) = Workbooks("Classeur1.xlsx").Sheets("Projet & Production").Cells(Ligne, 6)
                    .Cells(Ligne3, 3) = Workbooks("Classeur1.xlsx").Sheets("Projet & Production").Cells(Ligne, 9)
                    .Cells(Ligne3, 4) = Workbooks("Classeur1.xlsx").Sheets("Projet & Production").Cells(Ligne, 10)
                    ' recopie de chaque colonne
                    Ligne3 = Ligne3 + 1
                End With
            End If
        End If
        Ligne = Ligne + 1
    Wend



End Sub


GIBI
 
Dernière édition:
Re : Macro de Recuperation de données d'un classeur

Bonsoir GIBI,
Merci pour ta réponse , je pense que j'ai mal expliqué et je ne sais pas aussi si t'as bien regardé la macro que j'ai faite sur le classeur2.xlsm cette macro permet déjà d'ouvrir le classeur1 faire le test et ouvrir le troisième classeur.

Mais le problème je n’arrive pas à crée la macro qui me permettra d'aller sélectionner les informations que je souhaite.

Je réexplique:
1)Quand il fait la comparaison seul les 5 derniers chiffres du classeur1 peuvent exister ou ne pas exister dans le classeur2.
2)Dans le classeur1 moi je dois faire la sélection a partir de la colonneF c'est a dire les cellules où j'ai demande de changementGCE ou demande de changementEditeur , donc a chaque fois que je trouve cela dans les cellules de la colonneF la macro sélectionne le numéro et va cherché ce numéro dans le classeur2 et s'il le trouve il ne se passe rien et s'il ne le trouve pas il le relève sur le classeur3 qui s'affiche.

Essaye de voir la macro que j'ai déjà faite s'il te plait. (J'ai mit en jaune par les colonne qu'il faut sélectionner dans le classeur1 et dans le classeur2 j'ai mit en jaune les Numéros qui sont dans le clsseur1)
Merci a tous de votre aide
 
Re : Macro de Recuperation de données d'un classeur

Bonjour,

j'ai du mal à comprendre ta demande et surtout à lire ta macro qui comporte en plus des erreurs (ex . GoTo LefichierFICHIER119estOK: étiquette inconnue)
tu travailles feuille par feuille (exemple Sheets(FeuilleSource).Select) en stockant dans des variables les valeurs. Il est plus facile de travailler en préfixant par Workbooks("Classeur1.xlsx").Sheets("Projet & Production")

exemple
If Workbooks("Classeur1.xlsx").Sheets("Projet & Production").Cells(Ligne, 6) like "DEMANDE DE CHANGEMENT*" then
ou plus simple
Set Classeur1 = Workbooks("Classeur1.xlsx").Sheets("Projet & Production") en début de procédure

If Classeur1.Cells(Ligne, 6) like "DEMANDE DE CHANGEMENT*" then





si tu veux sélectionner uniquement les lignes à avec une valeur spécifique en colonne F

Code:
        If Workbooks("Classeur1.xlsx").Sheets("Projet & Production").Cells(Ligne, 6) = "DEMANDE DE CHANGEMENT GCE" _
           Or Workbooks("Classeur1.xlsx").Sheets("Projet & Production").Cells(Ligne, 6) = "DEMANDE DE CHANGEMENT EDITEUR" _
           Then

ou si tu veux selectonner les lignes qui contiennent ""DEMANDE DE CHANGEMENT"

Code:
        If Workbooks("Classeur1.xlsx").Sheets("Projet & Production").Cells(Ligne, 6) like "DEMANDE DE CHANGEMENT*" then

dans ta macro dans le cas de non correspondance ajoute un test sur la colonne F
Code:
If C Is Nothing Then
      If Workbooks("Classeur1.xlsx").Sheets("Projet & Production").Cells(n, 6) like "DEMANDE DE CHANGEMENT*" then
GIBI
 
Dernière édition:
Re : Macro de Recuperation de données d'un classeur

Bonsoir GIBi,
Je te remercie pour l'effort que tu es entrain de faire pour m'aider a trouver une solution a mon problème.
Effectivement dans ma macro il y a une erreur que je viens de corriger.
Donc j'essayerai ce code que tu m'as proposée demain et je reviendrai pour te faire un retour.
Merci pour tout.
 
Dernière édition:
Re : Macro de Recuperation de données d'un classeur

Bonjour,
J'ai essayé ta macro mais ça ne marche pas.
La macro prend toutes les numeros meme ceux trouver dans le classeur2 et les mets sur le classeur3.
Et ce n'est pas ça que je voulais mais je te remercie pour la solution.
C'est pour cela que je voulais que tu regardes la macro qui se trouve sur le classeur2.
Merci
 
Re : Macro de Recuperation de données d'un classeur

Desouzaa,

envoie ta dernière macro, car je ne comprend pas le problème. explique comment la lancer (c'est quoi le fichier des ARS (Classeur1 je suppose), quelle date faut-il choisir,...Etc)

je t'ai donné des idées, des directions à suivre, à toi d'intégrer ça dans ta macro. je ne sais pas ce que tu appelle "ta macro" car je ne t'ai rien donné de complet

ma macro classeurs 2 c'est bien celle qui contient : if C = nothing ou je t'ai proposé d'ajouter un test sur la colonne F

If C Is Nothing Then
If Workbooks("Classeur1.xlsx").Sheets("Projet & Production").Cells(n, 6) like "DEMANDE DE CHANGEMENT*" then


Question : la variable SelectionAno n'est jamais initialisée! (If SelectionANO = "oui" Then)


a suivre

GIBI
 
Dernière édition:
Re : Macro de Recuperation de données d'un classeur

Bonjour GIBI,

Oui le Fichier ARS represente le classeur1 , quand tu ouvre il faut choisir les incident ID declarée depuis - de 7 jours de la date ou on n'est par exemple si on nest le 17 lui il va mettre ceux qui date de a partir du 10 jusqu'au 17.
Pour la boucle:
If C Is Nothing Then
If Workbooks("Classeur1.xlsx").Sheets("Projet & Production").Cells(n, 6) like "DEMANDE DE CHANGEMENT*" then je narrive pas a savoir ou le mettre exactement par rapport a mon code et meme si le met il met debogage eurreur d'execution 9
While Workbooks("Classeur1.xlsx").Sheets("Projet & Production").Cells(Ligne, 2) <> "".Je suis perdu .
- la variable SelectionAno n'est jamais initialisée! (If SelectionANO = "oui" Then)
c'etait ça que j'avais mit au debut avant de poster ma question pour pouvoir faire ma selection ,mais ca ne marche et cette macro que j'avais appelé SuiviANOSelectionDAnomalies.J'ai mis en couleur rouge les demandes qui doivent aller sur le classeur 3 en jaune ceux qui sont dans le 1 et ds le 2 car si ils sont dans les deux il ne passe rien, aussi et (ci joint le format du classeur 3 que je souhaitrai avoir)
Merci pour ton aide et remercie toute ses personnes qui sont pour aider au gens de trouver des solution a leurs problémes. .
 

Pièces jointes

Dernière édition:
Re : Macro de Recuperation de données d'un classeur

bonsoir,

j'ai fais des modifications dans le code de la macro : c'est un bord... donc j'ai fait comme j'ai pu.

plein de variables non initialisées dont IncedentId, les ligne en rouge on des dates > 7 jours===> normal que rien ne marche.

attention dans le test d'écart de date j'ai mis 200

If ClasseurArs.Cells(n, 6) Like "DEMANDE DE CHANGEMENT*" _
And DateDiff("d", _
Format(ClasseurArs.Cells(n, 20), "dd/mm/yyyy"), _
Format(DateAlerteCLASSEUR1, "dd/mm/yyyy")) < 200 _
Then

je te conseille :

d'indenter ton code quand tu écris sinon c'est illisible.
de tester en pas à pas (F8) pour vérifier le fonctionnement et l'alimentation des données.
N’hésite pas à mettre des points d'arrêt (F9) pour sauter des séquences (F5).

Une astuce : quand tu es en pas à pas tu peux déplacer la flèche jaune (reculer ou avancer) : cela permet de reprendre une séquence ou de forcer l'exécution.

et surtout de définir clairement ce que tu veux faire avant de te lancer dans des macros


A toi de jouer maintenant, tu as tous les éléments pour terminer

Bon courage
 

Pièces jointes

- 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
4
Affichages
103
Réponses
3
Affichages
193
Réponses
12
Affichages
361
Retour