Methode Row avec double variable

Bonjour mesdames et messieurs !

Voila mon cas :

J'ai un tableau avec une liste de référence, parfois la même référence se suit.

J'ai donc mis des variables afin d'avoir la plage de lignes successives avec la même référence afin de les grouper.

Seulement ma méthode Range pour sélectionner les lignes pour les grouper ne fonctionnent pas.

J'ai tenté ce code

Sheets("Historique Production").Range(Cells(i + 1, 1), Cells(Dernligne2 - 1, 1)).Select

ou

Sheets("Historique Production").Range("A" & i + 1 & ": H" & Dernligne2 - 1).Select

J'ai tenté avec la méthode Row également mais sans succès, malheureusement j'ai remplacé ma ligne.

Si quelqu'un peut m'aiguiller j'en serais fort content !

Merci d'avance pour l'aide que vous me fournirez

Peuto

bonjour

ces 2 instructions sont correctes au niveau de la syntaxe. Vérifier que dernligne2 a bien une valeur > 1

Voila le code complet.

Dernligne2 = Sheets("Historique Production").Range("A" & Rows.Count).End(xlUp).Row + 1

    If Sheets("Historique Production").Cells(Dernligne2 - 1, 6) > 1 Then

    For i = Dernligne2 To 4 Step -1

        If Not Sheets("Historique Production").Cells(i, 4) = Sheets("Historique Production").Cells(i + 1, 4) Then

            Sheets("Historique Production").Cells(Dernligne2, 1) = nof
            Sheets("Historique Production").Cells(Dernligne2, 2) = Now()
            Sheets("Historique Production").Cells(Dernligne2, 4) = Sheets("Historique Production").Cells(Dernligne2 - 1, 4)
            Sheets("Historique Production").Cells(Dernligne2, 6) = Sheets("Historique Production").Cells(Dernligne2 - 1, 6)
            Sheets("Historique Production").Cells(Dernligne2, 5) = Application.WorksheetFunction.Sum(Range(Cells(i + 1, 5), Cells(Dernligne2 - 1, 5)))
            Sheets("Historique Production").Range(Cells(i + 1, 1), Cells(Dernligne2 - 1, 1)).Select
            Selection.Rows.Group
            ActiveSheet.Outline.ShowLevels RowLevels:=1

            Exit For

        End If

    Next i

Donc pour décrire, le programme rajoute une ligne pour chaque palette produite. Je vérifie donc que le numéro palette de la ligne au dessus Dernligne2 est supérieur a 1.

Si c'est le cas, je vérifie a partir de dernligne2 jusqu'en haut du tableau pour avoir la 1ere ligne avec une référence différente.

Quand je l'ai trouvé, je copie sur Dernligne2 les données de quantité, nombre de palette... afin d'avoir une ligne récapitulative.

Et ensuite je sélectionne les lignes puis je les groupes.

Mais j'ai erreur 1004 : Erreur définie par l'application ou par l'objet

Qui se trouve sur la ligne de sélection de la plage.

bonjour,

le code n'apporte rien. peux-tu mettre un extrait de ton fichier dans lequel tu peux reproduire l'erreur ?

Voila le fichier très épuré.

L'erreur se produit lorsqu'on clique sur le bouton "fin de production".

Pour le détail, vu que j'ai épuré, il est possible de déclarer les palettes mais le numéro reste à 0, il faut donc le modifier dans la feuille historique production (je l'ai fais sur la version que je vous envoie que vous puissiez faire fin de production tout de suite).

Et la dernière chose, c'est que pour pouvoir appuyer sur "fin de production" il faut impérativement marquer quelque chose dans la case commentaire.

Peuto


Il y a également le code de la somme qui se trouve juste au dessus du code qui provoque l'erreur qui n'est pas correcte.

Quand l'erreur se produit, le code de la somme est exécuter mais si l'on va dans historique production on constate que le calcul a donné 0.

Je ne sais pas si ca peut être lié

bonjour,

proposition de correction. tu ne peux pas sélectionner une feuille et une cellule dans la même instruction. il faut le faire en 2 étapes. d'abord la feuille. puis la cellule sur la feuille

Sheets("Historique Production").Cells(Dernligne2, 1) = nof
            Sheets("Historique Production").Cells(Dernligne2, 2) = Now()
            Sheets("Historique Production").Cells(Dernligne2, 4) = Sheets("Historique Production").Cells(Dernligne2 - 1, 4)
            Sheets("Historique Production").Cells(Dernligne2, 6) = Sheets("Historique Production").Cells(Dernligne2 - 1, 6)
            Sheets("Historique Production").Cells(Dernligne2, 5) = Application.WorksheetFunction.Sum(Range(Cells(i + 1, 5), Cells(Dernligne2 - 1, 5)))
            Sheets("Historique Production").Select
            Range(Cells(i + 1, 1), Cells(Dernligne2 - 1, 1)).Select
            Selection.Rows.Group
            ActiveSheet.Outline.ShowLevels RowLevels:=1

