Remplacement automatique de noms contenus dans une feuille et un classeur diffe
la_bavaroise
Messages postés24Date d'inscriptionmercredi 14 septembre 2005StatutMembreDernière intervention22 novembre 2005
-
26 sept. 2005 à 12:24
Tuning Max
Messages postés314Date d'inscriptionmercredi 15 juin 2005StatutMembreDernière intervention31 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
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
A voir également:
Remplacement automatique de noms contenus dans une feuille et un classeur diffe
Tuning Max
Messages postés314Date d'inscriptionmercredi 15 juin 2005StatutMembreDernière intervention31 août 20061 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
aieeeuuuuu
Messages postés698Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention20 mai 20113 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.
la_bavaroise
Messages postés24Date d'inscriptionmercredi 14 septembre 2005StatutMembreDernière intervention22 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
la_bavaroise
Messages postés24Date d'inscriptionmercredi 14 septembre 2005StatutMembreDernière intervention22 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
la_bavaroise
Messages postés24Date d'inscriptionmercredi 14 septembre 2005StatutMembreDernière intervention22 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
la_bavaroise
Messages postés24Date d'inscriptionmercredi 14 septembre 2005StatutMembreDernière intervention22 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
Tuning Max
Messages postés314Date d'inscriptionmercredi 15 juin 2005StatutMembreDernière intervention31 août 20061 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
la_bavaroise
Messages postés24Date d'inscriptionmercredi 14 septembre 2005StatutMembreDernière intervention22 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
Tuning Max
Messages postés314Date d'inscriptionmercredi 15 juin 2005StatutMembreDernière intervention31 août 20061 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.