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 :

Extraire des données en italique d'une feuille et les copier sous forme de tableau dans une autre [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Extraire des données en italique d'une feuille et les copier sous forme de tableau dans une autre
    Bonjour,

    J'aimerai pouvoir extraire toutes les données en italique d'une feuille et les regrouper dans un tableau dans une autre feuille. Cependant, malgré maintes tentatives, je suis bloqué.
    Voici mon programme (et si vous avez de suggestions d'un programme plus simple,je suis preneur

    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
    Dim liste_gcao()
    ReDim liste_gcao(taille_tb)
     
     
    Dim c As Integer
    Dim a As Integer
     
     
    Dim val_gcao As String
     
    a = 0
     
     
    For i = 1 + prem_ligne To dern_ligne
    c = 0
    val_gcao = Sheets(ctbase).Cells(i, 1)
    val_gcao1 = Sheets(ctbase).Cells(i, 1).Font.Italic = False
    For n = 0 To a - 1
            If liste_gcao(n) Like val_gcao Or val_gcao1 Then
            c = c + 1
            End If
        Next n
            If c = 0 Then
            liste_gcao(a) = val_gcao
            a = a + 1
            End If
        Next i
     
       For i = 1 To a - 1
    Sheets(3).Cells(i, 2) = liste_gcao(i)
    Next i

    Merci

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Il y a d'énormes problèmes d'algorithme dans ton code.

    A commencer par les balises de ton premier For : les deux variables ne sont pas renseignées avant le For, donc la boucle ne risque pas de tourner.

    Ensuite ton second For.
    Tu veux aller de 0 à (a-1). Mais comme a est initialisée à 0, ça fait de 0 à -1.
    Là encore, ça ne risque pas de tourner.
    D'autant plus que c'est dans cette seconde boucle que "c" est renseigné donc il ne sera pas modifié.
    Et c'est justement ce "c" qui est testé dans le If suivant qui est supposé pouvoir modifier "a".
    En somme, c'est le serpent qui se mord la queue.

    Mais tu as fait tellement compliqué que je n'arrive pas à comprendre ce que tu veux faire exactement.

  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
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    Bonjour
    moi non plus je pige pas tres bien
    si je m'en réfère a l'enoncé +le test valeur dans son code
    exemple a adapter
    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
    Sub test()
        Dim tablo(), valeur$, i&, a&
        valeur = "toto"
        For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
            If Cells(i, 1).Font.Italic = True And Cells(i, 1) Like "*toto*" Then    ' si la valeur contient "toto" et que la cellule est en italic
                'OU!!
                'If Cells(i, 1).Font.Italic = true And Cells(i, 1) = "toto" Then ' si la valeur entiere  est egale a "toto" et que  la cellule est en italic
                a = a + 1: ReDim Preserve tablo(1 To a): tablo(a) = Cells(i, 1).Text
            End If
        Next
        If a > 0 Then
            With sheets("truc").Cells(1, 3).Resize(UBound(tablo), 1)
                .Value = tablo
                .Font.Italic = True
            End With
        End If
    End Sub

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Re Menhir et patricktoulon

    J'ai en effet fait très compliqué avec le code précédent. Je voulais stocker les valeurs en italique dans un tableau avant de les restituer dans une autre feuille.

    J'ai essayé d'adapter ton programme Patricktoulon, mais ça n'a pas l'air de marcher : j'ai certainement dû louper un truc...

    J'ai reessayé avec le code ci-après et ça marche :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim n As Integer,k as Integer
     
     
    n = Sheets(ctbase).Range("A" & Rows.Count).End(xlUp).Row
     
    While n >= 3
    k = Sheets(3).Range("A" & Rows.Count).End(xlUp).Row + 1
        If Sheets(ctbase).Range("A" & n).Font.Italic Then
        Sheets(3).Range("A" & k) = Sheets(ctbase).Range("A" & n)
        End If
        n = n - 1
    Wend
    Merci et bon week-end à vous

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/02/2017, 07h01
  2. Réponses: 6
    Dernier message: 11/04/2016, 15h08
  3. [XL-2007] Comment afficher une colonne simple sous forme de tableau dans une LISTBOX?
    Par ThamAL dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 18/10/2013, 18h19
  4. [Toutes versions] Recherche de données dans une feuille pour les copier dans une autre
    Par mattdogg97 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/02/2011, 15h22
  5. Réponses: 5
    Dernier message: 27/04/2007, 16h06

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