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 :

VBA: Rechercher une valeur et copier une chaine de caractè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
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Japon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 3
    Par défaut VBA: Rechercher une valeur et copier une chaine de caractères
    Bonjour,

    Après avoir cherché, peut être mal, des heures durant sur plusieurs forums d'aide, je viens vers vous pour m'aider à trouver mes problemes de script VBA.

    Excusez sans doute ma façon d'expliquer laborieuse. Je suis en stage après une reconversion professionnelle. J'ai déjà appris certains langages de programmation, mais je suis perdue avec VBA

    J'ai un tableau de données dans lequel j'ai fait une recherche multicritere des nouvelles entreprises.

    Je voudrais réaliser une macro qui à chaque fois que le critère nouvelle entreprise apparaisse dans la colonne (CQ), aille chercher le nom de cette entreprise dans une autre colonne. Puis copie le nom de toutes les entreprises trouvées sur une nouvelle feuille.

    Il y a sans doute des tonnes d'erreur dans ma macro, mais déjà première question : comment copier coller juste la chaine de caractères d'une cellule.

    Petite info: le fichier a été créé en version japonaise.

    Voici ma macro:


    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
    Sub New_customers()
     
    'Research of new customers
     
    Dim New_customer As String 'Declare la variable Nouveau client
    Dim Ligne As Range 'Declare la variable ligne
    Dim Limite As Integer 'Declare la variable limite
    Dim Liste As Integer 'Declare la variable liste
    Limite = 100
    Liste = 1
     
    Sheets("JD NET 0718").Select
    Range("CQ3").Select
    While ActiveCell.Value <> "New_customer" 'recherche la valeur dans la cellule active
            ActiveCell.Offset(1, 0).Select 'decale la ligne d'1 ligne vers le bas
     
     
            If ActiveCell.Value = "New_customer" Then 'si la cellule contient la valeur New_customer
            Set Ligne = Rows(ActiveCell.Row) 'selectionne la ligne correspondante
            New_customer = Range("C", Ligne).Copy 'copie la valeur de la colonne C dans la ligne correspondante
     
     
            Sheets("Feuil1").Select
     
           Range("B", Liste).Select 'selection de la cellule sur la nouvelle feuille a ecrire
            Newcustomer.Paste
     
     
            Liste = Liste + 1
     
            End If
     
            Limite = Limite - 1
     
    Wend

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Gatche Voir le message
    Bonjour,

    Une solution possible adaptée d'un code de Jacques BOISGONTIER dans cette discussion manipulation-tableau-vba-excel-2016-a
    Nb : Pour Philippe TULLIEZ : Au cas où tu lirais cette discussion, j'ai prévu également d'essayer ta méthode.

    Le résultat est déversé dans la colonne B uniquement pour respecter le code d'origine.

    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 New_customers()
     
    ' Une adaptation du code FiltreColonnes de Jacques BOISGONTIER
     
    Dim MatriceSource As Variant
    Dim MatriceFiltree As Variant
    Dim ShCible As Worksheet
    Dim I As Long
     
     
        MatriceSource = Sheets("JD NET 0718").UsedRange
        MatriceFiltree = FiltreArrayCol_JB(MatriceSource, Array(3, 95))     ' on prend les colonnes 3, 95
        Set ShCible = Sheets.Add
     
        With ShCible
             .Range("B1").Resize(UBound(MatriceFiltree), UBound(MatriceFiltree, 2)) = MatriceFiltree
             For I = .UsedRange.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
                 If .Cells(I, 3) <> "New_customer" Then .Cells(I, 3).EntireRow.Delete
             Next I
            ' .Columns(3).Clear ' Pour supprimer la colonne New_customer
        End With
     
     
        Set ShCible = Nothing
     
    End Sub
     
    Function FiltreArrayCol_JB(Tableau As Variant, ColResult As Variant)
     
    ' De Jacques BOISGONTIER
     
    Dim Decal As Long, I As Long, C As Long
    Dim MatriceResultante()
     
        ReDim MatriceResultante(LBound(Tableau) To UBound(Tableau), 1 To UBound(ColResult) - LBound(ColResult) + 1)
        Decal = 1 - LBound(ColResult)
     
        For I = LBound(Tableau, 1) To UBound(Tableau, 1)
          For C = LBound(ColResult) To UBound(ColResult)
            MatriceResultante(I, C + Decal) = Tableau(I, ColResult(C))
          Next C
        Next I
     
        FiltreArrayCol_JB = MatriceResultante
     
    End Function

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Japon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 3
    Par défaut
    Bonjour,

    Je vous remercie beaucoup. Ca fonctionne tres bien.

    Cependant mon fichier plante, car j'ai beaucoup de donnees a traiter.

    Une idee?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Gatche Voir le message

    C'est un peu contradictoire !

    Combien de lignes, combien de colonnes ?

  5. #5
    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
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour
    J'ai un tableau de données dans lequel j'ai fait une recherche multicritere des nouvelles entreprises.

    Je voudrais réaliser une macro qui à chaque fois que le critère nouvelle entreprise apparaisse dans la colonne (CQ), aille chercher le nom de cette entreprise dans une autre colonne. Puis copie le nom de toutes les entreprises trouvées sur une nouvelle feuille.
    un simple filtre sur la colonne "CQ" ne suffirait il pas ? de cette maniere tu les aurais tous d'un coup tes "new_customer"
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Gatche Voir le message
    Et là en remplaçant uniquement la procédure ?

    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
     
    Sub New_customers()
     
    ' Une adaptation du code FiltreColonnes de Jacques BOISGONTIER
     
    Dim MatriceSource As Variant
    Dim MatriceFiltree As Variant
    Dim ShCible As Worksheet
    Dim I As Long
     
     
        MatriceSource = Sheets("JD NET 0718").UsedRange
        MatriceFiltree = FiltreArrayCol_JB(MatriceSource, Array(3, 95))     ' on prend les colonnes 3, 95
        Set ShCible = Sheets.Add
     
        With ShCible
             .Range("B1").Resize(UBound(MatriceFiltree), UBound(MatriceFiltree, 2)) = MatriceFiltree
             For I = .UsedRange.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
                 If .Cells(I, 3) <> "New_customer" Then .Cells(I, 3).EntireRow.Delete
             Next I
            ' .Columns(3).Clear ' Pour supprimer la colonne New_customer
        End With
     
        Erase MatriceSource
        Erase MatriceFiltree
     
        Set ShCible = Nothing
     
    End Sub

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Japon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 3
    Par défaut
    Je vois les resultats s'afficher mais ensuite excel plante. Je precise que mon fichier fait 40 Mo.
    J'ai un cachier des charges precis de reports a faire, et je dois au maximum automatiser les taches, pour etablir un report mensuel. Je suis un peu perdue sur l'automatisation.

    J'essayerai demain le nouveau script (decalage horaire oblige). Je vous remercie encore de votre aide.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/10/2017, 11h47
  2. Réponses: 5
    Dernier message: 01/10/2015, 23h29
  3. Réponses: 82
    Dernier message: 05/02/2011, 14h34
  4. Copier une table Access d'une base de données à une autre
    Par Marie S. dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 23/05/2007, 12h09
  5. Réponses: 10
    Dernier message: 30/11/2006, 23h06

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