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 :

Commande Find ou autre


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 32
    Points : 16
    Points
    16
    Par défaut Commande Find ou autre
    Bonjour,

    Je cherche une façon de trouver dans un document excel différents mots comme:
    Tablette, Produits
    Lorsque je trouve un de ces mots, la cellule a la droite de Produits(ou tablette), est le nom du produit / et sous le produit est la quantité de ce produit

    Je veux prendre ce # de produit et la quantité et le copier dans une autre feuille, dans les colonnes correspondantes

    Plus d'un produit peuvent être sur la ligne produit - Les noms de produits sont parfois fusionnés sur plusieurs cellule - Je crois qu'il faudrait extraire le nom du produit et la quantité et les stocker temporairement car sinon ça recopie la fusion (ou peut-être il y a un autre truc)

    Produits 72-BUMP-011-A 72-BUMP-012-A
    Quantité 2 2


    Est-ce clair ou faisable?

    Merci
    Images attachées Images attachées  

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour straipe,

    Une petite macro personnalisée comme celle-ci devrait répondre à ton besoin il me semble :
    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
    Option Explicit
     
    Sub Recherche()
    Dim oRng As Range
    Dim i As Integer, n As Integer
    Dim oProd As Range, oCell As Range
    Dim oTable() As String
     
    With Worksheets("Feuil1")
        Set oRng = .Range("A1")
        For i = 0 To .Cells(.Rows.Count, 1).End(xlUp).Row - 1
            If oRng.Offset(i, 0) = "tablette" Or oRng.Offset(i, 0) = "produits" Then
                If .Cells(oRng.Offset(i, 1).Row, .Columns.Count).End(xlToLeft).Column >= oRng.Offset(i, 1).Column Then
                    Set oProd = Range(oRng.Offset(i, 1), .Cells(oRng.Offset(i, 1).Row, .Columns.Count).End(xlToLeft))
                    For Each oCell In oProd
                        If oCell <> "" Then
                            n = n + 1
                            ReDim Preserve oTable(1 To 2, 1 To n)
                            oTable(1, n) = oCell
                            oTable(2, n) = oCell.Offset(1, 0)
                        End If
                    Next oCell
                End If
            End If
        Next i
    End With
     
    With Worksheets("Feuil2")
        Set oRng = .Cells(.Rows.Count, 1).End(xlUp)
        For i = LBound(oTable, 2) To UBound(oTable, 2)
            oRng.Offset(i, 0) = oTable(1, i)
            oRng.Offset(i, 1) = oTable(2, i)
        Next i
    End With
     
    End Sub
    Il y a surement plus simple pour autant !
    Je te laisse adapter !
    N'hésite pas à revenir vers moi !

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup,

    J'ai mis le code dans mon bouton qui est sur la Feuil7 et j'ai modifié le code pour que ça prenne les données de ma Feuil5 (et mettre les résultats dans Feuil6)- et ça stop sur cette ligne: With Worksheets("Feuil5")

    L'indice n'apartient pas à la sélection

    Des idées?

    Merci encore

  4. #4
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Je t'ai mis des commentaires afin que tu puisses 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
    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
    Option Explicit
     
    Sub Recherche()
    'Déclaration des variables
    Dim oRng As Range
    Dim i As Integer, n As Integer
    Dim oProd As Range, oCell As Range
    Dim oTable() As String
     
    'Avec Feuil1 (feuille de données)
    With Worksheets("Feuil1")
        'On se place sur A1
        Set oRng = .Range("A1")
        'On parcours de A1 à la dernière ligne non-vide
        For i = 0 To .Cells(.Rows.Count, 1).End(xlUp).Row - 1
            'Si on trouve "tablette" ou "produits" (on peut enlever le LCase si souhaité)
            If LCase(oRng.Offset(i, 0)) = "tablette" Or LCase(oRng.Offset(i, 0)) = "produits" Then
                'On vérifie qu'on a des éléments à sa droite
                If .Cells(oRng.Offset(i, 1).Row, .Columns.Count).End(xlToLeft).Column >= oRng.Offset(i, 1).Column Then
                    'Si oui, on récupère la range des valeurs
                    Set oProd = Range(oRng.Offset(i, 1), .Cells(oRng.Offset(i, 1).Row, .Columns.Count).End(xlToLeft))
                    'qu'on parcours.
                    For Each oCell In oProd
                        'Si on trouve quelque chose
                        If oCell <> "" Then
                            n = n + 1
                            'on sauvegarde les éléments.
                            ReDim Preserve oTable(1 To 2, 1 To n)
                            oTable(1, n) = oCell
                            oTable(2, n) = oCell.Offset(1, 0)
                        End If
                    Next oCell
                End If
            End If
        Next i
    End With
     
    'Avec Feuil2 (feuille où l'on déplace les données)
    With Worksheets("Feuil2")
        'On se place après la dernière cellule non-vide de la colonne 1
        Set oRng = .Cells(.Rows.Count, 1).End(xlUp)
        'et on y écrit les résultats.
        For i = LBound(oTable, 2) To UBound(oTable, 2)
            oRng.Offset(i, 0) = oTable(1, i)
            oRng.Offset(i, 1) = oTable(2, i)
        Next i
    End With
     
    End Sub
    J'attends ton retour !

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    Merci de ta patience et les commentaires, je vais te mettre une autre photo pour être sur qu'on parle de la même chose Mes données sont dans la Feuil5 - J'ai un bouton MAJ sur la Feuil7, et le résultat en appuyant sur le bouton va aller dans la Feuil6Nom : erreur.JPG
Affichages : 86
Taille : 89,5 Ko
    Images attachées Images attachées  

  6. #6
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    C'est soit With Feuil5 puisque c'est une Worksheets soit With Worksheets("IFX-2016-blablabla") pour lui donner son nom.
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  7. #7
    Membre à l'essai
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    Mon erreur, j'ai remplacer le Feuil par les noms des Feuilles et je suis capable d'avancer plus. Dans la 2e partie du code, je dois mettre les données dans ce format - Je crois que le code ne serait pas adapté à ma situation dans ce cas?

    merci

    Nom : resultats.JPG
