Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/12/2011, 12h29   #1
 
Homme
Inscription : 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
Points : -3
Points : -3
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 :
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.
domes85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 13h18   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonjour

En utilisant la méthode find, ton code serait comme ceci
Code :
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
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 22/12/2011, 16h04   #3
 
Homme
Inscription : 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
Points : -3
Points : -3
Par défaut Un grand merci pour la rapidité

Un grand merci pour la rapidité et en plus ca fonctionne très bien.
domes85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 18h10   #4
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
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 :
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 :
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:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/12/2011, 18h46   #5
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonjour Patrick
Non tu n'as pas tort.
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/12/2011, 18h57   #6
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
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:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 19h22   #7
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

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

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
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
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 41
Vieux 27/12/2011, 11h20   #8
 
Homme
Inscription : 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
Points : -3
Points : -3
Merci à tous pour vos éclairages.
domes85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h45.


 
 
 
 
Partenaires

Hébergement Web