IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Max de chaque bloc d'une colonne [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Août 2016
    Messages : 12
    Par défaut Max de chaque bloc d'une colonne
    bonsoir tout le monde!
    j ai un problème au niveau de mon code vba! en fait je veux récupérer le max de chaque bloc d'une colonne donnée !
    il retourne les bons resultats seulement pour qlq cellules !
    voila mon code !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub composition()
    Dim j As Integer
    Dim i As Integer
    Dim compteur As Integer
    Dim l As Integer
    Dim max As Integer
    compteur = 0   'le roulement est lebloc qui contient une cellule non coloree suivi des cellules coloree exemple A7__A10
    i = 0
    j = 7 ' l indice de la cellule du premier roulement
    l = 7
    While j + compteur < 92
     While Sheets("composition1").Range("A7").Offset(i + 1, 0).Interior.ColorIndex <> xlNone
    compteur = compteur + 1
    i = i + 1
      Wend
    max = Application.WorksheetFunction.max(Range(Cells(j, 17), Cells(j + compteur, 17)))
     
    MsgBox max
       While l < (j + compteur + 1)  ' pour remplir le bloc des cellules par le meme nombre qui est maximum/54
        Cells(l, 4) = Round(max / 54, 0)
         l = l + 1
       Wend
    j = j + compteur
    Wend
    End Sub
    Nom : Capture.PNG
Affichages : 188
Taille : 3,6 Ko


    (P.S:pour moi ,un bloc est defini par une cellule en blanc suivie d'autres cellules de meme couleur!)

  2. #2
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonsoir.

    Voici une suggestion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Sub tt1()
    debut = 0
    fin = 0
    Set f = Sheets("composition1")
     
    For i = 7 To 91
    f.Cells(i, "A").Select '
    If i = 7 Then couleurdebut = f.Cells(i, "A").Interior.Color
     
     couleur = f.Cells(i, "A").Interior.Color
     If couleur = couleurdebut Then
      prochaindebut = i
      If fin > debut Then
       Stop
       Set r = f.Range(f.Cells(debut, "Q"), f.Cells(fin, "Q"))
       max = Application.WorksheetFunction.max(r)
     
        'remplir le bloc des cellules par le meme nombre qui est maximum/54
        'Code
     
      End If
      debut = prochaindebut
      fin = debut
     Else
       fin = i
     End If
    Next
     
    End Sub

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re et les filtres alors ils servent a quoi??????
    Bonjour

    oui bon....
    en fait on a des outils alors servons nous en

    avec un filtre on peut récupérer les plages non contiguës correspondante au plage de même couleur dans une plage globale

    exemple
    j'ai utilisé la couleur 40 de excel (genre orange)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub maxoumaxou()
        Dim plage_en_string    ' jeux de mot ramoutcho!!!!
        With ActiveSheet.Range(Cells(7, "Q"), Cells(Rows.Count, "Q").End(xlUp))    ' plage a adapter
            .AutoFilter Field:=1, Criteria1:=RGB(250, 192, 144), Operator:=xlFilterCellColor ' on filtre la plage par une couleur
            plage_en_string = .Parent.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Address ' on récupere les plage non contigues du filtre dans une variable
            .AutoFilter    ' stop le filtre
            For Each area In .Parent.Range(plage_en_string).Areas 'on boucle sur toutes les plages non contigues
                Debug.Print area.Address 'on affiche l'adress de l'area(X).adress dans le debug
     
                ' ici ton code avec la fonction max
     
            Next
        End With
    End Sub
    ' regarde les plage dans le debug

    c'est plus simple non????

    on peu argumenter la couleur de plusieurs façons
    en RGB
    '.AutoFilter Field:=1, Criteria1:=RGB(250, 192, 144), Operator:=xlFilterCellColor ' on filtre la plage par une couleur
    au format hex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '.AutoFilter Field:=1, Criteria1:=&H90C0FA, Operator:=xlFilterCellColor  ' on filtre la plage par une couleur
    ou la couleur d'une cellules ici la premiere cellule de la plage a inspecter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '.AutoFilter Field:=1, Criteria1:=.Cells(1).Interior.Color, Operator:=xlFilterCellColor  ' on filtre la plage par une couleur
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par patricktoulon Voir le message

    avec un filtre on peut récupérer les plages non contiguës correspondante au plage de même couleur dans une plage globale
    Merci Patrick. Très intéressant le filtre sur une couleur.
    Mais il ne peut pas être utilisé pour résoudre ce problème.

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    bonsoir docmarti
    ben d'après:
    j ai un problème au niveau de mon code vba! en fait je veux récupérer le max de chaque bloc d'une colonne donnée !
    et le code que tu lui a proposé, ca me parait au contraire tout indiqué et bien moins compliqué pour séparer les blocs
    essaie et regarde les plages dans le debug

    et voila méthode avec le colorindex
    je ne l'avais pas mis cae j'avais un soucis de palette

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .AutoFilter Field:=1, Criteria1"&" & Hex(ThisWorkbook.Colors(40)), Operator:=xlFilterCellColor  ' on filtre la plage par une couleur
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Août 2016
    Messages : 12
    Par défaut
    mercii d'avoir répondu ! j ai utilisé la 1ere methode je trouve que c est facile vu mes connaissance en vba ! (meme si la 2eme esti directe )
    ça marche le probleme est resolu
    maintenant apres avoir trouvé ce maximum je veux l utiliser pour un traitement special qui va changer tjrs selon le bloc !
    mais le probleme c est que j ai voulu utiliser un tableau mais la taille varie

    Nom : cap.PNG
Affichages : 164
Taille : 14,4 Ko

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide code VBA
    Par diablo59 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/01/2011, 01h02
  2. Aide code VBA
    Par auxboman dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/03/2010, 21h43
  3. Aide Code VBA
    Par Dan21 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 15/02/2010, 18h07
  4. Aide code VBA, fonction SubdatasheetExpanded
    Par Fredo67 dans le forum VBA Access
    Réponses: 2
    Dernier message: 21/02/2008, 11h28
  5. demande d'aide sur VBA
    Par aralth dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/07/2007, 06h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo