VBA - résolution problème pour mettre des palettes dans un camion

AUTRE CHOSE :

j'ai fait une Inputbox et pour supprimer le USF qui demande le nombre de ligne, j'ai mis ce code la For c = 8 To ((Sheets("Données_d'entrée").Range("B" & Rows.Count).End(xlUp).Row - 1) + 7) à la place de ca For c = 8 To Nombre_de_ligne.TextBox1.caption + 7 (c'est à peu près ca je ne me souviens plus du code exact).

Cepedant j'utilisais aussi la textbox de mon ancien USF pour la macro Colisage (dans Modification_NON). Donc j'ai remplacé par Sheets("Données_d'entrée").Range("B" & Rows.Count).End(xlUp).Row - 1 mais c'est là que ca ne marche pas. Le code plante et se mets en débogage.

Une idée ?

Justement pour moi c'était Sh2.Cells(o, 2) = Sh.Cells(c, 28) qui supprimait la désignation du colis.

Non moi j'ai constaté que c'est cette instruction qui remplissait la cellule. En enlevant cette instruction et en laissant Sh2.Cells(D, 2) = Sh.Cells(c, 28) dans la boucle Nbcolis > 0, je n'ai pas le même résultat dans le tableau car B6 et B7 sont vides. Mais c'est peut être cela que vous voulez ?

j'ai essayé de créer une inputbox mais je n'arrive pas à extraire la valeur rentrée pour la mettre dans ma cellule

Vous êtes dans quel code ? la Sub N032_Modification_NON ou dans Sub N011_NbDePanneauxParColis2()

En fait il faut savoir à quel moment vous avez besoin de cette info et si elle doit être disponible pour plusieurs codes ou non. Dans votre fichier, je pense que vous choisissez le nbligne dans ce code --> N01_NbDePanneauxParColis(). Quel est le bouton que vous actionnez au départ ?

Je ne peux plus éxecuter mon code à cause des erreur marqué ci-dessus mais je retiens ce que vous m'avez dis et vérifierais les deux cas pour voir la différence.

j'en ai mis une dans la première feuille pour ne plus demandé le nombre de lignes et enlever le USF car cela encombrait.

Donc je clique sur Nombre de panneaux par colis, la Inputbox s'affiche, je modifie la valeur mise dans la Textbox ou non et j'appuye sur entrée. Là j'aimerais que les valeurs entrée se marquent sur la colonne K.

En les mettant en colonne K cela permettra de les conserver et de voir si on a bien rentrer les bonnes valeurs et aussi de les utiliser pour les autres macro

Pour la Inputbox tout est réglé, j'avia simplement pas spécifier la bonne colonne...

j'en ai mis une dans la première feuille pour ne plus demandé le nombre de lignes et enlever le USF car cela encombrait.

Pourquoi encombrer votre fichier d'une feuille supplémentaire ?

En les mettant en colonne K cela permettra de les conserver et de voir si on a bien rentrer les bonnes valeurs et aussi de les utiliser pour les autres macro

Vous compliquez là....

Il suffit de mettre les deux inputbox dans la macro Sub N01_NbDePanneauxParColis() pour qu'elles soient utilisables dans le code suivant.

Je pense que je me suis mal exprimé :

je n'ai pas créer de nouvelle feuille, j'i mis mon InputBox dans la feuille Données_d'entrée.

La InputBox permet de faire la même chose que mon acienne MsgBox+ deux anciens USF donc je pense que c'est clairement optimisé et plus simple d'utilisation.

Je ne trouve pas que cela complique la chose, avec un simple

Résultat = InputBox("Votre nombre de panneaux pour le colis de " & Sheets("Données_d'entrée").Cells(a, 2).Value & " correspond exactement à " & NbPanneaux_exact & "." & Chr(13) & "Le nombre de panneaux utilisé sera de : " & Nbpanneaux & Chr(13) & Chr(10) & "Validez-vous ce résultat ? ", "Validation de colis", Nbpanneaux)

Sheets("Données_d'entrée").Cells(a, 11).Value = Résultat

Cela donne le résultat de l'InputBox et le mets dans la cellule nécessaire.

Chez moi cela bugue peut être à cause du nombre de panneaux que je n'ai pas.
Au vu de votre fichier, j'aurais placé deux inputbox dans le code N01. Une pour le nombre de panneaux et une pour le nombre de lignes.

Mais bon si c'est ok pour vous, tant mieux

je n'ai pas créer de nouvelle feuille, j'i mis mon InputBox dans la feuille Données_d'entrée.

Dans la feuille Données entrée ?? Pourquoi pas dans le code qui se trouve dans le module ?

Par contre :
- je vous l'ai déjà dit, évitez les accents dans les noms de variable, macro et onglets
- votre variable "resultat" n'est pas déclarée

Avez-vous fait un essai si vous entrez une lettre plutôt qu'un chiffre ou si vous cliquez sur le bouton Annuler ?

Chez moi cela bugue peut être à cause du nombre de panneaux que je n'ai pas.

Au vu de votre fichier, j'aurais placé deux inputbox dans le code N01. Une pour le nombre de panneaux et une pour le nombre de lignes.

En fait je créer une boucle avec

For a = 8 To (Sheets("Données_d'entrée").Range("B" & Rows.Count).End(xlUp).Row - 1)

Et ca me donne ce que je veux donc tout est bon pour moi de ce coté.

Dans la feuille Données entrée ?? Pourquoi pas dans le code qui se trouve dans le module ?

Oui c'est ce que je voulais dire. J'ai mis ce code dans la macro du bouton Nombre de colis par panneaux qui se trouve dans la feuille Données_d'entrée.

Oui c'est vrai je vais changer ca de suite. J'avais un peu la flemme mais pour apprendre il faut faire des efforts. Ma variable résultat est déclaré un peu plus haute, je ne vous avais pas mis tout le code.

J'ai essayer et en effet petit soucis une lettre ou rien fonctionne parfaitement. Mais ne vous embêtez pas pour ca je vais faire quelque chose de mon coté. Merci pour la remarque.

En fait je créer une boucle avec

For a = 8 To (Sheets("Données_d'entrée").Range("B" & Rows.Count).End(xlUp).Row - 1)

Et ca me donne ce que je veux donc tout est bon pour moi de ce coté.

Ok si cela fonctionne pour vous, je ne regarde plus.
Pour le nombre de panneaux que vous créez avec l'userform2 ? C'est aussi Ok ?

Dites moi si je dois regarder quelque chose

Je peux vous transmettre le fichier que j'ai compléter si cela vous intéresse ? pour que nous ayons a peu près la même version. Même si normalement vous avez la même chose que moi.

Je ne suis pas sur d'avoir compris votre question...

Si vous parlez de la modification du nombre de panneaux par colis alors oui elle est faite par l'Inputbox

sinon je ne vois pas désolé

Je peux vous transmettre le fichier que j'ai compléter si cela vous intéresse ? pour que nous ayons a peu près la même version. Même si normalement vous avez la même chose que moi.

Si vous attendez quelque chose de moi, c'est comme vous voulez

Je ne suis pas sur d'avoir compris votre question...Si vous parlez de la modification du nombre de panneaux par colis alors oui elle est faite par l'Inputbox

Oui car j'ai vu dans votre fichier deux userform, une pour le nombre de lignes et une pour le nombre de panneaux

Voici la dernière version que j'ai.

Dans cette version, j'ai passé un peu de temps à simplifier le code en enlevant les doublons et en supprimant des variables qui étais inutile car identique.

C'est une version qui fonctionne plutôt bien sans vraiment de problème jusque là.

Je pense donc que notre problème initiale de Mettre des palettes dans un camion est résolu.

Je pense encore avoir besoin de ce forum et de vos compétences dans un prochain fil mais celui-ci va être clôturé si vous n'y voyez pas d'inconvénient ?

Je prendrais toute remarque sur ma gestion du fil et d'Excel avec plaisir pour améliorer les prochaines discussion.

Merci pour tout.

J'ai repris votre fichier et simplifié votre code N01 comme ci-dessous

Sub N01_NbDePanneauxParColis()
Dim a As Integer
Dim resultat As Variant
Dim NbPanneaux_exact As Integer
Dim Nbpanneaux As Integer

With Sheets("Donnees_d'entree")
    For a = 8 To .Range("B" & Rows.Count).End(xlUp).Row - 1

        NbPanneaux_exact = Format(.Cells(5, 4).Value / .Cells(a, 6).Value, "0.00")
        Nbpanneaux = Int(.Cells(5, 4).Value / .Cells(a, 6).Value)
        resultat = InputBox("Votre nombre de panneaux pour le colis de " & .Cells(a, 2).Value & " correspond exactement a " & NbPanneaux_exact & "." & Chr(13) & "Le nombre de panneaux utilise sera de : " & Nbpanneaux & Chr(13) & Chr(10) & "Validez-vous ce resultat ? ", "Validation de colis", Nbpanneaux)

        If resultat <> "" Then
            .Cells(a, 11).Value = resultat
        Else
            Exit Sub
        End If

    Next a
End With

'------------------MISE EN FORME------------------------
With Sheets("Donnees_d'entree")
    With .Range(.Cells(8, 2), .Cells(a, 11))
        .BorderAround LineStyle:=xlContinuous
        .BorderAround ColorIndex:=0
        .BorderAround Weight:=xlThin

        With .Borders(xlInsideVertical)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .Weight = xlThin
        End With
        With .Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .Weight = xlThin
        End With

    End With

    With .Range(.Cells(a, 2), .Cells(a, 11))
        .BorderAround LineStyle:=xlContinuous
        .BorderAround ColorIndex:=0
        .BorderAround Weight:=xlMedium
    End With

    With .Range(Cells(7, 2), Cells(a, 11))
        .BorderAround LineStyle:=xlContinuous
        .BorderAround ColorIndex:=0
        .BorderAround Weight:=xlMedium
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
    End With

    With .Cells(a, 8)
        .NumberFormat = "0.00"
        .Style = "Comma"
    End With
    With .Cells(a, 10)
        .NumberFormat = "0.0"
        .Style = "Comma"
    End With
    With .Range(.Cells(8, 8), .Cells(a - 1, 10))
        .NumberFormat = "0.0"
        .Style = "Comma"
    End With
    With .Range(.Cells(8, 7), .Cells(a - 1, 7))
        .NumberFormat = "0.00"
        .Style = "Comma"
    End With
End With
Range("A1").Select
End Sub

EDIT :

Ensuite Votre code N04 comme ceci

Sub N04_Effacer_Colisage()
' Effacer_Colisage Macro
Dim dlg As Integer

With Worksheets("Colisage")
    dlg = .Range("B" & Rows.Count).End(xlUp).Row
    .Range(.Cells(6, 1), .Cells(dlg, 14)).ClearContents
End With
End Sub

Merci beaucoup pour l'amélioration !

Je nous remercierais jamais assez !

Bonjour

1. Le code N06 est à modifier aussi comme ceci

Sub N06_Supprimer_NvTab_RgrpmtColis()
Dim dlg as byte

With Sheets("Colisage")
    .ListObjects("Tableau1").DataBodyRange.Delete
    dlg = .Cells(Rows.Count, 29).End(xlUp).Row
    .Range("AB6:AJ" & dlg).Delete Shift:=xlUp
    .Range("A1").Select
End With
End Sub

2. Dans le codeN05, juste en dessous de la ligne C= C - 3, enlevez tous les select. Cela ralenti le code. On peut faire tout sur une seule ligne plutot que deux.

With Sh
    .Range("Q5").FormulaR1C1 = "N° de palette"
    .Range("R5").FormulaR1C1 = "Longueur"
    .Range("S5").FormulaR1C1 = "Largeur"
    .Range("T5").FormulaR1C1 = "Hauteur"
    .Range("U5").FormulaR1C1 = "Poids"
    .Range("V5").FormulaR1C1 = "Designation Panneau"
End With

3. Plus haut je vois que vous cherchez une ligne vide dans la colonne 18 pour supprimer des lignes en double.
Si je comprends le code, en colonne 17 vous pourriez avoir deux fois le même numéro de palette ?

4. Toujours dans le N05, au début du code, vous faites des longueurs dans le code. Pourquoi utilisez vous des boucles do pour aller chercher la dernière ligne ??

Vous pouvez mettre ceci jusque la ligne "Suppression des lignes ...."

Set Sh = Worksheets("Colisage")
'Copie de tous les colis
    With Sh
        .Range(Cells(b, 2), Cells(a, 6)).Copy
        .Range(Cells(b, 17), Cells(a, 28)).PasteSpecial

        For c = 6 To .Range("B" & Rows.Count).End(xlUp).Row
            .Cells(c, 22).Value = .Cells(c, 8).Value & " : " & .Cells(c, 7).Value
        Next c
    End With

' Suppression des lignes qui son en doubles

Là il va falloir adapter la suite notamment parce que a et b sont supprimés
a étant la dernière ligne, vous pouvez remplacer par

.Range("B" & Rows.Count).End(xlUp).Row

où définir a = la dernière ligne --> a = .Range("B" & Rows.Count).End(xlUp).Row

Merci encore pour ces amélioration, je découvre plein de nouvelles fonctionnalités. Vous n'êtes pas obligé de continuer cependant.

Je ne vous en voudrais pas d'arrêter ahah

1. Merci, j'ai modifier

2. C'est beaucoup plus claire aussi

3.oui j'ai parfois des N° de panneaux qui sont doubles et je les enlêve grâce à ce code. les lignes en double sont comparé pour garder la plus grande valeur car dimensionnantes pour le colis.

4. Je faisais comme ca car je ne connaissais pas la fonction Roxs.Count. Maintenant j'utilise celle-là car bien plus rapide et évite d'appeler une variable en plus à chaque fois. Je n'ai par contre pas modifier les ancienne boucle Do.

Point 3. Pour plus de facilité, lorsque vous supprimez une ligne dans un tableau c'est toujours plus simple de partir du bas du tableau.

Plus bas dans le code N05, à la ligne r = 6 jusque la mention ----N06 regroupement colis--- en vert, les lignes ne servent à rien puisque votre tableau est déjà créé dans le gestionnaire de noms et qu'il n'est jamais supprimé. Bien qu'inutiles les lignes peuvent être remplacées par ceci

With Sh
    r = Range("V" & Rows.Count).End(xlUp).Row
    .Range(Cells(5, 17), Cells(r, 22)).ListObjects.Add(xlSrcRange, .Range(Cells(5, 17), Cells(r, 22)), , xlYes).Name = "Tableau1"
    .ListObjects("Tableau1").TableStyle = "TableStyleMedium3"
End With

3. Ah d'accord je serais pour la prochaine fois. Merci du tips

OK je modifie ça

Rechercher des sujets similaires à "vba resolution probleme mettre palettes camion"