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 :

[E-02] Sélection de plusieurs lignes ayant une cellule identique


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut [E-02] Sélection de plusieurs lignes ayant une cellule identique
    Bonjour à tous et toutes,

    Je suis débutant en VBA et je cherche à réaliser une macro qui doit sans doute être simple et/ou expliquée ailleurs mais je n'ai pas trouvé.

    Voici donc ma question: Excel version XP

    Je dispose d'un tableau avec des cellules que j'ai classées (grâce à une macro ) dans l'ordre alphabétique.
    Je souhaiterais maintenant pourvoir sélectionner les lignes dont les cellules de la colonne "B" sont identiques (je les ai classé dans l'ordre alphabétique précédement donc elles se suivent). Mon problème est que je n'ai pas le nombre de lignes exact.

    J'espère avoir été assez clair.
    Merci d'avance pour votre réponse.

  2. #2
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Points : 323
    Points
    323
    Par défaut
    Bonjour,

    Voici un code fait vite fait
    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 selectionplage()
     
    Dim premierecellule As Integer
    Dim dernierecellule As Integer
     
     
    '1ère ligne où commence les données
    i = 2
    premiereligne = i
    'tu définies que la dernière ligne à chercher commence à la ligne suivante
    derniereligne = i + 1
     
    'tu boucle tant que les 2 valeurs sont égales
    Do While Range("B" & derniereligne) = Range("B" & premiereligne)
     
        'en incrémentant à chaque passage la ligne
        derniereligne = derniereligne + 1
     
    Loop
     
    'tu selectionne de la première cellule à la dernière trouvée -1
    'sinon tu vas selectionner la première différente et non la dernière égale !
    Range(Cells(premiereligne, 2), Cells(derniereligne - 1, 2)).Select
     
    End Sub
    Je pense qu'il y a des façons plus élégantes pour faire ce que tu cherche mais le principal, c'est que ça fonctionne

    Tu peux modifier la ligne à partir de laquelle tu veux commencer la recherche:

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup oOVaveOo pour ta réponse rapide.

    Ton code me permet en effet de sélection les premières cellules identiques de la colonne. C'est parfait.

    J'ai malheureusement une remarque que j'ai du mal exprimer :
    je voudrais que la sélection prenne tout la ligne.

    ex:

    ABCD
    1234
    a2cd
    x3xx

    J'aimerais que les 2 lignes soit sélectionnées:

    1234
    a2cd

    Ton code m'a permis de sélectionner les deux "2" uniquement.

    J'imagine que c'est la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(premiereligne, 2), Cells(derniereligne - 1, 2)).Select
    qu'il faut modifier mais je ne sais pas quoi changer.

    Merci encore

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    en fait, je ne sais pas quoi mettre à la place du 2 dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(premiereligne, 2), Cells(derniereligne - 1, 2)).Select
    Si j'ai bien compris, c'est ce que je dois changer.
    Je veux mettre "B:N" pour lui dire de prendre de la colonne B à N mais ça ne fonctionne pas.

  5. #5
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Points : 323
    Points
    323
    Par défaut
    Re salut,

    N étant la 14ème colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(premiereligne, 2), Cells(derniereligne - 1, 14)).Select

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Génial!!

    Merci beaucoup.
    En plus, grâce à tes explications entre les lignes de code, je viens de gagner de l'XP en VBA (Do While Loop, Integer, range).

    Comme prévu, je n'étais pas très malin 14 c'était pas sorcier.

    En tout cas, c'est résolu et c'est exactement ce que je recherchais.
    Merci

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Je suis tjs sur le même travail, j'avance pas très vite
    Maintenant que j'ai fini d'utiliser les premières lignes dont les cellules sont identiques, j'aimerais pouvoir faire les mêmes actions sur les lignes suivantes et ainsi de suite. Il doit y avoir du loop même je ne sais pas faire.

    Pour vous donner une idée, voici le code (tout pas beau j'en suis conscient) que j'ai pour le moment:

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Sub NouvelOngletpourlesvols()
    'met les vols dans l'ordre alphabetique
        derniere_ligne = Range("E3").End(xlDown).Row
        Range("B3:B" & derniere_ligne).Select
        Range("B2:O" & derniere_ligne).Sort Key1:=Range("B3"), Order1:=xlAscending, Header:= _
            xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
    'crée un nouvel onglet avec le nom du vol en B3 plus le nom du jour en B5
    Worksheets.Add.Name = _
    Worksheets("Data Input").Range("B3").Value & " " & Worksheets("Data Input").Range("D3").Value
    'activation de l'onglet ("Data Input")
    Sheets("Data Input").Activate
    'création d'integer??? pour pouvoir créer des fonctions on dirait
    Dim premierecellule As Integer
    Dim dernierecellule As Integer
     
     
    '1ère ligne où commence les données
    i = 3
    premiereligne = i
    'tu définies que la dernière ligne à chercher commence à la ligne suivante
    derniereligne = i + 1
     
    'tu boucle tant que les 2 valeurs sont égales
    Do While Range("B" & derniereligne) = Range("B" & premiereligne)
     
        'en incrémentant à chaque passage la ligne
        derniereligne = derniereligne + 1
     
    Loop
     
    'tu selectionne de la première cellule à la dernière trouvée -1
    'sinon tu vas selectionner la première différente et non la dernière égale !
    'sélection de la ligne du titre plus des lignes avec le vol identique
    Range(Cells(premiereligne - 1, 2), Cells(derniereligne - 1, 15)).Select
     
    'Copie de ces lignes
    Selection.Copy
    'selection de l'onglet nouvellement créé donc le plus à gauche
    Sheets(1).Select
    'collage
    Range("B2").Select
    ActiveSheet.Paste
    'mise en forme des données du nouvel onglet
        Cells.Select
        Cells.EntireColumn.AutoFit
        Columns("C:D").Select
        Application.CutCopyMode = False
        Selection.Delete Shift:=xlToLeft
        Columns("K:L").Select
        Selection.Delete Shift:=xlToLeft
        Columns("K:K").Select
        Selection.Cut
        Columns("C:C").Select
        Selection.Insert Shift:=xlToRight
        Range("B2").Select
     
     
    End Sub
    J'espère que j'ai été clair.
    Peut être que oOVaveOo aura la solution pour moi encore...

    Merci d'avance à tous

  8. #8
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Points : 323
    Points
    323
    Par défaut
    Salut,

    Ce code devrait faire à peut près ce que tu veux, à toi de le peaufiner
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    Sub NouvelOngletpourlesvols()
     
    'met les vols dans l'ordre alphabetique
        derniere_ligne = Range("E3").End(xlDown).Row
        Range("B3:B" & derniere_ligne).Select
        Range("B2:O" & derniere_ligne).Sort Key1:=Range("B3"), Order1:=xlAscending, Header:= _
            xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
    'crée un nouvel onglet avec le nom du vol en B3 plus le nom du jour en B5
    'Worksheets.Add.Name = _
    'Worksheets("Data Input").Range("B3").Value & " " & Worksheets("Data Input").Range("D3").Value
    'activation de l'onglet ("Data Input")
    Sheets("Data Input").Activate
     
    'création d'integer??? pour pouvoir créer des fonctions on dirait
    'On définit ici le type de variantes que l'on va utiliser.
    'Fais des recherches là dessus, c'est très important
    Dim premierecellule As Integer
    Dim dernierecellule As Integer
    Dim nv_sh as string 
    dim i as integer
     
    '1ère ligne où commence les données
    'Il faut initialiser une fois avant la boucle ....
    i = 3
    premiereligne = i
    'tu définies que la dernière ligne à chercher commence à la ligne suivante
    derniereligne = i + 1
     
    Do While Cells(i, 2) <> Empty
    'et une fois dans la boucle pour que ça se réinitialise à chaque passage
    premiereligne = i
    'tu définies que la dernière ligne à chercher commence à la ligne suivante
    derniereligne = i + 1
     
    Worksheets.Add.Name = _
    Worksheets("Data Input").Range("B" & i).Value & " " & Worksheets("Data Input").Range("D" & i).Value
    nv_sh = Worksheets("Data Input").Range("B" & i).Value & " " & Worksheets("Data Input").Range("D" & i).Value
     
    Sheets("Data Input").Activate
     
    'tu boucle tant que les 2 valeurs sont égales
    Do While Range("B" & derniereligne) = Range("B" & premiereligne)
     
        'en incrémentant à chaque passage la ligne
        derniereligne = derniereligne + 1
     
    Loop
     
    'tu selectionne de la première cellule à la dernière trouvée -1
    'sinon tu vas selectionner la première différente et non la dernière égale !
    'sélection de la ligne du titre plus des lignes avec le vol identique
    'Attention, tu vas ici selectionner la ligne du dessus, je te laisse le modifier
    Range(Cells(premiereligne - 1, 2), Cells(derniereligne - 1, 15)).Select
     
    'Copie de ces lignes
    Selection.Copy
    'selection de l'onglet nouvellement créé donc le plus à gauche
    Sheets(nv_sh).Select
    'collage
    Range("B2").Select
    ActiveSheet.Paste
    'mise en forme des données du nouvel onglet
        Cells.Select
        Cells.EntireColumn.AutoFit
        Columns("C:D").Select
        Application.CutCopyMode = False
        Selection.Delete Shift:=xlToLeft
        Columns("K:L").Select
        Selection.Delete Shift:=xlToLeft
        Columns("K:K").Select
        Selection.Cut
        Columns("C:C").Select
        Selection.Insert Shift:=xlToRight
        Range("B2").Select
     
    Sheets("Data Input").Activate
    i = derniereligne
     
    Loop 
    end sub

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    oOvaveOo,

    Merci pour ta réponse super rapide et efficace.
    Peut m'éclairer sur les strings (ici nv_sh)?

    Ta remarque sur le fait que je prends la ligne juste avant premièreligne est du à mon bidouillage par rapport au 1er code que tu m'avais donné. Je voulais prendre la ligne de titre qui se trouve être juste au dessus de la première ligne que je prennais.

    Mais maintenant que le code a pris un peu d'ampleur, je suis d'accord avec toi pour dire que la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Attention, tu vas ici selectionner la ligne du dessus, je te laisse le modifier
    Range(Cells(premiereligne - 1, 2), Cells(derniereligne - 1, 15)).Select
    doit être modifiée.
    Je vais faire des recherches pour savoir comment je peux combiner deux ranges dans une seule sélection (une sorte d'union mathématique). J'imagine que tu sais mais je ne veux pas abuser non plus.

    Merci beaucoup pour ton aide. Dès que j'ai trouvé pour la sélection multiple je cocherais résolu. Je retourne au boulot et je cherchais avec l'enregisteur un peu plus tard.

    Merci beaucoup en tout cas pour ton aide précieuse.

    Des simples virgules
    évidemment, le problème d'être débutant

    Merci

    J'ai mis ça.
    Ca marche, ça doit pas être très propre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim r1, r2, multiplerange As Range
    Set r1 = Range(Cells(premiereligne, 2), Cells(derniereligne - 1, 15))
    Set r2 = Range("B2:O2")
    Set multiplerange = Union(r1, r2)
    multiplerange.Select
    Merci beaucoup.

  10. #10
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Points : 323
    Points
    323
    Par défaut
    Re,

    Attention, quant tu type tes variantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim r1, r2, multiplerange As Range
    Vba l'interprète comme étant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim r1 as variant, r2 as variant, multiplerange As Range
    Il faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim r1 as range, r2 as range, multiplerange As Range
    Sinon, cette façon de faire me semble propre.
    Peut m'éclairer sur les strings (ici nv_sh)?
    Je définies le nom de la feuille (nv_sh) comme étant une chaîne de caractère (as string)

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta remarque.
    Code changé.

    Grand merci pour toute ton aide.

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

Discussions similaires

  1. Plusieurs lignes dans une cellules
    Par kanabzh29 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/07/2008, 16h33
  2. FlexGrid ecrire sur plusieur ligne dans une cellule
    Par label55 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 05/02/2008, 14h54
  3. plusieurs lignes sur une cellule du stringgrid
    Par neuneu1 dans le forum Débuter
    Réponses: 4
    Dernier message: 06/08/2007, 22h35
  4. [MySQL] Sélection de plusieurs lignes en une requête
    Par kalash_jako dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/05/2006, 19h43
  5. Texte sur plusieurs lignes dans une cellule de JTable
    Par JeanECN dans le forum Composants
    Réponses: 3
    Dernier message: 10/04/2006, 17h20

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