Tester une plage filtrée

  • Initiateur de la discussion Initiateur de la discussion cestalain
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

cestalain

XLDnaute Nouveau
Bonjour à tous

Je souhaite tester en VBA le contenu d'une plage filtée au travers d'un tableau.
mon code de remplissage tableau est le suivant:
Set plage = Worksheets("RecapCommande").Range("ZoneRecapCommande").SpecialCells(xlCellTypeVisible)
x = plage.Value

mon problème est que le tableau n'est rempli qu'avec les premières plage adjacentes.

Comment y remédier ?

D'avance merci de votre aide

En pièces jointes mon fichier avec commentaires
 

Pièces jointes

Re : Tester une plage filtrée

Bonjour cestalain,

J'ai fait le ménage...

Code:
Sub parcourir()

Dim plage As Range, cel As Range
Dim numerodifferent As Boolean, fournidiff As Boolean, numcom, four1

Set plage = Worksheets("RecapCommande").Range("ZoneRecapCommande").Columns(1).SpecialCells(xlCellTypeVisible)
four1 = plage.Cells(1, 1)
numcom = plage.Cells(1, 1).Offset(0, 3)

For Each cel In plage
  If cel <> four1 Then fournidiff = True
  If cel.Offset(0, 3) <> numcom Then numerodifferent = True
Next

If Not fournidiff And Not numerodifferent Then MsgBox "C'est OK !", vbOKOnly: Exit Sub
If fournidiff Then
  MsgBox "Fournisseur different sur meme bon veuillez en filtrer un seul!", vbOKOnly
Else
  MsgBox "Plusieurs commandes veuillez en filtrer une seule!", vbOKOnly
End If

End Sub

Edition : une variable déclarée Boolean a la valeur False par défaut quand elle n'est pas définie ensuite.

A+
 
Dernière édition:
Re : Tester une plage filtrée

Bonjour,

Une solution avec le code suivant

Code:
Sub parcourir()
Dim S As Worksheet
Dim A$
Dim R As Range
Dim T()
Dim var
Dim pos&
Dim nbLig&
Dim cpt&
Dim g&
Dim i&
Dim j&
Set S = Worksheets("RecapCommande")
Set R = S.Range("ZoneRecapCommande").SpecialCells(xlCellTypeVisible)
A$ = R.Address
pos& = InStr(1, A$, ",")
If pos& = 0 Then
  var = R
Else
  A$ = A$ & ","
  cpt& = 1
  Do
    pos& = InStr(1, A$, ",")
    If pos& = 0 Then Exit Do
    Set R = S.Range(Mid(A$, 1, pos& - 1))
    var = R
    nbLig& = nbLig& + R.Rows.Count
    ReDim Preserve T(1 To UBound(var, 2), 1 To nbLig&)
    For j& = cpt& To nbLig&
      g& = g& + 1
      For i& = 1 To UBound(T, 1)
        T(i&, j&) = var(g&, i&)
      Next i&
    Next j&
    cpt& = cpt& + g&
    g& = 0
    A$ = Mid(A$, pos& + 1)
  Loop
  var = Application.WorksheetFunction.Transpose(T)
End If
A$ = ""
'--- Si différents N° de commande ---
For i& = 2 To UBound(var, 1)
  If var(i&, 4) <> var(1, 4) Then
    A$ = "Plusieurs commandes veuillez en filtrer une seule !"
    Exit For
  End If
Next
'--- Si différents fournisseurs ---
For i& = 2 To UBound(var, 1)
  If var(i&, 1) <> var(1, 1) Then
    A$ = "Fournisseurs différents sur même bon veuillez en filtrer un seul !"
    Exit For
  End If
Next
If A$ = "" Then A$ = "C'est OK !"
MsgBox A$
End Sub

Cordialement.

PMO
Patrick Morange
 
Re : Tester une plage filtrée

Bonsoir job75, PMO2

Merci à vous deux pour votre aide et votre rapidité de réponse.
C'est exactement ce que je chercher à réaliser.
Je pense opter pour la solution de Job75 (plus lisible pour moi car trés épurée ).
Et decortiquer au pas a pas la solution de PMO2 qui devrait etre riche d'enseignement pour me faire progresser en VBA

Encore une fois merci a vous

cetalain
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour