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 :

regroupement en fonction de critères


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 3
    Par défaut regroupement en fonction de critères
    bonjour tout le monde

    j'ai quelques questions à poser sur VBE s'il y a quelqu'un qui le maitrise qu'il réponde, merci d'avance

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Soir Bon
    Tout d'abord éviter le gabuzomeu
    Ensuite voir http://silkyroad.developpez.com/VBA/VisualBasicEditor/
    http://office.developpez.com/

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 3
    Par défaut ma question est
    merci pour ta réponse , j'ai ouvert le lien mais ma question c'est Ecrire un programme pour afficher sur une autre feuille de calcul les personnes (nom et prénom) de genre masculin ayant Bateaux comme centre d’intérêt. (sachant qu'on a déjà comme données un tableau contenant le nom prénom et toput le reste ) donc comment afficher ces infos dans une autre page?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 55
    Par défaut
    bonjour

    un petit bou de code qui repondra peut etre a ta question

    feuille "source" :

    nom prenom sexe (M/F) bateau (O/N)
    aaaaaaaa abs M N
    bbbbbb fd M O
    ccccccc jd F O
    dddddddd ds M O
    eeeeeee ll M N
    ffffffffffffff sdf M N
    ggggggggg fd M O
    hhhhhhhhhh sdf F N
    iiiiiii ez F O

    sub :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Sub recopie()
    ' ************************* poser le probleme ******************************
    'suposition une feuille "source"
    'A1 = "NOM"
    'A2 = "PRENOM"
    'A3 = "SEXE (M/F)"
    'A4 = "BATEAU (O/N)"
    ' ************************* but de la macro ******************************
    ' le nombre de ligne de la feuille "source" n'est pas connu
    ' la macro va copier de la feuille "source" sur la feuille "but" les noms et prenoms
    ' des ligne ayant sexe =  "M" et bateau = "O"
    ' ************************* declaration des variables ******************************
    'nombre de lignes de la feuille "source"
    Dim nbligsce As Integer
    ' flag de fin de derniere ligne
    Dim flag As Boolean
    ' variable de boucle
    Dim i As Integer
    Dim j As Integer
    'ligne en cours de la feuille "but"
    Dim ligbutencours As Integer
    ' ************************* compte le nombre de ligne source ******************************
    ' initialise nombre de ligne a zero et flag a true
    nbligsce = 0
    flag = True
    ' jusqu'a ce que flag soit false ajoute 1 a nombre de ligne
    Do Until flag = False
        nbligsce = nbligsce + 1
        ' si la cellule 1 de la ligne en cours est vide alors flag a false
        If Worksheets("source").Cells(nbligsce, 1).Value = "" Then flag = False
    Loop
    ' enleve la derniere ligne celle qui est vide du compteur de lignes
    nbligsce = nbligsce - 1
    ' ************************* copie des donnees ******************************
    'initialise la ligne de titre de la feuille "but"
    Worksheets("but").Cells(1, 1).Value = "NOM"
    Worksheets("but").Cells(1, 2).Value = "PRENOM"
    'ligne en cours de la feuille "but"
    ligbutencours = 2
    ' pour les nbligavt lignes
    For i = 2 To nbligsce
        'teste et copie de la ligne
        If Worksheets("source").Cells(i, 3).Value = "M" And Worksheets("source").Cells(i, 4).Value = "O" Then
            For j = 1 To 4
                Worksheets("but").Cells(ligbutencours, 1).Value = Worksheets("source").Cells(i, 1).Value
                Worksheets("but").Cells(ligbutencours, 2).Value = Worksheets("source").Cells(i, 2).Value
            Next j
            ligbutencours = ligbutencours + 1
        End If
    Next i
    feuille "but" :

    NOM PRENOM
    bbbbbb fd
    dddddddd ds
    ggggggggg fd



    cordialement
    GERARD

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Reformulation de la solution de gedechp, utilisant moins de boucles et des fonctionalités natives d'Excel-VBA. Devrait être plus rapide sur de longues listes.

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Sub CopierEntreFeuilles()
    '   Cette macro recherche les enregistrements dans la feuille "source",
    '       du classeur en cours, ayant (Sexe = "M") ET (Bateaux = "O") et les copie
    '       sur la feuille "but".
    '       La feuille source est constituée de quatre colonnes avec une ligne d'entêtes
    '       et d'un nombre indéterminé d'enregistrements.
        ' Déclarations
        ' ------------
        ' Instances des feuilles traitées par la macro
        Dim wksSource As Worksheet
        Dim wksBut As Worksheet
        ' Variable utilitaires pour recherche
        Dim PremiereAdresse As String       ' Adresse de la premiere cellule trouvée
        Dim rngColonneRecherche As Range    ' Plage dans laquelle la recherche s'effectue
        Dim rngTrouve As Range              ' Cellule dans laquelle le mot est trouvé
     
        ' Connecter les instances à aucun autre classeur que celui-ci pour éviter l'utilisation
        '   de la macro sur d'autres classeurs.
        Set wksSource = ThisWorkbook.Worksheets("source")
        Set wksBut = ThisWorkbook.Worksheets("but")
     
        ' Copier la ligne d'entêtes sur la feuille "but"
        wksSource.Range("A1:D1").Copy
        wksBut.Cells(1, 1).PasteSpecial
     
        ' Limiter la recherche dans la colonne du sexe (colonne 3)
        Set rngColonneRecherche = wksSource.Cells(2, 3).Resize(wksSource.UsedRange.Rows.Count - 1, 1)
     
        ' Rechercher les valeurs "M" (Masculin) dans la colonne
        Set rngTrouve = rngColonneRecherche.Find(What:="M")
        If Not rngTrouve Is Nothing Then        ' Une cellule contenant le mot a été trouvée
            PremiereAdresse = rngTrouve.Address ' Prendre en note l'adresse pour terminer
                                                '   la boucle lorsqu'on aura fait le tour.
            ' Boucle de recherche des autres correspondances
            Do
                If rngTrouve.Offset(0, 1).Value = "O" Then  ' Tous les champs correspondent
                    ' Copier toute la ligne correspondante
                    wksSource.Cells(rngTrouve.Row, 1).Resize(1, 4).Copy
                    ' Coller après la dernière ligne
                    wksBut.Cells(wksBut.UsedRange.Rows.Count + 1, 1).PasteSpecial
                End If
                ' Rechercher après rngTrouve
                Set rngTrouve = rngColonneRecherche.FindNext(After:=rngTrouve)
                ' Si aucune correspondance, alors on sort de la boucle
                If rngTrouve Is Nothing Then Exit Do
            ' Continuer tant qu'on ne revient pas à la première cellule
            Loop While Not rngTrouve.Address = PremiereAdresse
        End If
    End Sub

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 55
    Par défaut
    bonjour a tous et merci singular

    j'ai décortiqué ton code et c'est vraiment tres formateur.

    cordialement
    GERARD

  7. #7
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 3
    Par défaut resolution d'une suite en VISUAL BASIC EXCEL c urgent
    bonjour s'il vous plait j'ai besoin d'aide pour résoudre par exemple Un=2Un+1+Un la question c'est de calculer si n=1,n=0....) je signale que la suite n'est qu'un exemple j'ai besoin de connaitre juste la forme generale du programme VBexcel

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    hota02

    Comme l'indique le titre de ton message, il s'agit d'un nouveau problème.
    L'usage sur ce site (et n'importe quel autre site du genre, d'ailleurs) est de marquer cette présente discussion comme étant résolue, si elle l'est, et d'en ouvrir une autre concernant le nouveau problème.


Discussions similaires

  1. [SQL] Création automatique en fonction de critères
    Par lylandra6 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 17/05/2007, 23h09
  2. Afficher un état en fonction de critères
    Par TNC dans le forum Access
    Réponses: 2
    Dernier message: 04/08/2006, 16h40
  3. Requete en fonction de critère "date"
    Par b747fred dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/08/2006, 15h32
  4. Regroupement en fonction des 8 premiers caractères
    Par 306xshdi dans le forum Access
    Réponses: 4
    Dernier message: 06/11/2005, 10h18

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