Je te remercie ! Ca marche pas encore parfaitement mais au moins il n'y a pas d'erreur..

Par hasard, pour la somme, sais-tu si ma formule est bonne ? Car elle me retourne 0.

Sinon ne t'en fais pas je retourne à mes recherches

Tu m'as déjà sorti d'un bon guêpier ! Je t'en remercie

Bonsoir,

tu veux faire la somme de quoi ?

La somme de toutes les lignes successives ayant la même référence, soit avec les variables de (i+1) jusqu'à (Dernligne2 - 2).

Sheets("Historique Production").Cells(Dernligne2, 5) = Application.WorksheetFunction.Sum(Range(Cells(i + 1, 5), Cells(Dernligne2 - 2, 5)))

J'ai actuellement ceci qui me ressort 0.

bonjour,

proposition de correction

Sub FindeProde()

    Dim k As Long
    Dim nof As Long
    Dim Dernligne As Long
    Dim Dernligne2 As Long
    Dim i As Long

    nof = ThisWorkbook.Sheets("OF en cours").Range("H5").Value

    If ThisWorkbook.Sheets("OF en cours").Range("G21").Value <> "" Then

        For k = 4 To 300 Step 1
            If (ThisWorkbook.Sheets("Historique Production").Cells(k, 1).Value = nof) Then
                ThisWorkbook.Sheets("Historique Production").Cells(k, 7).Value = ThisWorkbook.Sheets("OF en cours").Range("G21").Value
                Exit For
            End If
        Next k

        Dernligne2 = Sheets("Historique Production").Range("A" & Rows.Count).End(xlUp).Row + 1

        If Sheets("Historique Production").Cells(Dernligne2 - 1, 6) > 1 Then
'on met les infos de production en dernière ligne
            Sheets("Historique Production").Cells(Dernligne2, 1) = nof
            Sheets("Historique Production").Cells(Dernligne2, 2) = Now()
            Sheets("Historique Production").Cells(Dernligne2, 4) = Sheets("Historique Production").Cells(Dernligne2 - 1, 4)
            Sheets("Historique Production").Cells(Dernligne2, 6) = Sheets("Historique Production").Cells(Dernligne2 - 1, 6)

            For i = Dernligne2 - 1 To 4 Step -1
' on recherche la première ligne de la succession de lignes contenant le même nof
                If Not Sheets("Historique Production").Cells(i, 4) = Sheets("Historique Production").Cells(i + 1, 4) Then

                    Sheets("Historique Production").Cells(Dernligne2, 5) = Application.WorksheetFunction.Sum(Range(Cells(i + 1, 5), Cells(Dernligne2 - 1, 5)))
                    Sheets("Historique Production").Select
                    Range(Cells(i + 1, 1), Cells(Dernligne2 - 1, 1)).Select
                    Selection.Rows.Group
                    ActiveSheet.Outline.ShowLevels RowLevels:=1

                    Exit For

                End If

            Next i

        End If

        ActiveWorkbook.Save

    End If

End Sub

Ca fais bien plus ordonné merci

Par contre la somme ne marche toujours pas et je ne trouve pas d'autre manière d'écrire la formule sur internet.

Je fais une petite mise à jour également car les lignes se groupait mal. J'ai trouvé d'où venait le problème, voici mon nouveau code :

For i = Dernligne2 - 1 To 4 Step -1

        If Sheets("Historique Production").Cells(i, 1).Value <> Sheets("Historique Production").Cells(i - 1, 1).Value And Sheets("Historique Production").Cells(i, 1) <> "" Then

            Sheets("Historique Production").Cells(Dernligne2, 5) = Application.WorksheetFunction.Sum(Range(Cells(i, 5), Cells(Dernligne2 - 1, 5)))
            Sheets("Historique Production").Select
            Range(Cells(i, 1), Cells(Dernligne2 - 1, 1)).Select
            Selection.Rows.Group
            ActiveSheet.Outline.ShowLevels RowLevels:=1

            Exit For

        End If

    Next i

Enfaite au lieu de comparer la ligne (i) à la ligne (i+1), je la compare a (i-1) vu qu'on remonte le tableau. Cela devait provoquer une erreur dans le calcul de i et groupait que les 2 premières lignes systématiquement.

