VBA transfert d'infos

alicekati

XLDnaute Nouveau
Bonjour,

J'aurais vraiment besoin d'un coup de main pour modifier le VBA de mon fichier. :confused:

Le but du fichier est de montrer les informations à modifier dans un tarif; ces informations sont exportées d'un autre logiciel.

Quand je concatène, 3 feuilles sont créées listant les articles où certaines informations sont manquantes (code, poids, désignation). Jusqu'à là tout va bien. Maintenant, j'aurais besoin de définir des plages avec des noms dans ces 3 feuilles, le problème est que chaque fois que je concatène, les feuilles sont régénerées et du coup les noms sont perdus.

La question : comment modifier mon macro pour qu'au lieu de supprimer et regénérer mes feuilles, on fait un ClearContents et vient recoller les informations dans les feuilles, ainsi gardant mes noms? :eek:

J'espère avoir été assez claire.

Merci d'avance pour les éventuelles idées :eek:
 

Pièces jointes

  • tarif test.xlsm
    42.9 KB · Affichages: 66

alicekati

XLDnaute Nouveau
Re : VBA transfert d'infos

J'ai essayé avec le code suivant :

Public Sub VentilDonnees()
Dim derlign
derlign = Sheets("CONCATENATION").Cells(10000, 2).End(xlUp).Row
Dim i
Application.ScreenUpdating = False

On Error Resume Next
Application.DisplayAlerts = False
Sheets("NC EAN").Range("A2:H10000").Select
Selection.ClearContents
Sheets("NC DESIGN").Range("A2:H10000").Select
Selection.ClearContents
Sheets("NC POIDS").Range("A2:H10000").Select
Selection.ClearContents
Application.DisplayAlerts = True

Sheets("CONCATENATION").Select
Range(Cells(ligne, 2), Cells(ligne, dernval)).Select
Selection.Copy
Sheets("NC EAN").Select
Range(Cells(ligne, 2), Cells(ligne, dernval)).Select
ActiveSheet.Paste

For i = derlign To 2 Step -1
If Cells(i, 2) <> "NC" Then
Cells(i, 2).EntireRow.Delete
End If
Next i

Sheets("CONCATENATION").Select
Range(Cells(ligne, 2), Cells(ligne, dernval)).Select
Selection.Copy
Sheets("NC DESIGN").Select
Range(Cells(ligne, 2), Cells(ligne, dernval)).Select
ActiveSheet.Paste
For i = derlign To 2 Step -1
If Cells(i, 5) <> "NC" Then
Cells(i, 5).EntireRow.Delete
End If
Next i

Sheets("CONCATENATION").Select
Range(Cells(ligne, 2), Cells(ligne, dernval)).Select
Selection.Copy
Sheets("NC POIDS").Select
Range(Cells(ligne, 2), Cells(ligne, dernval)).Select
ActiveSheet.Paste
For i = derlign To 2 Step -1
If Cells(i, 6) <> "NC" Then
Cells(i, 6).EntireRow.Delete
End If
Next i

Application.ScreenUpdating = True
End Sub

Mais quand je lance le macro, la feuille "CONCATENATION" est vide :/
 

gosselien

XLDnaute Barbatruc
Re : VBA transfert d'infos

Bonjour

tu peux effcer comme tu le fais et tu renommes ensuite (surtout que le nombre de lignes doit changer, donc autant effacer comme tu fais pui sdonner un nom à chaque zone )



après ton next i
........
next i

Set aa = Range("A1").CurrentRegion 'zone de table
ActiveWorkbook.Names.Add Name:="table1", RefersTo:=aa ' nommer cette zone

sheets("conca.......
 

alicekati

XLDnaute Nouveau
Re : VBA transfert d'infos

Bonjour Gosselien,

Merci pour ta réponse rapide :)

Il faut mettre ça après chaque "next i"?

Pour le moment le macro supprime les valeurs mais ne fait pas grande chose d'autre :/

Je débute vraiment et je suis dans la phase où on copie les bouts de code et essaie de les modifier (sans forcément comprendre pourquoi ça marche/ ne marche pas)...

Merci encore :D
 

alicekati

XLDnaute Nouveau
Re : VBA transfert d'infos

Ah, j'ai pas été très claire peut-être :/ pardon

En fait les noms des plages je vais les créer plus tard ; mon souci dans le code est de garder les feuilles d'origine quand je lance le macro au lieu de les régénerer chaque fois.

Je pense qu'il faut supprimer les valeurs dans ces feuilles pour ensuite coller les informations de la feuille "concatenation". Mais pour le moment mon code supprime les 3 feuilles et les régénère à partir des informations dans la feuille "concatenation".

(En gros je pense qu'il s'agit de bien parametrer un ClearContents et un copier-coller)

Merci :)
 

alicekati

XLDnaute Nouveau
Re : VBA transfert d'infos

Je relance au cas où quelqu'un aurait une petite idée.

J'ai essayé de retravailler le code de façon simple. Pour le moment ça marche jusqu'au copier-coller. Il y a apparemment un bug sur la ligne "Sheets("CONCATENATION").Range(Cells(ligne, 2), Cells(ligne, dernval)).Select", mais je ne le vois pas :confused:

C'est un véritable casse-tête
 

Pièces jointes

  • tarif test.zip
    138.6 KB · Affichages: 40

alicekati

XLDnaute Nouveau
Re : VBA transfert d'infos

Oui bien sûr.

D'abord des informations sont entrées dans les feuilles "Tarif" et "New".

En premier lieu il faut copier tous les informations de "Tarif" et de "New" et les coller dans la feuille "concatenation".

Puis je veux que copier toutes les lignes (de la feuille "concatenation") où le gencode et marqué "NC" et coller dans la feuille "NC EAN"

Après de faire la même chose pour les lignes où le poids est marqué "NC" dans la feuille "NC poids"

Et finalement pareil pour les lignes où la désignation est "NC" dans la feuille "NC design".

Je parlais de plages nommées car, à la base le code faisait tout cela, mais il le faisait en générant les feuilles "NC EAN" etc lui même. J'aimerais tout simplement que le code colle les informations dans les trois feuilles "NC..." pour que je n'aie pas à renommer les plages chaque fois pour faire ce que je faire par la suite.

Désolée si j'ai un peu du mal à m'expliquer (le français n'est pas ma 1ère langue)

Merci en tout cas :)
 

alicekati

XLDnaute Nouveau
Re : VBA transfert d'infos

Bonjour Gosselien,

Merci énormément! J'ai testé en mettant des plages nommées et lançant ton code et cela marche super bien, sans effacer mes noms.

Je débute vraiment, donc je n'aurais jamais su faire cela. :) Va falloir que je m'achète "VBA pour les nuls" et que je travaille tout ça!

Merci encore :) à +
 

Discussions similaires

Réponses
14
Affichages
975