Petite coquille dans ma macro pour réajuster des lignes
Bonjour j'espère que tout le monde va bien !,
Besoin d'une petite aide s'il vous plait. J'ai une macro qui me permets de réajuster proprement cellules, colonnes et lignes de fichiers excel pas trop exploitables. Cela fonctionne pour les deux exemples du fichier en PJ, mais pour "l'exemple 3" cela ne fonctionne pas, vous pouvez voir en lançant la macro sur l'exemple 3 que cela ne se réajuste pas très bien. Je pense qu'il y a un petit souci dans la macro, si quelqu'un peut m'aider à rectifier cela ? Merci d'avance à vous :) !
(dites moi si vous n'avez pas accès au code de la macro)
Bonjour Juju, bonjour le forum,
J'ai lancé la macro en adaptant la ligne :
Set ws = ThisWorkbook.Worksheets("exemple 3 (fonctionne pas)")
Et je ne vois pas ce qui ne vas pas le résultat me semble pareil aux autres obglets.
"Cela ne fonctionne pas" n'est pas assez précis. Il y a-t-il un bug ? Si oui, lequel et sur quelle ligne ? Sinon dis-nous avec précision quel est le problème...
[Édition]
Pardon, je navet pas changé le nom de l'onglet plus pas dans le code... Malgré tout, mes questions restent pertinentes...
Re,
Ton code modifié (j'ai supprimé les Select inutiles) :
Sub macro_formatage()
Dim OT As Worksheet '<--- changement ici
Dim ws As Worksheet '<--- changement ici
Dim LastRow As Long
Dim ET As Variant
Dim boucle_source As Long
Dim i, ii, iii As Long
Dim z As Long
Dim org As String
Dim codeorg As String
Dim canal As String
Dim codecanal As String
Set OT = Worksheets("target") '<--- changement ici
Set ws = ThisWorkbook.Worksheets("exemple 3 (fonctionne pas)")'à adapter
OT.Cells.ClearContents '<--- changement ici
LastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row + 1
'<--- changement ici
ET = Array("Org.commerciale", "Canal distrib.", "Type", "Type condition", "T", "Qté échel.", "UQ", "Montant", "Unité", "par", "UQ", "Déb. val.", "Fin valid.", "Limite inf", "Lim.supér.", "Fin")
For i = 0 To UBound(ET)
OT.Cells(1, i + 1).Value = ET(i)
Next
'en-tete : gras + gris
With OT.Range("A1:M1")
.Font.Bold = True
With .Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.249977111117893
.PatternTintAndShade = 0
End With
End With
Debug.Print (Round((LastRow / 24)))
'****************************produit 1 **************************************
For boucle_source = 1 To Round((LastRow / 24))
'i, ii, iii (source)
If boucle_source = 1 Then
'pour commencer, on recupere sur la ligne 1, org dans la source
z = 1
'pour commencer, on écrit sur la ligne 2 dans la target
i = 2
ii = 10
iii = 11
Else
'boucle_target = 2, on recupere sur la ligne 24, org dans la source
z = ws.Cells(z + 1, 5).End(xlDown).Row '<--- changement ici
If z = 1048576 Then Exit Sub '<--- changement ici
'boucle_target = 2, on écrit sur la ligne 5 dans la target
i = i + 1
ii = z + 9 '<--- changement ici
iii = ii + 1
End If
'(target) premier pavé(source) produit 1
'col Org.commerciale
OT.Cells(i, 1).Value = ws.Cells(z, 5).Value
'Canal distrib.
OT.Cells(i, 2).Value = Trim(ws.Cells(z + 1, 5).Value)
OT.Cells(i, 3).Value = ws.Cells(ii, 2).Value
OT.Cells(i, 4).Value = ws.Cells(ii, 4).Value
'autres colonnes
OT.Cells(i, 8).Value = ws.Cells(iii, 9).Value
OT.Cells(i, 9).Value = ws.Cells(iii, 10).Value
OT.Cells(i, 10).Value = ws.Cells(iii, 11).Value
OT.Cells(i, 11).Value = ws.Cells(iii, 12).Value
OT.Cells(i, 12).Value = ws.Cells(iii, 13).Value
OT.Cells(i, 13).Value = ws.Cells(iii, 14).Value
'****************************produit 2 **************************************
i = i + 1
ii = ii + 4
iii = iii + 4
'(target) premier pavé(source) produit 2
'col Org.commerciale
OT.Cells(i, 1).Value = ws.Cells(z, 5).Value
'Canal distrib.
OT.Cells(i, 2).Value = ws.Cells(z + 1, 5).Value
OT.Cells(i, 3).Value = ws.Cells(ii, 2).Value
OT.Cells(i, 4).Value = ws.Cells(ii, 4).Value
'autres colonnes
OT.Cells(i, 8).Value = ws.Cells(iii, 9).Value
OT.Cells(i, 9).Value = ws.Cells(iii, 10).Value
OT.Cells(i, 10).Value = ws.Cells(iii, 11).Value
OT.Cells(i, 11).Value = ws.Cells(iii, 12).Value
OT.Cells(i, 12).Value = ws.Cells(iii, 13).Value
OT.Cells(i, 13).Value = ws.Cells(iii, 14).Value
'****************************produit 3 **************************************
i = i + 1
ii = ii + 4
iii = iii + 4
'(target) premier pavé(source) produit 3
'col Org.commerciale
OT.Cells(i, 1).Value = ws.Cells(z, 5).Value
'Canal distrib.
OT.Cells(i, 2).Value = ws.Cells(z + 1, 5).Value
OT.Cells(i, 3).Value = ws.Cells(ii, 2).Value
OT.Cells(i, 4).Value = ws.Cells(ii, 4).Value
'autres colonnes
OT.Cells(i, 8).Value = ws.Cells(iii, 9).Value
OT.Cells(i, 9).Value = ws.Cells(iii, 10).Value
OT.Cells(i, 10).Value = ws.Cells(iii, 11).Value
OT.Cells(i, 11).Value = ws.Cells(iii, 12).Value
OT.Cells(i, 12).Value = ws.Cells(iii, 13).Value
OT.Cells(i, 13).Value = ws.Cells(iii, 14).Value
'****************************produit 4 **************************************
i = i + 1
ii = ii + 4
iii = iii + 4
'(target) premier pavé(source) produit 4
'col Org.commerciale
OT.Cells(i, 1).Value = ws.Cells(z, 5).Value
'Canal distrib.
OT.Cells(i, 2).Value = ws.Cells(z + 1, 5).Value
OT.Cells(i, 3).Value = ws.Cells(ii, 2).Value
OT.Cells(i, 4).Value = ws.Cells(ii, 4).Value
'autres colonnes
OT.Cells(i, 8).Value = ws.Cells(iii, 9).Value
OT.Cells(i, 9).Value = ws.Cells(iii, 10).Value
OT.Cells(i, 10).Value = ws.Cells(iii, 11).Value
OT.Cells(i, 11).Value = ws.Cells(iii, 12).Value
OT.Cells(i, 12).Value = ws.Cells(iii, 13).Value
OT.Cells(i, 13).Value = ws.Cells(iii, 14).Value
Next boucle_source
'***********************************************************************
'l'execution tourne, resultat final dans l'onglet target
OT.Columns("A:M").EntireColumn.AutoFit
OT.Select
End Sub
Remarque : si tu ne boucles que sur les 4 premiers produits pourquoi des variables de type Long ?!...
Bonjour à tous!
juju13000, juste une petite correction sur le fichier qui te demandera de quelle feuille proviennent les données que tu auras à traiter les résultats se feront TOUJOURS sur la feuille "target"
Bonne journée!
Oupps ! Bonjour ThauThème je n'avais pas vu que tu avais rectifier le tir...
Bonjour ThauThème,
Merci beaucoup d'avoir de ton temps pour m'aider. J'ai essayé tes corrections, malheureusement la macro ne retourne pas le bon nombre de lignes attendues mais a résolu à moitié le problème. La macro de yal_excel a répondu à mes attentes à 100%. Encore merci pour ton aide et passe un bon week-end ! ;)
Julien,
Bonjour Nordik_Nation,
J'ai testé ton fichier, mais au moment de rentrer le nom de la feuille cela bug et ne fonctionne pas... finalement la macro de yal_excel a très bien fonctionné, merci d'avoir pris de ton temps pour m'aider, en espérant que tu passeras un bon week-end ! :). Encore merci
Julien,
Bonjour Yal_excel,
Merci pour ton fichier, j'ai testé et cela fonctionne très bien !! Merci beaucoup pour ton aide, cela va vraiment m'aider. Passe un bon week-end ! :)
Content que cela fonctionne. C'est améliorable en utilisant un tableau structuré sur la feuille target
Re yal_excel,
D'accord je vais regarder, merci. D'ailleurs j'ai un dernier petit pb. Vous voyez dans les exemples désordonnés on a des cellules "ZPR1" ou ZPWEE", je voudrais bien en faire une colonne, en cellule C ou D mais j'ai tout désordonné, je n'y arrive plus. Vous pensez pouvoir m'aider svp ? Sans vouloir vous déranger. Bonne soirée.
Julien,
Si j'ai bien compris
bonsoir yal_excel,
oui c'était exactement cela, grand merci, c'est gentil ! bonne soirée
julien,