Le groupage de ligne se fait maintenant parfaitement et cela permet de mettre des (i) au lieu de (i+1) dans chaque formule du code.

Peuto


Bon eh bien vu que la formule de la somme est capricieuse, je me suis dit qu'une petite boucle serait mieux et ca marche niquel

For i = Dernligne2 - 1 To 4 Step -1

        If Sheets("Historique Production").Cells(i, 1).Value <> Sheets("Historique Production").Cells(i - 1, 1).Value And Sheets("Historique Production").Cells(i, 1) <> "" Then

            For j = i To Dernligne2 - 1 Step 1

                Sheets("Historique Production").Cells(Dernligne2, 5) = Sheets("Historique Production").Cells(Dernligne2, 5) + Sheets("Historique Production").Cells(i, 5)

            Next j

            Sheets("Historique Production").Select
            Range(Cells(i, 1), Cells(Dernligne2 - 1, 1)).Select
            Selection.Rows.Group
            ActiveSheet.Outline.ShowLevels RowLevels:=1

            Exit For

        End If

    Next i

Affaire résolue

Merci de toute l'aide que tu m'as apportée H2so4.

Passe une bonne journée !

Bonjour,

j'ai dû mal à comprendre où est le problème.

peux-tu mettre un exemple du résultat incorrect (et pourquoi il est incorrect) et du résultat que tu attends.

Pour le problème de la somme, le résultat restait à 0.

Sur l'image on peut voir qu'il y a 10 lignes pour chaque référence.

Pour la 1ere référence "50303TOSE" j'ai utilisé la fonction Sum, le resultat me retournait 0 comme tu peux voir.

Ensuite j'ai fais l'autre référence avec la boucle, et là la somme des 10lignes se fait bien.

Je refais le code pour te montrer ce que ca me faisais pour le groupage, j'en ai pour quelques minutes.

sans titre
For i = Dernligne2 To 4 Step -1

        If Not Sheets("Historique Production").Cells(i, 4) = Sheets("Historique Production").Cells(i + 1, 4) Then

Voila comment était écrit mon code ou l'erreur se produisait.

Théoriquement le (i) devait aller jusqu'à la 1ere cellule avec une référence différente.

Mais voila en image ce que cela me faisait.

Les références sont identiques mais les lignes ne se groupait pas jusqu'au bout.

Peuto

sans titre2

Je suis de retour, mais pas pour vous jouer un mauvais tour

Je vous expose le problème :

Donc les lignes ayant la même référence se groupent parfaitement bien. Seulement, parfois il est possible que la même référence soit reprise. Prenons le cas que je vous mets en image, l'ordre de fabrication (OF) a été fais en 2fois, il m'as donc imbriqué le 1er groupe dans le nouveau car il voit que la référence est identique.

Je souhaite donc trouver le code qui me permets de les dissocier, afin de pouvoir les regrouper tous ensemble par la suite.

J'ai testé un code mais il ne marche pas et je ne trouve rien d'autre :

 Range(Cells(i, 1), Cells(Dernligne2 - 1, 1)).Select

            If Rows(i).EntireRow.Hidden = True Then

            Selection.Rows.Ungroup

            End If

            Selection.Rows.Group
            ActiveSheet.Outline.ShowLevels RowLevels:=1

Vu que la référence est la meme, au lieu que le (i) s'arrête à la ligne 123, il s'arrete à la ligne 119 dans le cas de l'image. J'ai donc voulu vérifier si la ligne (i) était caché, mais cela ne marche pas. Peut-être que ma condition n'est pas bonne ?

Dans l'espoir que vous pourrez m'aider

Peuto

sans titre

Bon J'ai réussi à régler mon problème 8) Je viens vous donner la solution.

Le problème c'est que VBA provoque une erreur de code si il n'y a pas de lignes à dégrouper dans la sélection.

Alors j'ai mis une condition la noix, comme ca le code du dégroupage s'exécute systématiquement et je l'ai combiné avec un "On Error Resume Next" qui permettra au code de continuer en cas d'erreur. Voila ma solution :

On Error Resume Next
            If Cells(i, 1) = nof Then

            Selection.Rows.Ungroup

            End If

            Selection.Rows.Group
            ActiveSheet.Outline.ShowLevels RowLevels:=1

Vous remerciant à nouveau le forum et spécialement H2so4 !

Bon week end !

bonjour,

bravo pour ta persévérance.

n'oublie pas de mettre un on error goto 0 après le end if. pour détecter d'autres erreurs qui pourraient survenir. plus loin dans l'exécution du code.

Rechercher des sujets similaires à "methode row double variable"