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 :

Sélection de ligne d'un tableau et rangement dans une feuille de calcul [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Par défaut Sélection de ligne d'un tableau et rangement dans une feuille de calcul
    Bonjour à tous et toutes,

    Etant un petit nouveau dans le langage VBA, j'ai besoin d'aide. J'ai cherché des topics se rapprochant de mon problème mais je n'ai pas trouvé ou compris.
    J'ai pu obtenir le programme suivant qui me permet de ranger une liste de cellules dans un tableau.
    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 extractionMots()
     
    Dim tableau() As String                      'tableau pour récupérer les lignes
    Dim i As Integer
     
                For Each cel In Range("B1:B26")
                    c = cel.Address
                    tableau = Split(Range(c).Value, " ")
     
                            For i = 0 To UBound(tableau)
                            Debug.Print tableau(i)      'Le résultat s'affiche dans la fenêtre d'execution de l'éditeur de macros
                            Next i
                Next cel
    End Sub
    Mes cellules sont remplies soit de un élément, soit de plusieurs. Dans mon cas et peut être naïvement, j'ai décidé d'avoir tout les éléments en colonne dans un tableau

    J'ai donc utilisé une fonction split. Voulant sélectionner qu’une partie de ces éléments suivant le nom, je voulais savoir s'il y avait une manière avec des tests.

    Je m'explique si on a la liste dans un tableau:

    toto
    tata
    tutu

    et qu'on ne veuille sélectionner que toto et tutu, comment peut-on faire?

    Par la suite, comment mettre la sélection sur une feuille de calcul?

    Merci beaucoup.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 199
    Par défaut
    Bonjour,

    Un truc du genre


    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
     
     
    Sub extractionMots()
     
    Dim tableau() As String 'tableau pour récupérer les lignes
    Dim i As Integer, maChaine As String, Position As Integer
    Dim ligneVide As Integer
     
    ligneVide = Sheets("Feuil1").Range("a" & Rows.Count).End(xlUp).Row
     
    maChaine = InputBox("Veuillez saisir la chaine de caractere à ne pas conserver")
     
    For Each cel In Range("B1:B26")
    c = cel.Address
    tableau = Split(Range(c).Value, " ")
     
    For i = 0 To UBound(tableau)
        Position = InStr(tableau(i), maChaine)
     
        If Position = 0 Then
            ligneVide = ligneVide + 1
            Sheets("Feuil1").Cells(ligneVide, 1) = tableau(i)
            Debug.Print tableau(i) 'Le résultat s'affiche dans la fenêtre d'execution de l'éditeur de macros
        End If
    Next i
     
    Next cel
    End Sub
    Cordialement,

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Par défaut
    Merci pour votre réponse.

    En fait ce serait plutot l'inverse dans le pocessus.En effet les lignes que je veux conservées seront toujours les mêmes et donc pour l'automatisation je souhaite mettre des paramètres fixes.

    J'ai essayé avec une ligne de code filter comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau_f = Filter(tableau, "ADID", True)
    // remplissage d'un nouveau tableau avec test sur la chaine de caractère pour accepter ou non son écriture, ADID étant la chaine de caractère avec lequel je test le programme.

    Le soucis c'est que j'ai l'impression que cela ne marche qu'une fois.

    encore merci

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Par défaut
    J'ai trouvé pourquoi la ligne "filter" ne marchait pas pour deux tests. Sur la doc VBA est marqué que ce test génère un tableau 1x1 pour un élément donc impossible que le deuxième se retrouve dans le même tableau.

    Y aurait-il un moyen de concaténer ces tableaux issus de plusieurs tests filter?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 199
    Par défaut
    Bonjour,

    Pourquoi ne pas créer une feuille PARAMETRES dans laquel sont saisies dans la colonne A les chaines de caractere à conserver er de rajouter une fonction "chaineAcceptee" qui viens regarder si la chaine est accéptée ou non

    Le code de la fonction

    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
     
     
    Function chaineAcceptee(laChaine As String) As Boolean
     
     
    chaineAcceptee = False
     
    Set R = Sheets("PARAMETRES").Range("A:A").Find(laChaine, lookat:=xlWhole)
     
    If Not R Is Nothing Then
        chaineAcceptee = True
        Exit Function
    End If
     
    End Function
    et le code de la procédure extractionMots

    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
     
     
    Sub extractionMots()
     
    Dim tableau() As String 'tableau pour récupérer les lignes
    Dim i As Integer, maChaine As String, Position As Integer
    Dim ligneVide As Integer
     
    ligneVide = Sheets("Feuil2").Range("a" & Rows.Count).End(xlUp).Row
     
    For Each cel In Sheets("Feuil1").Range("B1:B26")
        c = cel.Address
        tableau = Split(Range(c).Value, " ")
     
        For i = 0 To UBound(tableau)
            If chaineAcceptee(tableau(i)) Then
                ligneVide = ligneVide + 1
                Sheets("Feuil2").Cells(ligneVide, 1) = tableau(i)
                Debug.Print tableau(i) 'Le résultat s'affiche dans la fenêtre d'execution de l'éditeur de macros
            End If
        Next i
    Next cel
    End Sub
    Cordialement,

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Par défaut
    Merci pour ces conseils, j'ai donc changer juste les noms des feuilles et j'obtients ceci :

    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
    Function chaineAcceptee(laChaine As String) As Boolean
     
    chaineAcceptee = False
     
    Set R = Sheets("PARAMETRES").Range("A:A").Find(laChaine, lookat:=xlWhole) 'création de l'objet R, mémoire alloué de la chaine plus adresse
     
                If Not R Is Nothing Then
                    chaineAcceptee = True
                    Exit Function
                End If
     
    End Function
     
    ----------------------------------------------------------
    Sub extraction()
     
    Dim tableau() As String 'tableau pour récupérer les lignes
    Dim i As Integer, maChaine As String, Position As Integer
    Dim ligneVide As Integer
     
    ligneVide = Sheets("Feuil3").Range("a" & Rows.Count).End(xlUp).Row
     
            For Each cel In Sheets("Feuil1").Range("B1:B26")
            c = cel.Address
            tableau = Split(Range(c).Value, " ")
     
                    For i = 0 To UBound(tableau)
                                    If chaineAcceptee(tableau(i)) Then
                                        'ligneVide = ligneVide + 1
                                        'Sheets("Feuil3").Cells(ligneVide, 1) = tableau(i)
                                        'Debug.Print tableau(i) 'Le résultat s'affiche dans la fenêtre d'execution de l'éditeur de macros
                                    End If
                    Next i
            Next cel
    End Sub
    Mais la, quand je regarde en débogage, il ne rentre jamais dans la boucle if!!!J'ai loupé quelque chose?

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

Discussions similaires

  1. [XL-2003] vba: Copier un tableau 1 dimension dans une feuille
    Par Gotita dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/09/2009, 18h17
  2. [Toutes versions] Copier le contenu d'un tableau dans une feuille de calcul
    Par Heureux-oli dans le forum Contribuez
    Réponses: 0
    Dernier message: 25/04/2009, 20h08
  3. [XL-2003] Trié un tableau dans une feuille de calcul lors de son ouverture
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 09/04/2009, 15h27
  4. Rafraichir un tableau croisé dynamique dans une feuille
    Par onejock dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/07/2008, 10h18
  5. Réponses: 1
    Dernier message: 19/02/2007, 19h18

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