Dupliquer ligne + modification cellule (Compta)

niguleseo

XLDnaute Nouveau
Bonjour,

Je me heurte à quelques problèmes excel afin d'optimiser mon import comptable.

En effet, sur une feuille excel j'ai besoin de dupliquer chaque ligne + modifier le contenu d'une ligne qui sera toujours identique (même valeur) (voir le fichier qui est beaucoup plus parlant).

Pour la duplication de la ligne, j'ai trouvé sur ce même forum une macro qui fonctionne à merveille:

Sub test()
ligne = 1
tablo = Range("A1:AA" & Range("A65536").End(xlUp).Row)
For n = LBound(tablo, 1) To UBound(tablo, 1)
For m = 1 To 2
For p = LBound(tablo, 2) To UBound(tablo, 2)
Cells(ligne, p) = tablo(n, p)
Next p
ligne = ligne + 1
Next
Next

End Sub

Mais elle ne s'occupe de changer les valeurs dans les cellules.

Pouvez vous m'aider dans ce sens ?

Merci à tous et bonne journée!

Cordialement,
 

Pièces jointes

  • aide excel.xlsx
    10.8 KB · Affichages: 72

Modeste

XLDnaute Barbatruc
Bonsoir niguleseo, Cordoba78,

J'ai exactement le même problème que vous
Et bien peut-être l'un de vous deux pourrait-il réexpliquer le souci ... Si les réponses sont rares, c'est que la chose est impossible (ou trop peu claire, peut-être?)
Dans le fichier de niguleseo, les données représentent la situation de départ ou le résultat attendu?
Quelle est la ligne à dupliquer?
Où figure la valeur à modifier? Comment déterminer la valeur qu'elle doit prendre?
Dans "+ modifier le contenu d'une ligne qui sera toujours identique" on parle d'une ligne ... ou d'une cellule?
 

Cordoba78

XLDnaute Nouveau
Bonjour et merci pour votre réponse,
Pour ma part, je souhaiterai réaliser les actions suivantes

Dupliquer 1 fois chaque ligne différente du fichier et modifier dans la ligne dupliquée sur les colonnes Y et Z un code transporteur et le nom du transporteur.

Exemple 1 :

Order number : 1610-000009066 = 2 lignes avec code transporteur car même si c'est la même commande il y a 2 clients différents (Recipients last name et Recipients first name sont différents) livrés à 2 adresses différentes

Order number : 1610-000009070 = 1 ligne à générer avec le code transporteur

Order number : 1610-000009071 = 1 ligne à générer avec le code transporteur car même client et même adresse.

J'ai mis 3 exemples dans les fichiers AVANT/APRES n'hésitez pas si vous avez des questions...

upload_2016-10-31_16-18-46.png
 

Pièces jointes

  • AVANT.xlsx
    11.8 KB · Affichages: 50
  • APRES.xlsx
    12.3 KB · Affichages: 50

Modeste

XLDnaute Barbatruc
Bonsoir Cordoba78,

Comment détermine-t-on qu'une ligne est différente (ou pas)? Le contenu des 37 colonnes, uniquement la combinaison N° d'ordre/Nom/Prénom ... ou une autre combinaison encore? Tu parles aussi de l'adresse!?

Pour la ligne en quadruple exemplaire, que représente la ligne en vert? Pour les autres, c'est dans cette ligne-là que tu modifies le transporteur ... ici tu l'as fait sur la ligne suivante!? La position de la ligne dupliquée est-elle importante?
Ce qui te paraît évident l'est moins pour nous, ne l'oublie pas. Le AVANT-APRES est une bonne idée, mais on a (ou j'ai) besoin d'un peu plus d'explications.
 

Cordoba78

XLDnaute Nouveau
Bonjour Modeste,

Autant pour moi on peut considérer que la ligne est différente si le champ Address1+City+ZIP Code sont différents car cela signifie qu'il faudra effectuer une nouvelle livraison et donc ajouter une course supplémentaire et donc une ligne avec un code transport.

Effectivement, je viens de corriger le fichier APRES, la ligne verte correspond a la ligne contenant le code transport, la position n'est pas forcément importante, mais serait plus facile à vérifier en cas de besoin.

Est-ce que c'est plus clair ?

upload_2016-11-1_11-20-11.png
 

Pièces jointes

  • APRES.xlsx
    12.4 KB · Affichages: 52

Modeste

XLDnaute Barbatruc
Bonjour Cordoba78,

Et c'est ce que tu entends par "exactement le même problème" que celui exprimé par niguleseo :eek:


Si tu n'as pas à traiter un fichier de 200.000 lignes, tu peux essayer ce qui suit:

  • clic droit sur l'onglet de la feuillle concernée (dans le fichier "AVANT") > Visualiser le code
  • copie-colle les lignes ci-dessous dans la fenêtre qui s'affiche
  • en laissant le curseur n'importe où dans le code copié, appuie sur la touche F5
  • vérifie si le résultat est conforme à ton souhait
VB:
Sub dupliquerLignes()
Dim tabloLignes()
Set liste = CreateObject("scripting.dictionary")
For lig = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    If Not liste.exists(Cells(lig, 1) & "µ" & Cells(lig, 12) & "µ" & Cells(lig, 15) & "µ" & Cells(lig, 16)) Then _
        liste(Cells(lig, 1) & "µ" & Cells(lig, 12) & "µ" & Cells(lig, 15) & "µ" & Cells(lig, 16)) = lig
Next lig
ReDim tabloLignes(1 To liste.Count)
tabloLignes = liste.items
Application.ScreenUpdating = False
For x = UBound(tabloLignes) To 0 Step -1
    Rows(tabloLignes(x)).Copy
    Rows(tabloLignes(x) + 1).Insert shift:=xlDown
    Cells(tabloLignes(x) + 1, 25) = 219032
    Cells(tabloLignes(x) + 1, 26) = "UPS EXPRESS"
Next x
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
Si le volume de données à traiter est nettement plus conséquent, ça risque de prendre du temps ... Reviens nous dire si ce devait être le cas ... ou si je m'étais fourvoyé quelque part :rolleyes:
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 190
Messages
2 107 002
Membres
109 735
dernier inscrit
Mounskad