Souci avec une macro

Résolu
Boucle -  
 Boucle -
Bonjour à tous,


Je suis actuellement en pleine bataille avec une macro et cette dernière me résiste.
Je vous explique mon souci.

J'ai un fichier excel de deux pages, chaque page contient environ 4500 lignes.
On y trouve deux colonnes (un numéro dans la première et un commentaire dans la seconde)

Je souhaite prendre la cellule (2:1) de ma 2ème page (donc un numéro), passer sur la première page et recherche ce numéro dans mes lignes, une fois la ligne trouvée remplacer le commentaire de la 1ère page par le commentaire de la seconde page (le commentaire associé au numéro) et je voudrais surtout pouvoir faire le même mouvement pour mes 4500 lignes.

J'ai pensé utiliser une fonction WHILE / WEND mais j'avoue ne pas comprendre comment lancer la recherche et relancer le programme automatiquement jusqu'à avoir analyser mes 4500 lignes.

Merci par avance aux personnes qui prendront le temps de me répondre!



ps: je précise avoir lu plusieurs topic et tuto avant de poster car je n'arrive pas pour autant à comprendre la démarche
A voir également:

4 réponses

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
0
Omelli Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   1
 
Ca y ressemble, mais non !
0
Boucle
 
Non mais manifestement nous avons un problème similaire.
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour

Il y a t il des doublons dans la première feuille ?

Au besoin:
mettre le classeur sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse

0
Boucle
 
Non, je n'ai pas de doublon dans ma 1ere feuille.
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
mettre le classeur sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse
0
Boucle
 
Voici un fichier exemple: http://cjoint.com/data3/3FhnJYDcKJN.htm
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
proposition de macro rapide (4500 lignes)

Option Explicit

Sub actualiser_commentaire()
Dim Derlig As Integer, T_new(), T_old()
Dim D_new As Object
Dim Cptr As Integer, Ref As String * 9, Obs As String
Dim start As Single      ' supprimer àprès essais
start = Timer                 'supprimer àprès essais

'mémorisation des tableaux Excel en Ram
With Sheets(1)
     Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row
     T_new = .Range("A1:C" & Derlig).Value
End With
With Sheets(2)
     Derlig = .Columns("C").Find("*", , , , , xlPrevious).Row
     T_old = .Range("C2:G" & Derlig).Value
End With
'création des couple Reférences -observation du tableau virtuel de la page 1
Set D_new = CreateObject("scripting.dictionary")
For Cptr = 1 To UBound(T_new)
     Ref = T_new(Cptr, 1)
     Obs = T_new(Cptr, 3)
     If Not D_new.exists(T_new(Cptr, 1)) Then D_new.Add Ref, Obs
Next

'parcoure le tableau virtuel de la page 2 Si la ref existe dans le dictionnaire _
on remplace l'ancienne observation par la nouvelle
For Cptr = 1 To UBound(T_old)
     If D_new.exists(T_old(Cptr, 1)) Then T_old(Cptr, 5) = D_new.Item(T_old(Cptr, 1))
 Next
 
 'restitution des nouvelles obsevations en feuille 2
 With Sheets(2)
     .Range("C2:G" & Cptr) = T_old
     .Select
     MsgBox "Actualisation effectuée en: " & Timer - start & " sec." 'supprimer àprès essais
 
 End With
End Sub


Ton classeur avec la macro
https://www.cjoint.com/?3FhpaJOQ2WY
Michel
0
Boucle
 
Merci beaucoup Michel_m c'est exactement ce que je voulais!

Encore merci pour avoir pris de ton temps pour m'aider.
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Content pour toi!

Effectivement les 2 demandes étaient différentes: au temps pour moi !!

A+ et bon WE ensoleillé (espèrons!)
0
Boucle
 
J'ai néanmoins un (petit) souci , je souhaite que ca soit la page 2 qui actualise la page 1 (c'est le contraire actuellement).
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour,

Effectivement, je m'étais croisé les yeux, excuses moi....

macro corrigée
Option Explicit

Sub actualiser_commentaire()
Dim Derlig As Integer, T_new(), T_old()
Dim D_new As Object
Dim Cptr As Integer, Ref As String * 9, Obs As String

'mémorisation des tableaux Excel en Ram
With Sheets(1)
     Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row
     T_old = .Range("A1:C" & Derlig).Value
End With
With Sheets(2)
     Derlig = .Columns("C").Find("*", , , , , xlPrevious).Row
     T_new = .Range("C2:G" & Derlig).Value
End With
'création des couple Reférences -observation du tableau virtuel de la page 2
Set D_new = CreateObject("scripting.dictionary")
For Cptr = 1 To UBound(T_new)
     Ref = T_new(Cptr, 1)
     Obs = T_new(Cptr, <gras>5)</gras>
     If Not D_new.exists(T_new(Cptr, 1)) Then D_new.Add Ref, Obs
Next

'parcoure le tableau virtuel de la page 1 Si la ref existe dans le dictionnaire _
on remplace l'ancienne observation par la nouvelle
For Cptr = 1 To UBound(T_old)
     If D_new.exists(T_old(Cptr, 1)) Then T_old(Cptr, 3) = D_new.Item(T_old(Cptr, 1))
 Next
 
 'restitution des nouvelles obsevations en feuille 1
 With Sheets(1)
     .Range("A1:C" & Cptr) = T_old
     .Select
 End With
End Sub
0
Boucle
 
Bonjour,

La macro fonctionne bien dans mon fichier test mais une fois reportée sur mon "vrai" tableur elle ne veut plus m'aider!

la ligne => If Not D_new.exists(T_new(Cptr, 1)) Then D_new.Add Ref, Obs pose problème.
Le problème doit venir de moi car j'ai voulu modifier la plage de sélection de la page 1, la passant de (A1,C) à (C4,E).

Voici le lien de mon fichier => http://cjoint.com/data3/3FkjjmVQIbw.htm


Option Explicit

Sub actualiser_commentaire()
Dim Derlig As Integer, T_new(), T_old()
Dim D_new As Object
Dim Cptr As Integer, Ref As String * 9, Obs As String

'mémorisation des tableaux Excel en Ram
With Sheets("Base de donnée commentaire")
Derlig = .Columns("C").Find("*", , , , , xlPrevious).Row
T_old = .Range("C4:E" & Derlig).Value
End With
With Sheets("MAJ")
Derlig = .Columns("C").Find("*", , , , , xlPrevious).Row
T_new = .Range("C2:G" & Derlig).Value
End With
'création des couple Reférences -observation du tableau virtuel de la page 2
Set D_new = CreateObject("scripting.dictionary")
For Cptr = 1 To UBound(T_new)
Ref = T_new(Cptr, 1)
Obs = T_new(Cptr, 5)
If Not D_new.exists(T_new(Cptr, 1)) Then D_new.Add Ref, Obs
Next

'parcoure le tableau virtuel de la page 1 Si la ref existe dans le dictionnaire _
on remplace l'ancienne observation par la nouvelle
For Cptr = 1 To UBound(T_old)
If D_new.exists(T_old(Cptr, 1)) Then T_old(Cptr, 3) = D_new.Item(T_old(Cptr, 1))
Next

'restitution des nouvelles obsevations en feuille 1
With Sheets("Base de donnée commentaire")
.Range("C4:E" & Cptr) = T_old
.Select
End With
End Sub
0