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 :

Récuperer la valeur min/max d'une plage variable [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    tech mecanique
    Inscrit en
    Décembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : tech mecanique
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 9
    Par défaut Récuperer la valeur min/max d'une plage variable
    Bonjour la communauté, je suis tout nouveau et d'un domaine un peu loin de la programmation (ingenerie mécanique),bref , ma demande est la suivante: recupérer la "norme" à partir de la source , chercher s'il existe dans "piste" dans la cible, si oui récuperer sa valeur minimale (il peut etre une seule ou plusieurs et c'est là ou je me bloque) sinon passer à l'autre "norme" et ainsi de suite.

    sûr de votre collaborartion et compréhension!

    Nom : Capture.JPG
Affichages : 2714
Taille : 61,8 Ko

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Deux questions :
    1) tu es ici dans la section "Macros et VBA Excel". Cela veut-il dire que tu souhaites une solution VBA ?
    2) Si choix par VBA --->> ton image montre des données "Piste" triées. Est-ce systématiquement le cas ?

  3. #3
    Membre habitué
    Homme Profil pro
    tech mecanique
    Inscrit en
    Décembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : tech mecanique
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 9
    Par défaut
    Bonsoir unparia,

    tout d'abord merci pour l'interêt,

    deux bonne questions,

    1- oui SVP je cherche une solution VBA excel (j'ai essayé de postrer dans l'endroit approprié qui est VBA pour excel mais j'ai oublié de le mentionner)
    2- oui par hypothése je considère que les valeurs de ma colonne "piste" sont systémetiquement triées, la macro va les exploiter du coup dans l'ordre!

    merci d'avance pour votre Retour.

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Je te propose ceci, en admettant que ton image commence à la colonne B et que tes données commencent en ligne 2. Si tel n'est pas le cas, --->> adapte
    1) supprime de la colonne B tout ce qui n'est pas une valeur de piste (ta colonne B ne doit avoir que ces valeurs et son entête)
    2) supprime de la colonne E tout ce qui n'est pas une "norme" (ta colonne E ne doit avoir que ces valeurs et son entête)

    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
     
     Dim plage_pistes As Range, plage_norms As Range, groupe As Range, ou As Range, DL As Long, v As Range
      DL = Range("B" & Rows.Count).End(xlUp).Row
      Set plage_pistes = Range("B2:B" & DL)
      DL = Range("E" & Rows.Count).End(xlUp).Row
      Set plage_norms = Range("E2:E" & DL)
      For Each v In plage_norms.Cells
        Set ou = plage_pistes.Find(v.Value)
        If Not ou Is Nothing Then
            Set groupe = ou
            Do While ou.Offset(1).Value = v.Value
              Set groupe = Application.Union(groupe, ou.Offset(1))
              Set ou = ou.Offset(1)
            Loop
            v.Offset(0, 1) = WorksheetFunction.Min(groupe.Offset(0, 1))
        Else
            v.Offset(0, 1).Value = 0
        End If
      Next
    cela devrait "faire" en VBA (puisque tu souhaites du VBA et non des formules) ce que tu cherches à faire

  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 re
    Bonjour j' ai tenté une approche avec colonne d:e vide au depart
    mais il semble y avoir un soucis avec les nombre

    Nom : demo2.gif
Affichages : 2513
Taille : 266,0 Ko

    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
    Option Explicit
    Sub test2()
        Dim PA As Range, newc As Range, n#, x$, cel As Range
        With ActiveSheet
             .Range("D2", .Cells(Rows.Count, "D")).Clear
            Set PA = .Range("A2", .Cells(Rows.Count, 1).End(xlUp))
            x = ""
             For Each cel In PA.Cells
                If cel.Value <> x Then
                   n = 100000000
            ' récupération des normes sans doublons dans "D"
                    Set newc = .Cells(Rows.Count, "D").End(xlUp).Offset(1)    'first cellule dispo dans"D"
                    cel.Copy Destination:=newc: x = cel.Value    'copie de la norme dans newc
                    'recuperation de la valeur min
                    If Val(cel.Offset(0, 1).Value) < n Then newc.Offset(0, 1) = cel.Offset(0, 1).Value: n = cel.Offset(0, 1).Value
                End If
            Next
        End With
    End Sub
    Fichiers attachés Fichiers attachés
    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 très actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Par défaut
    Bonjour
    ton image me laisse penser que tu utilises l'outil Tableau. Si c'est le cas, la syntaxe VBA pourra être simple.
    Avec Le tableau cible nommé Pistes et le tableau source nommé Normes, un exemple de macro (adaptée de celle de unparia -merci - serait
    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
    Sub mini()
      Dim R As Range, C As Range, plage As Range
      [Normes[Mini]] = 0
      For Each R In [Normes[norme]]      'première colonne titrée normee du tableau Normes
        Set C = [Pistes[Piste]].Find(R)  'première colonne du titrée Piste du tableau Pistes
        If Not C Is Nothing Then
          Set plage = C
          Do While C(2, 1) = R
            Set plage = Union(plage, C(2, 1))
            Set C = C(2, 1)
          Loop
          R(1, 2) = Application.Min(plage(1, 2))
        End If
      Next
    End Sub
    Patrick : problème avec les négatifs, le minimum a la plus grande valeur absolue, non ?

    Nota
    : j'en profite pour montrer que l'on peut, pour le décalage, oublier le "Offset" ; C.Offset(x,y) peut être remplacé par C(x+1,y+1)

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/12/2015, 15h05
  2. [Toutes versions] Rechercher une valeur max dans une plage de cellules variable
    Par Laur3nt62 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/05/2011, 19h34
  3. Recuperer l'adresse d'une valeur (Max d'une plage définie)
    Par karim19 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 30/10/2009, 12h32
  4. Récuper les valeurs dans formulaire dans une table
    Par antoine1504 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 02/07/2007, 09h06
  5. [C++.NET] Valeurs min/max dans une TextBox
    Par raboin dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 06/04/2006, 17h15

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