Remplacement automatique de noms contenus dans une feuille et un classeur diffe

la_bavaroise Messages postés 24 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 22 novembre 2005 - 26 sept. 2005 à 12:24
Tuning Max Messages postés 314 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 31 août 2006 - 27 sept. 2005 à 15:56
Bonjour a tous,
Voila, peut etre qqun trouvera la solution a mon probleme, evidemment cela ne va pas sans dire que je debute.

Je voudrais donc construire une macro qui me change automatiquement les noms contenus dans mes cases. En fait, Jai deux feuilles: l'une,WWH, sur laquelle les anciens noms sont situes dans la colonne A, et leur nouveaux noms correspondant sont situes dans la colonne D.

Je voudrais donc prendre ces nouveaux noms, les inserer a la place des anciens dans la colonneC dans ma deuxieme feuille Data situes dans un classeur different

Voici mon code: je crois quil me manque pleins dinfo
si ce nest pas clair, nhesiter pas a me le faire savoir
Merci davance

Sub Veränderung()

Dim i As Integer, j As Integer


Workbooks("WWH").Sheet_Quelle(1) = "WWH"
Workbooks("Data 2005_neu_Probe").Sheet_Quelle(2) = "Data"


Sheet_Quelle_col(1) = "D"
Sheet_Quelle_col(2) = "C"


Sheet_Quelle_Ende = ActiveSheet.Cells(Rows.Count, Sheet_Quelle_col).End(xlUp).Row

Sheet_Quelle(1).Select
Sheet_Quelle(2).Select


For i = 1 To Sheet_Quelle_Ende
If Sheet_Quelle(1).Cells(i, 3).Value = Sheet_Quelle(2).Cells(i, 3).Value Then
Sheet_Quelle(2).Cells(i, 3).Value = Sheet_Quelle(1).Cells(i, 4).Value
End If
Next i

End Sub

9 réponses

Tuning Max Messages postés 314 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 31 août 2006 1
26 sept. 2005 à 15:19
Bonjour,
Si j'ai bien compris, tu as deux feuilles sur un classeur. L'une avec les données, l'autre avec les correspondances et les modifications.
Dans le principe, j'ai fait deux boucles ; la première parcours la feuille "WWH" et contrôle que les cellules des colonnes A et D ne soit pas vide.


Si tel est le cas, je récupère leur valeur dans deux variables Val_Old et Val_New avant d'effectuer ma deuxième boucle sur la deuxième feuille "Data" ou je modifie la valeur de la cellule de la colonne C si sa valeur est égale à ma variable Val_Old .


J'espère avoir été suffisamment explicite dans mon explication et avoir réussi à t'aider un peu






Sub Veränderung()
Dim Sheet_Quelle_col As String
Dim i As Integer, j As Integer, Val_Old As String, Val_New As String, Compteur


For i = 1 To 20
With Worksheets("WWH")
If .Cells(i, 1).Value <> "" And .Cells(i, 4).Value <> "" Then
Val_Old = .Cells(i, 1).Value
Val_New = .Cells(i, 4).Value
For j = 1 To 20
If Worksheets("Data").Cells(j, 3).Value = Val_Old Then
Worksheets("Data").Cells(j, 3).Value = Val_New
End If
Next j
End If
End With
Next i


End Sub
0
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
26 sept. 2005 à 15:35
Salut
Quel est ton probleme exactement ?

est-ce pour passer d'un classeur à l'autre ?

Ce que je peux te conseiller, c'est de faire la manipulation que tu veux à la main apres avoir debuté l'enregsistrement d'une macro. tu pourras ensuite aller voir le code de ce que tu as fait et il ne te restera plus qu'a l'adapter selon tes besoins.
0
la_bavaroise Messages postés 24 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 22 novembre 2005
27 sept. 2005 à 09:50
Bonjour les gars,


desolee de repondre si tardivement, jetais sur un autre projet hier.


Bref, en effet, la boucle ne marche pas, je crois que cest un probleme de classeur puisque en effet mes deux feuilles appartiennent a deux classeurs differents...
Dois-je activer dabord le classeur dans lequel je me trouve, ou le selectionner?

Merci encore pour vos conseils avertis...!
Bonne journee
Voici mon dernier code

Option Explicit
Public Sheet_Quelle_col

Sub Veränderung()
Sheet_Quelle_col = "C"
Dim i As Integer, j As Integer, Val_Old As String, Val_New As String, Compteur


For i = 1 To ActiveSheet.Cells(Rows.Count, Sheet_Quelle_col).End(xlUp).Row
With Workbooks("Veränderung der Namen2").Worksheets("Umstellung")
If .Cells(i, 1).Value <> "" And .Cells(i, 4).Value <> "" Then
Val_Old = .Cells(i, 2).Value
Val_New = .Cells(i, 3).Value
For j = 1 To ActiveSheet.Cells(Rows.Count, Sheet_Quelle_col).End(xlUp).Row
If Worksheets("Data").Cells(j, 3).Value = Val_Old Then
Worksheets("Data").Cells(j, 3).Value = Val_New
End If
Next j
End If
End With
Next i


End Sub
0
la_bavaroise Messages postés 24 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 22 novembre 2005
27 sept. 2005 à 09:50
Bonjour les gars,


desolee de repondre si tardivement, jetais sur un autre projet hier.


Bref, en effet, la boucle ne marche pas, je crois que cest un probleme de classeur puisque en effet mes deux feuilles appartiennent a deux classeurs differents...
Dois-je activer dabord le classeur dans lequel je me trouve, ou le selectionner?

Merci encore pour vos conseils avertis...!
Bonne journee
Voici mon dernier code

Option Explicit
Public Sheet_Quelle_col

Sub Veränderung()
Sheet_Quelle_col = "C"
Dim i As Integer, j As Integer, Val_Old As String, Val_New As String, Compteur


For i = 1 To ActiveSheet.Cells(Rows.Count, Sheet_Quelle_col).End(xlUp).Row
With Workbooks("Veränderung der Namen2").Worksheets("Umstellung")
If .Cells(i, 1).Value <> "" And .Cells(i, 4).Value <> "" Then
Val_Old = .Cells(i, 2).Value
Val_New = .Cells(i, 3).Value
For j = 1 To ActiveSheet.Cells(Rows.Count, Sheet_Quelle_col).End(xlUp).Row
If Worksheets("Data").Cells(j, 3).Value = Val_Old Then
Worksheets("Data").Cells(j, 3).Value = Val_New
End If
Next j
End If
End With
Next i


End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
la_bavaroise Messages postés 24 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 22 novembre 2005
27 sept. 2005 à 09:51
Bonjour les gars,


desolee de repondre si tardivement, jetais sur un autre projet hier.


Bref, en effet, la boucle ne marche pas, je crois que cest un probleme de classeur puisque en effet mes deux feuilles appartiennent a deux classeurs differents...
Dois-je activer dabord le classeur dans lequel je me trouve, ou le selectionner?

Merci encore pour vos conseils avertis...!
Bonne journee
Voici mon dernier code

Option Explicit
Public Sheet_Quelle_col

Sub Veränderung()
Sheet_Quelle_col = "C"
Dim i As Integer, j As Integer, Val_Old As String, Val_New As String, Compteur


For i = 1 To ActiveSheet.Cells(Rows.Count, Sheet_Quelle_col).End(xlUp).Row
With Workbooks("Veränderung der Namen2").Worksheets("Umstellung")
If .Cells(i, 1).Value <> "" And .Cells(i, 4).Value <> "" Then
Val_Old = .Cells(i, 2).Value
Val_New = .Cells(i, 3).Value
For j = 1 To ActiveSheet.Cells(Rows.Count, Sheet_Quelle_col).End(xlUp).Row
If Worksheets("Data").Cells(j, 3).Value = Val_Old Then
Worksheets("Data").Cells(j, 3).Value = Val_New
End If
Next j
End If
End With
Next i


End Sub
0
la_bavaroise Messages postés 24 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 22 novembre 2005
27 sept. 2005 à 11:47
Salut a tous,
voici qque chose de peut etre plus coherent mais ca ne fonctionne tjs pas, il tourne dans le vide... peut etre est ce a cause de la feuille Data qui contient plus de 43700 lignes et qui contient egalement des vieux noms qui ne sont pas dans la nvelle liste de "Umstellungen"
Dois je peut etre rajouter un " sinon, ne rien changer"

Merci davance!

Sub Veränderung()
Sheet_Quelle_col = "C"
Dim i As Integer, j As Integer, Val_Old As String, Val_New As String, Compteur


For i = 1 To 300
Workbooks("Veränderung der Namen2.xls").Activate
With Worksheets("Umstellungen")
If .Cells(i, 2).Value <> "" And .Cells(i, 3).Value <> "" Then
Val_Old = .Cells(i, 2).Value
Val_New = .Cells(i, 3).Value
For j = 1 To ActiveSheet.Cells(Rows.Count, Sheet_Quelle_col).End(xlUp).Row
Workbooks("Data 2005_neu3.xls").Activate
If Worksheets("Data").Cells(j, 3).Value = Val_Old Then
Worksheets("Data").Cells(j, 3).Value = Val_New
End If
Next j
End If
End With
Next i


End Sub
0
Tuning Max Messages postés 314 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 31 août 2006 1
27 sept. 2005 à 13:02
Tien essaye donc ce code, je l'ai testé et il marche bien chez moi. Attention je n'ai pas géré dans le cas ou l'un des deux classeurs serait fermé. Il faut qu'il soit tout les deux ouvert ou sinon il te faut rajouter cette ouverture avant l'activation



Sub Veränderung()
Dim Sheet_Quelle_col As String
Dim i As Integer, j As Integer, Val_Old As String, Val_New As String, Compteur


Sheet_Quelle_col = "C"


For i = 1 To 300
Workbooks("Veränderung der Namen2.xls").Worksheets("Umstellungen").Activate
With Workbooks("Veränderung der Namen2.xls").Worksheets("Umstellungen")
If .Cells(i, 2).Value <> "" And .Cells(i, 3).Value <> "" Then
Val_Old = .Cells(i, 2).Value
Val_New = .Cells(i, 3).Value
Workbooks("Data 2005_neu3.xls").Worksheets("Data").Activate
For j = 1 To ActiveSheet.Cells(Rows.Count, Sheet_Quelle_col).End(xlUp).Row
If Worksheets("Data").Cells(j, 3).Value = Val_Old Then
Worksheets("Data").Cells(j, 3).Value = Val_New
End If
Next j
End If
End With
Next i


End Sub
0
la_bavaroise Messages postés 24 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 22 novembre 2005
27 sept. 2005 à 15:22
Salut Tunning max,

alors moi jai un bug avec cette ligne:
For j = 1 To ActiveSheet.Cells(Rows.Count, Sheet_Quelle_col).End(xlUp).Row

tu crois que cest parceke jai environ 60 000 lignes de remplies dans Data?

je sens kon est pas loin mais je ne trouve pas lerreur

ou est ce parceke jai deja declare en Public dans un autre module Sheet_Quelle_col et
Sheet_Quelle_Ende=ActiveSheet.Cells(Rows.Count, Sheet_Quelle_col).End(xlUp).Row
mais normalement, ca ne devrait rien change, non?

il marque Faute 6:Index a lexterieur du champ valable (excuse, traduc a peu pres, c en allemand)

je marrache les cheveux, je ne comprends pas pourquoi i´l nen veut pas !!!

Eh Tunning Max, je te remercie encore, ya tjs toi qui daigne repondre a mes questions, pas interessantes et en plus tjs mal formulees, alors merci beaucoup pour toute ton aide, sincerement
0
Tuning Max Messages postés 314 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 31 août 2006 1
27 sept. 2005 à 15:56
Comme souvent dans ce genre de cas une petite erreure toute bête!
modifie la déclaration de la variable

Sub Veränderung()
Dim Sheet_Quelle_col As String
Dim i, j, Val_Old As String, Val_New As String, Compteur


Maintenant ça devrait marcher!
Je te remercie bien, c'est trop d'honneur
Quand à tes questions, j'ai vu pire comme formulation. Pour t'en convaincre, va faire un tour sur le forum. Par ailleurs, il n'est pas toujours facile d'exprimer par écrit ce que l'ont souhaite faire ou ce qui ce passe à l'écran lorsque l'on développe.
Enfin quand je peux donner un petit coup de main ! Ca me permet de sortir de mes programmations, me changer les idées et parfois même m'en donner de nouvelle ou m'apprendre des choses que je mets en pratique par la suite.
En tout cas n'hésite pas à demander de l'aide, le site est justement fait pour.

@ bientot
0
Rejoignez-nous