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 à tous

Une version passablement modifiée.

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,

Rechercher des sujets similaires à "petite coquille macro reajuster lignes"