Tester une plage filtrée

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

  • cestalain.xls
    46.5 KB · Affichages: 56
  • cestalain.xls
    46.5 KB · Affichages: 62
  • cestalain.xls
    46.5 KB · Affichages: 65

job75

XLDnaute Barbatruc
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:

PMO2

XLDnaute Accro
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
 

cestalain

XLDnaute Nouveau
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
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa