Probleme de raisonnement

Bonjour,

Voila j'ai un problème de raisonnement,j'ai un tableau (longueur variable), je fait un tris pour enlever des lignes traités précédemment. Ce tableau est celui de travail.Avec celui-ci j’applique un filtrage par client,càd que pour la première ligne je prend le nom du client puis je filtre ce tableau avec le nom, après je veut faire une action pour toutes les lignes filtrées(donc celles du nom du client) puis après je voudrait mettre un autre filtre sur un autre nom de client et recommencer l'opération.Bien sur le tout sans repasser sur les lignes déjà traité.Pour commencé j'ai fait une boucle for pour faire toute les ligne du tableau (filtre ligne déjà faite appliquer par fonction SI) le truc est que maintenant j'ai un code :

i = 2
    'récupérer la prochaine cellule visible
    While (Workbooks("encours  test autre methode.xlsm").Sheets("En cours").Range("A" & i).EntireRow.Hidden = True)
     i = i + 1
    Wend

qui me permet de trouver la prochaine cellule visible,le problème me diriez-vous ?? je ne vois pas comment intégré ce bout de code dans mon programme sans détruire ma boucle for qui passe sur tout les lignes du tableau non filtré.

Voici le code dans lequel je voudrait rajouter cela :

Public Sub MAJ_flag()

    Dim i, j, no_der_ligne As Integer
    Dim client, chemin As String
chemin = "F:\Fichiers\Arthur\2018\"
i = 1

    MsgBox "Cette opération peut prendre un certain temps." & vbLf & "Veuillez patienter", vbInformation

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$G$9").AutoFilter Field:=7, Criteria1:="="

no_der_ligne = Workbooks("encours  test autre methode.xlsm").Sheets("En cours").Range("A" & Rows.Count).End(xlUp).Row

    For i = 2 To no_der_ligne
        If Workbooks("encours  test autre methode.xlsm").Sheets("En cours").Cells(i, 1) <> "" Then
            If Left(Workbooks("encours  test autre methode.xlsm").Sheets("En cours").Cells(i, 1).Value, 3) = "CPC" Then
                If Workbooks("encours  test autre methode.xlsm").Sheets("En cours").Cells(i, 3).Value <> "#N/A" Then
On Error GoTo erreur
client = Workbooks("encours  test autre methode.xlsm").Sheets("En cours").Cells(i, 3).Value
fichier = client & ".xls"

    ActiveSheet.Range("$A$1:$G$9").AutoFilter Field:=3, Criteria1:=client

                    If Workbooks("encours  test autre methode.xlsm").Sheets("En cours").Cells(i, 3).SpecialCells(xlCellTypeVisible).Value <> Workbooks("encours  test autre methode.xlsm").Sheets("En cours").Cells(i - 1, 3).SpecialCells(xlCellTypeVisible).Value Then
                        Workbooks.Open (chemin & fichier)
                    End If
                    Workbooks(fichier).Sheets("C").Rows(20).Insert
                    Workbooks(fichier).Sheets("C").Cells(20, 1).Value = Workbooks("encours  test autre methode.xlsm").Sheets("En cours").Cells(i, 4).Value 'copie du numéro Conf TECH
                    Workbooks(fichier).Sheets("C").Cells(20, 2).Value = Workbooks("encours  test autre methode.xlsm").Sheets("En cours").Cells(i, 6).Value 'inscrit le delai
                    Workbooks(fichier).Sheets("C").Cells(20, 3).Value = Workbooks("encours  test autre methode.xlsm").Sheets("En cours").Cells(i, 2).Value & "€" 'copie du montant

                    If Workbooks("encours  test autre methode.xlsm").Sheets("En cours").Cells(i, 3).SpecialCells(xlCellTypeVisible).Value <> Workbooks("encours  test autre methode.xlsm").Sheets("En cours (2)").Cells(i + 1, 3).SpecialCells(xlCellTypeVisible).Value Then
                        Workbooks(fichier).Save
                        Workbooks(fichier).Close
                    End If

                    Workbooks("encours  test autre methode.xlsm").Sheets("En cours").Cells(i, 7).Value = "x"
erreur:
                    On Error GoTo -1
                End If
            End If
        End If
    Next
Selection.AutoFilter
Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub

pour information le tableau excel ressemble à ça :

| ligne |N-°dans le logiciel | NET | Nom client | numero dans excel(autre feuille non exploitable) |Commercial| Delai | FLAG MAJ |

----------|-------------------------------|--------|-------------------|-------------------------------------------------------------------------------|--------------------|------------|-------------------|

|1........|remplie utilisateur |pareil| formule......| formule....................................................................|formule........|formule|.....vba........|

|2........|..............................

|3........|.........................

(les points remplace les espaces enlever par le site )

Merci d'avance a tous ceux qui voudront bien m'aidé dans ma réflexion.

Cordialement.

Bonjour,

pourquoi tu ne mets pas en 2nd tri les noms des clients? Elles ne pourront que se succéder.

Et avec Set pl = [A2:A10].SpecialCells(xlCellTypeVisible) tu pourrais ne boucler que sur les lignes visibles.

eric

Bonjour,

pourquoi tu ne mets pas en 2nd tri les noms des clients? Elles ne pourront que se succéder.

Et avec Set pl = [A2:A10].SpecialCells(xlCellTypeVisible) tu pourrais ne boucler que sur les lignes visibles.

eric

le truc c’est qu'avec "tri" à la fin du programme il m'est impossible de remettre l'ordre de base du tableau afin de savoir quel était le dernier numéro rentré

(j'ai déjà une solution qui fonctionne mais je voulais essayer cette méthode pour voir laquelle est la plus rapide à l’exécution car il faut le dire celle que j'utilise met déjà 1 minutes a s'exe alors qu'il n'y a que 3-4 lignes a traiter :/)

Bonjour à tous,

le VBA dans ce cas précis est il VRAIMENT utile ?

Un filtre auto peut se faire facilement à l'écran et est très rapide.

Je dis ça parce que je suis contre l'automatisation à tout va

P.

le VBA dans ce cas précis est il VRAIMENT utile ?

La macro va être appeller dans un BeforeClose car la modification des données des autre fichiers ne dois se faire que à la fin et le fichier va être utilisé par d'autres personnes, il est donc préférable que tout soit automatisé sinon les modifs ne serait pas utile (et tout serai à faire a la main :/ )
Rechercher des sujets similaires à "probleme raisonnement"