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
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é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
(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.
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 :/ )le VBA dans ce cas précis est il VRAIMENT utile ?