Affichages : 83
Taille : 18,0 Ko

  8. #8
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Concernant ta deuxième difficulté, ne connaissant que la quantité, il faut changé comme ceci l'écriture de tes valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    With Worksheets("Feuil2")
        'On se place après la dernière cellule non-vide de la colonne 1
        Set oRng = .Cells(.Rows.Count, 1).End(xlUp)
        'et on y écrit les résultats.
        For i = LBound(oTable, 2) To UBound(oTable, 2)
            oRng.Offset(i, 0) = oTable(1, i)
     
    'On ne déplace ici plus de 1 mais de 3 colonnes l'écriture des résultats.
            oRng.Offset(i, 3) = oTable(2, i)
        Next i
    End With
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  9. #9
    Membre à l'essai
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    Ce qui s'en va dans Feuil2 sous Nom Pièce, c'est l'information recueillie lorsque l'on trouve Tablette ou Produits + la Quantité sous QTY

    La dernière modif me sort une erreur sous: For i = LBound(oTable, 2) To UBound(oTable, 2).

  10. #10
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    ... ce qui signifie que oTable est vide => et donc n'a rien trouvé.

    Je t'ai fait quelque chose en fonction du tableau que tu m'as présenté.
    Peux-tu poser un fichier exemple ? Ca sera plus simple que 15 000 posts consécutifs.

    Tu peux essayer, au passage, de vérifier l'égalité If oRng.Offset(i, 0) = "Tablette" Or oRng.Offset(i, 0) = "Produits" Then qui doit être passante.
    Pour moi, oRng.Offset(i, 0) parcours la colonne A.
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  11. #11
    Membre à l'essai
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    Je n'ai plus l'erreur, mais aucune valeur ne se transfère dans Résultats

    Document Original - IFX-2016-01-11 - je l'ai modifié en MOD, mais si je serais capable de tout faire sans devoir modifier (MOD) ça serait génial. Je ne sais pas si on peut travailler avec les couleurs également. Car ce qui est en jaune, devrait être lu de haut en bas. Ex.: C18 + quantité C20 + quantité D18, D20, E18, E20 etc et repartir a H18 par la suite (feuille IFX)

    merci
    Fichiers attachés Fichiers attachés

  12. #12
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Boah... si tu avais un peu cherché dans ta feuille, tu aurais vu tes valeurs tout en bas (EDIT : je l'avais même mis en commentaire.).
    Bref, voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    'Avec Feuil6 (feuille de résultats)
    With Worksheets("Resultats")
        'On se place après la dernière cellule non-vide de la colonne 1
        Set oRng = .Cells(.Rows.Count, 2).End(xlUp)
        'et on y écrit les résultats.
        For i = LBound(oTable, 2) To UBound(oTable, 2)
            oRng.Offset(i, 0) = oTable(1, i)
     
    'On ne déplace ici plus de 1 mais de 3 colonnes l'écriture des résultats.
            oRng.Offset(i, 3) = oTable(2, i)
        Next i
    End With
    Je me base maintenant sur la colonne B.

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  13. #13
    Membre à l'essai
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    Désolé je n'avais pas descendu aussi bas Ça fonctionne #1. Vraiment super merci

  14. #14
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Et comme toujours, un forum n'est pas statique et ne sert pas qu'à toi. Ainsi lis ma signature et passe ce sujet en .

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

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

Discussions similaires

  1. Incompréhension avec la commande "find"
    Par Charly94 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 28/12/2006, 18h17
  2. Option -prune avec la commande find
    Par gangsoleil dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 21/04/2006, 17h43
  3. La commande Find d'un recordset
    Par christel1982 dans le forum ASP
    Réponses: 22
    Dernier message: 14/11/2005, 20h36
  4. La commande find
    Par Invité4 dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 22/03/2005, 14h46
  5. [Collaboration/Interaction] Peut-on schématiser une interaction entre un bouton de commande et un autre objet ?
    Par manel007 dans le forum Autres Diagrammes
    Réponses: 5
    Dernier message: 21/09/2004, 01h01

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