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 :

manipuler des chaines de caracteres en excel vb [XL-2002]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Par défaut manipuler des chaines de caracteres en excel vb
    Bonjour à tous,

    Besoin de serieux coup de pouces d'experts.

    Voilà, j'ai fais une macro sous excel 2002 qui doit normalement faire les opérations suivantes :

    Contrôler les cellules d'une colA qui se trouve sur "feuil2" par rapport a "feuil1" et sa colB.
    Lors du contrôle si une valeur est incluse (si "feuil2" est incluse dans "feuil1"), alors copier la cellule de la colA et colB de "feuil2" vers la colE et colF de "feuil1.


    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
    Sub main()
        compteur_feuil2 = 1    'initialisation de l'onglet "feuil2"
     
            compteur_feuil1 = 1     'déclaration feuil1 commencant par cel1
            While (Worksheets("ref_feuil1").Range("B" & compteur_ref_feuil1) <> "")
            'ref_feuil1 colB ne doit pas être vide
     
                 compteur_libelle_type = 1     'déclaration libelle_type commencant par cel1
                 Do While (Worksheets("libelle_type").Range("A" & compteur_libelle_type) <> "")
                 'libelle_type colA ne doit pas être vide
     
                    If InStr(Ucase(("feuil2").Range("A" & compteur_feuil2)),(Ucase("feuil1").Range("B" & compteur_feuil1)) <> 0) Then
                    'si (Ucase ou Lcase= Maj ou min) colA de feuil2 est inclus dans colB de feuil1 alors
     
                        Worksheets("feuil1").Range("E" & compteur_feuil1).Value = Worksheets("feuil2").Range("A" & compteur_feuil2).Value
                        'coller dans feuil1 colE la colA de feuil2
     
                        Worksheets("feuil1").Range("F" & compteur_feuil1).Value = Worksheets("feuil2").Range("B" & compteur_feuil2).Value
                        'coller dans feuil1 colF la colB de feuil2
     
                        compteur_feuil1 = compteur_feuil1 + 1
                    End If
     
                 compteur_feuil1 = compteur_feuil1 + 1   'de la cel1 sur feuil1 passer à la cel2
                Loop    'si colA de feuil2 est supérieur à colI de feuil1 alors sortir du mécanisme et passer au suivant
     
             compteur_feuil2 = compteur_feuil2 + 1   'de la cel1 sur feuil2 passer à la cel2
            Wend
    End Sub

    Mes difficultés :
    - Plusieurs messages d'erreurs.
    - Je n'avance pas malgré mes tentatives de corrections infructueuses.


    Je désespéres, merci d'avance pour l'aide et bonne fêtes de fin d'année.

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour

    En utilisant la méthode find, ton code serait comme 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
    Sub Main()
    Dim LastLig As Long, i As Long
    Dim Nom As String, Prem As String
    Dim c As Range
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil2")
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        For i = 2 To LastLig
            Nom = .Range("A" & i).Value
            If Nom <> "" Then
                Set c = Worksheets("Feuil1").Range("B:B").Find(Nom, LookIn:=xlValues, lookat:=xlPart)
                If Not c Is Nothing Then
                    Prem = c.Address
                    Do
                        Worksheets("Feuil1").Range("E" & c.Row & ":F" & c.Row).Value = .Range("A" & i & ":B" & i).Value
                        Set c = Worksheets("Feuil1").Range("B:B").FindNext(c)
                    Loop While Not c Is Nothing And c.Address <> Prem
                    Set c = Nothing
                End If
            End If
        Next i
    End With
    End Sub

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Par défaut Un grand merci pour la rapidité
    Un grand merci pour la rapidité et en plus ca fonctionne très bien.

  4. #4
    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 heu...!!!
    bonjour mercatog et domes85


    pour mercatog:

    je me pose une question

    on utilise la methode find sur une plage définie
    selon ta methode proposée plus haut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set c = Worksheets("Feuil1").Range("B:B").Find(Nom, LookIn:=xlValues, lookat:=xlPart)
    on cherche dans la colonne B
    donc la recherche se fait si je ne me trompe pas sur toute la colonne
    alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    derligfeuil1=sheets("feuil1").range("b"&rows.count).end(xlup).row
    Set c = Worksheets("Feuil1").Range("B1:"& derligfeuil1).Find(Nom, LookIn:=xlValues, lookat:=xlPart)
    recherche sur les lignes utilisée de la colonne B

    qu'en pense tu? ai-je tord?

    au plaisir
    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

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour Patrick
    Non tu n'as pas tort.

  6. #6
    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
    oui

    arrêter le moulin quand il n'est plus nécessaire est plus économique

    au plaisir
    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

  7. #7
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut

    Je pense que Find est suffisamment bien programmer pour qu'en interne, il se limite à faire la recherche dans les cellules non vide .
    Donc B:B ou B2:B500 devrait pas changer grand chose à mon avis.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. Manipulation des chaines de caracteres
    Par hamidou sow dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 20/10/2014, 00h49
  2. Manipulation des chaines de caractere
    Par Darksnakes dans le forum Débuter
    Réponses: 14
    Dernier message: 15/03/2008, 10h31
  3. manipulation des chaines de caractere
    Par elmo93 dans le forum Débuter
    Réponses: 1
    Dernier message: 17/11/2007, 17h53
  4. Manipulation des chaines de caracteres
    Par black-out dans le forum ASP
    Réponses: 3
    Dernier message: 12/08/2007, 15h11
  5. Fonctions de manipulation des chaines et des dates
    Par Fares BELHAOUAS dans le forum Débuter
    Réponses: 3
    Dernier message: 09/11/2002, 22h43

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