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 23/01/2012, 16h14   #1
Nouveau Membre du Club
 
Inscription : avril 2010
Messages : 150
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 150
Points : 25
Points : 25
Par défaut Fonction Find VBA

Bonjour,

Je viens de créer un petit code avec la fonction FIND, cependant je recontre un problème sur le code :

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
Sheets("Travail").select
If Cells.Find(What:="AVION_FRANCE", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
True, SearchFormat:=True).Activate Then 
 
Sheets("FRANCE").Select 
Cells.Select 
Selection.Delete Shift:=xlUp 
 
Else 
 
Sheets("Travail").Select 
 
End If 
 
Elseif If Cells.Find(What:="AVION_MAROC", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
True, SearchFormat:=True).Activate Then 
 
Sheets("MAROC").Select 
Cells.Select 
Selection.Delete Shift:=xlUp 
 
Else 
 
Sheets("Travail").Select 
 
End Sub
Si j'ai des données avec pays France dans ma sheet "Travail" il détecte et revient sur la première sheet, parcontre si il y en a pas, il bug et il s'arrête.

Pouvez-vous m'aider ?
korni184 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 16h56   #2
Membre actif
 
Inscription : avril 2008
Messages : 181
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 181
Points : 171
Points : 171
Hello,

Ton code est mal écrit.

1) Il y a un Else et un End If avant le ElseIf <- faux

2) Lorsqu'il y a un ElseIf on met un seul et unique Else que sur la dernière condition.

3) Il manque le End If à la fin.

4) On écrit pas ElseIf If, mais ElseIf simplement.

Voici ton code corrigé, mais si ça ne joue toujours pas, je ne vois pas.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    Sheets("Travail").Select
 
    If Cells.Find(What:="AVION_FRANCE", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
      :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
      True, SearchFormat:=True).Activate Then
        Sheets("FRANCE").Select
        Cells.Select
        Selection.Delete Shift:=xlUp
    ElseIf Cells.Find(What:="AVION_MAROC", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
      :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
      True, SearchFormat:=True).Activate Then
        Sheets("MAROC").Select
        Cells.Select
        Selection.Delete Shift:=xlUp
    Else
        Sheets("Travail").Select
    End If
Cordialement.
Antoniom est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/01/2012, 13h22   #3
Nouveau Membre du Club
 
Inscription : avril 2010
Messages : 150
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 150
Points : 25
Points : 25
Par défaut MACRO TRI FIND

Hello,

Merci pour la correction, mais cependant lorsque j'active mon code, il prend
Code :
1
2
3
If Cells.Find(What:="AVION_FRANCE", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
      :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
      True, SearchFormat:=True).Activate Then
Et le surligne automatiquement en jaune..

Merci d'avance pour vos réponses
korni184 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 14h04   #4
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Bonjour,

Tu as tout intérêt à éviter les Select.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub Test()
Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet
Dim c As Range
 
    Set Ws1 = Worksheets("Travail")
    Set Ws2 = Worksheets("FRANCE")
    Set Ws3 = Worksheets("MAROC")
 
    Set c = Ws1.Cells.Find("AVION_FRANCE", LookIn:=xlValues)
    If Not c Is Nothing Then
        Ws2.Cells.Delete
    Else
        Set c = Cells.Find("AVION_MAROC", LookIn:=xlValues)
        If Not c Is Nothing Then _
            Ws3.Cells.Delete
    End If
 
    Set c = Nothing
    Set Ws1 = Nothing
    Set Ws2 = Nothing
    Set Ws3 = Nothing
 
End Sub
Rq : J’ai supposé que "AVION_FRANCE" et "AVION_MAROC" sont des chaines de caractères inscrites dans la feuille "Travail".

Cordialement.
gFZT82 est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 26/01/2012, 17h34   #5
Nouveau Membre du Club
 
Inscription : avril 2010
Messages : 150
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 150
Points : 25
Points : 25
Par défaut MACRO TRI SOLUTION

Merci pour ce code, vraiment !

Mais comment je peux intégrer à présent ce code :

Code :
1
2
3
4
5
6
7
8
    For i = 1 To shSource.Range("A" & Rows.Count).End(xlUp).Row 
    Set Sh = Sheets(Range("C" & i).Value) 
    iCible = Sh.Range("A" & Rows.Count).End(xlUp).Row + 1 
    If iCible = 2 And Sh.Range("a1").Value = "" Then iCible = 1 
    shSource.Rows(i).Copy Sh.Range("A" & iCible) 
    'Vide la ligne Copiée 
    shSource.Rows(i).ClearContents 
    Next i
Afin qu'une fois qu'il est détecter les pays, il aille mettre les nouvelles données dans les différentes sheet ?

Et est-ce qu'il possible aussi de démarrer une autre macro après cette répartition ? Elle se nomme "Tricolonne".

C'est une simple fonction, de tri et d'ajout de résultat sur chaque la sheet selectionné.

Pouvez-vous m'aider ?

Merci d'avance

Bàv,
korni184 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 20h42   #6
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Bonjour,

Je te donne quelques éléments pour que tu puisses avancer.

Dans la première procédure, tu as 3 feuilles :
Ws1 , feuille "Travail"
Ws2 , feuille "FRANCE"
Ws3 , feuille "MAROC"
Tu effectues une recherche dans la feuille "Travail".
Si tu trouves le texte "AVION_FRANCE", tu effaces l’intégralité de la feuille "FRANCE"
sinon,
si tu trouves le texte "AVION_MAROC", tu effaces l’intégralité de la feuille "MAROC".

Dans ta deuxième procédure il y a 2 feuilles : shSource (feuille source) et Sh (feuille cible).
Tu effectues une boucle sur chaque ligne renseignée de la colonne A de la feuille source afin de récupérer les noms des feuilles cibles (lecture des cellules de la colonne C).
Tu recherches le numéro de ligne de la feuille cible où effectuer l’ajout (iCible).
Tu effectues un test pour vérifier si la première ligne est renseignée.
Tu effectues une copie de la ligne de la feuille source vers la feuille cible (ligne iCible).
Tu effaces la ligne de la feuille source.

Il n’y a aucun lien entre les 2 procédures.

Je crois comprendre que tu souhaites reprendre la première procédure et faire en sorte qu'après avoir détecté le pays, les nouvelles données soient inscrites dans la feuille correspondante.
Il y a un point à éclaircir : avec la procédure actuelle, si tu trouves le texte "AVION_FRANCE" ou "AVION_MAROC", tu effaces l’intégralité de la feuille "FRANCE" ou "MAROC" (Ws2.Cells.Delete ou Ws3.Cells.Delete).
Dans la feuille du pays, tu n’auras donc que la dernière ligne copiée.
Je ne suis pas sûr que se soit la finalité.

Tu as tout intérêt à décrire dans le détail de ce que tu veux faire.

Cordialement.
gFZT82 est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/01/2012, 08h46   #7
Nouveau Membre du Club
 
Inscription : avril 2010
Messages : 150
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 150
Points : 25
Points : 25
Par défaut Macro tri solution

Hello,

J'apporte quelques explications sur le déroulement du programme :

- 3 sheets (Travail(Ws1) / France(Ws2) / Maroc(Ws3))
- Je colle les données dans la sheet Travail
- Le lance la macro et ses étapes doivent se produirent :

- Détection sur la page Travail d'une donnée France, si il en détecte :
-->il va dans la page Ws2 (France),
-->supprime l'ensemble des données sur la page Ws2,
-->colle les nouvelles données dans cette page (Ws2)
-->et lance la Macro2 (TriColonne) sur la page (Ws2)

- Si il en détecte pas, alors étape suivante :
-->Il cherche des données Maroc dans la fiche travail, si il en détecte :
Même système...

Si il y détecte rien du tout, petit message d'erreur, "aucunes données, aucun tri".

Le but de cette manoeuvre, c'est de pouvoir garder le fichier ouvert, et de pouvoir le mettre à jour, sans pour autant tout supprimer à chaque fois, car vous devez vous douter qu'il n'y a pas que ses pays là sur ces pages.

Et surtout éviter de lancer la deuxième Macro(TriColonne) dans les sheets oú les données n'ont pas été mise à jour.

Merci d'avance pour votre aide
korni184 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 09h39   #8
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Bonjour,

Tu peux utiliser ce type de structure
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
30
31
32
33
34
Sub Test()
Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet
Dim c As Range
 
    Set Ws1 = Worksheets("Travail")
    Set Ws2 = Worksheets("FRANCE")
    Set Ws3 = Worksheets("MAROC")
 
    Set c = Ws1.Cells.Find("AVION_FRANCE", LookIn:=xlValues)
    If Not c Is Nothing Then
        Call Traitement(Ws2, c)
    Else
        Set c = Cells.Find("AVION_MAROC", LookIn:=xlValues)
        If Not c Is Nothing Then
            Call Traitement(Ws3, c)
        Else
            MsgBox "Aucune donnée, aucun tri"
        End If
    End If
 
    Set c = Nothing
    Set Ws1 = Nothing
    Set Ws2 = Nothing
    Set Ws3 = Nothing
 
End Sub
Sub Traitement(sh As Worksheet, Plage As Range)
        'Supprime l'ensemble des données sur la page
        sh.Cells.Delete
        'Colle les nouvelles données dans cette page
        Plage.EntireRow.Copy Destination:=sh.Range("A1")
        'lance le TriColonne sur cette page
 
End Sub
Cordialement.
gFZT82 est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/01/2012, 12h17   #9
Nouveau Membre du Club
 
Inscription : avril 2010
Messages : 150
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 150
Points : 25
Points : 25
Par défaut TRI

Merci pour le code,

Et pour déclancher la deuxième Macro, je dois ajouter à quel endroit ?

Merci d'avance
korni184 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 12h39   #10
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Je ne sais pas comment est conçue cette macro.
A priori, tu as 2 solutions :
- soit intégrer le code de la macro TriColonne dans la procédure Traitement.
- soit lancer la macro TriColonne à partir de la procédure Traitement.

Cordialement.
gFZT82 est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/01/2012, 13h47   #11
Nouveau Membre du Club
 
Inscription : avril 2010
Messages : 150
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 150
Points : 25
Points : 25
Par défaut Pb

D'accord,

Donc si je reprends votre code :

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
30
31
32
33
34
Sub Test()
Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet
Dim c As Range
 
    Set Ws1 = Worksheets("Travail")
    Set Ws2 = Worksheets("FRANCE")
    Set Ws3 = Worksheets("MAROC")
 
    Set c = Ws1.Cells.Find("AVION_FRANCE", LookIn:=xlValues)
    If Not c Is Nothing Then
        Call Traitement(Ws2, c)
    Else
        Set c = Cells.Find("AVION_MAROC", LookIn:=xlValues)
        If Not c Is Nothing Then
            Call Traitement(Ws3, c)
        Else
            MsgBox "Aucune donnée, aucun tri"
        End If
    End If
 
    Set c = Nothing
    Set Ws1 = Nothing
    Set Ws2 = Nothing
    Set Ws3 = Nothing
 
End Sub
Sub Traitement(sh As Worksheet, Plage As Range)
        'Supprime l'ensemble des données sur la page
        sh.Cells.Delete
        'Colle les nouvelles données dans cette page
        Plage.EntireRow.Copy Destination:=sh.Range("A1")
        'lance le TriColonne sur cette page
 
End Sub
Je remarque que j'ai oublié de vous donnez deux indications, ce n'est pas AVION_MAROC ni AVION_FRANCE, mais tout simplement MAROC et FRANCE d'oú le code ci dessous :

Code :
1
2
3
4
5
6
7
8
For i = 1 To shSource.Range("A" & Rows.Count).End(xlUp).Row 
    Set Sh = Sheets(Range("C" & i).Value) 
    iCible = Sh.Range("A" & Rows.Count).End(xlUp).Row + 1 
    If iCible = 2 And Sh.Range("a1").Value = "" Then iCible = 1 
    shSource.Rows(i).Copy Sh.Range("A" & iCible) 
    'Vide la ligne Copiée 
    shSource.Rows(i).ClearContents 
    Next i
En faisant simple, sur la sheet travail, ce code permet de répartir les données en fonction de la données se trouvant en colonne C.

Si c'est indiqué France, il prend la ligne et la transmet directement dans la sheet qui lui est attribué ! Donc les noms qui se trouvent la colonne et les noms des sheets sont identiques, sinon cela fonctionnerai pas.

Donc je ne sais pas comment intégrer cela au code.

Pouvez-vous m'aider ?
korni184 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 15h02   #12
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Le code que je t'ai transmis réalise l'opération que tu indiques.
Il suffit de remplacer AVION_FRANCE par FRANCE et AVION_MAROC par MAROC.
la procédure devient
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
30
31
32
33
34
Sub Test()
Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet
Dim c As Range
 
    Set Ws1 = Worksheets("Travail")
    Set Ws2 = Worksheets("FRANCE")
    Set Ws3 = Worksheets("MAROC")
 
    Set c = Ws1.Cells.Find("FRANCE", LookIn:=xlValues)
    If Not c Is Nothing Then
        Call Traitement(Ws2, c)
    Else
        Set c = Cells.Find("MAROC", LookIn:=xlValues)
        If Not c Is Nothing Then
            Call Traitement(Ws3, c)
        Else
            MsgBox "Aucune donnée, aucun tri"
        End If
    End If
 
    Set c = Nothing
    Set Ws1 = Nothing
    Set Ws2 = Nothing
    Set Ws3 = Nothing
 
End Sub
Sub Traitement(sh As Worksheet, Plage As Range)
        'Supprime l'ensemble des données sur la page
        sh.Cells.Delete
        'Colle les nouvelles données dans cette page
        Plage.EntireRow.Copy Destination:=sh.Range("A1")
        'lance le TriColonne sur cette page
 
End Sub
Cordialement.
gFZT82 est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/01/2012, 16h15   #13
Nouveau Membre du Club
 
Inscription : avril 2010
Messages : 150
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 150
Points : 25
Points : 25
Tout à fait, j'ai effectué les changements cependant,

Il ne prends qu'une seule ligne et il a copie/colle dans la sheet correspondante.


Il ne fait rien d'autre.

Comment peut-on modifier afin qu'il prenne toutes les données et qu'ils les repartissent dans les bonnes sheets ?
korni184 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 16h40   #14
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Qu'est-ce que tu appelles "Toutes les données" ?
Tu veux qu'il copie l'intégralité de la feuille "Travail" ?
gFZT82 est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/01/2012, 16h55   #15
Nouveau Membre du Club
 
Inscription : avril 2010
Messages : 150
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 150
Points : 25
Points : 25
Par défaut MACRO Tri

Dans la sheet travail se trouve actuellement plusieurs lignes de données.

Sur chaque ligne, en colonne C, on retrouve les données critères "France" ou "Maroc". (En A B D E F... etc se sont des chiffres).

Donc ce que je veux faire c'est que lorsque j'active la macro :

Il détecte sur la ligne "Maroc", il prends les données et les collent dans la sheet Maroc en vidant la sheet travail et lance juste à la suite la seconde Macro "Tricolonne".

Donc si il y a seulement des données MAROC dans la sheet travail, je veux qu'il aille vider ses données dans la sheet Maroc, en remplacent celle existante.

Et donc, ne rien faire sur la sheet France.

SI vous avez besoin de l'exemple excel, je le metterai en attachement.

Bàv
korni184 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 18h01   #16
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Le mieux c'est effectivement que tu fasses passer un fichier exemple.

1 - Je ne parviens toujours pas à comprendre quelle est la plage à copier :
- soit il y a plusieurs fois le texte "FRANCE" (ou "MAROC") dans la colonne C et on sélectionne toutes les lignes qui possèdent ce texte,
- soit il n'y a qu'une fois le texte "FRANCE" (ou "MAROC") dans la colonne C et on sélectionne la ligne trouvée ou le document complet.

2 - Est-ce qu'il peut y avoir "FRANCE" et "MAROC" dans la feuille de travail ?

3 - Profites-en pour joindre le code de ta procédure "Tricolonne".

Cordialement.
gFZT82 est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 30/01/2012, 13h09   #17
Nouveau Membre du Club
 
Inscription : avril 2010
Messages : 150
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 150
Points : 25
Points : 25
Hello,

Vous trouverez ci-joint un fichier excel, qui sera plus compréhensif.

Dans ma sheet "Fiche de Travail J" seront collées tous au long la journée des données différentes qui auront toujours un même point de référence "en colonne C" (Le pays).

Je veux seulement qu'ils se repartissent les données dans chaque sheets en fonction de cet argument. Et qu'il déclenche automatiquement la Macro "tricolonne" sur la sheet oú je viens de trier des nouvelles données !

les lignes de 1 à 7, dans la sheet France
les lignes de 8 à 15, dans la sheet Espagne,
les lignes de 16 à 34, dans la sheet Maroc. (Le nombres de données est bien sur variaibles).

Donc si je reprends mon exemple :

Actuellement... Dans les sheets France / Espagne / Maroc, il y a des données. Mais je dois mettre à jour cela, donc je colle des nouvelles données dans Fiche de Travail J (Je n'ai que des données pour France et que des données pour Espagne).

Donc...
Il détecte via "Find" qu'il y a des données France, donc il vide la sheet France, colle les nouvelles données et active la macro "Tricolonne". Idem pour Espagne.

Cependant Maroc, vu qu'il y a pas de nouvelles données, rien ne change !

Si vous avez besoin, n'hésitez pas!!

Merci
Fichiers attachés
Type de fichier : xls TRI.xls (59,5 Ko, 1 affichages)
korni184 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 14h29   #18
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Bonjour,

Ca-y est, je crois avoir compris

J'ai continué dans la lancée avec la fonction FIND mais on aurait pu utiliser un filtre.
J'ai également intégré au code le lancement de la procédure TriColonne.
Fais le test et donne-moi tes impressions
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
30
31
32
33
34
35
36
Sub Repartition()
Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet
Dim c As Range
Dim Pays
Dim DerLig2 As Long
    Set Ws1 = Worksheets("Fiche de Travail J")
    Pays = Array("FRANCE", "MAROC", "ESPAGNE")
    'Effacement des 3 feuilles pays
    For i = 0 To UBound(Pays)
        Worksheets(Pays(i)).Cells.Delete
    Next i
    'Répartition des données
    For i = 0 To UBound(Pays)
        Set c = Ws1.Cells.Find(Pays(i), LookIn:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                Set Ws2 = Worksheets(Pays(i))
                DerLig2 = Ws2.Range("A" & Ws2.Rows.Count).End(xlUp).Row
                If DerLig2 = 1 And Ws2.Range("A1") = "" Then DerLig2 = 0
                'Colle les nouvelles données dans cette page
                c.EntireRow.Copy Destination:=Ws2.Range("A" & DerLig2 + 1)
                Set c = Ws1.Cells.FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    Next i
    'Tri des colonnes
    For i = 0 To UBound(Pays)
        Set Ws2 = Worksheets(Pays(i))
        Call TriColonne(Ws2)
    Next i
    Set c = Nothing
    Set Ws1 = Nothing
    Set Ws2 = Nothing
    Set Ws3 = Nothing
End Sub
Cordialement.
Fichiers attachés
Type de fichier : xls Repartition.xls (90,0 Ko, 6 affichages)
gFZT82 est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 30/01/2012, 16h49   #19
Nouveau Membre du Club
 
Inscription : avril 2010
Messages : 150
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 150
Points : 25
Points : 25
Hello !!

C'est niquel comme code !

Si je vide la sheet de travail en faisant un all.delete, c'est correct ? ou Est-ce qu'on peut vider la sheet totalement pendant qu'il fait la répartition ? Qu'est ce qui est le plus propre ?

Par contre j'ai un petit problème, et je pense que c'est le dernier.

Je viens de faire un test dans l'hypothèse (ci-jointe), j'ai des données dans Espagne Maroc et France.

Je viens de collé dans "Travail J" (Espagne+France) malheureusement quand je démarre la macro, il bug sur la sheet Maroc, car il veut modifier mes données...Alors que je veux pas les changer, vu que j'en ai pas de nouvelle !


Merci d'avance et encore super pour le code !
Fichiers attachés
Type de fichier : xls Repartition.xls (90,0 Ko, 1 affichages)
korni184 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 17h38   #20
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Citation:
Si je vide la sheet de travail en faisant un all.delete, c'est correct ? ou Est-ce qu'on peut vider la sheet totalement pendant qu'il fait la répartition ? Qu'est ce qui est le plus propre ?
J’ai rajouté en fin de procédure une demande d’accord pour effacement de la feuille de travail.
En cours de procédure, les lignes transférées sont colorées en bleu dans la feuille travail.

Citation:
Je viens de faire un test dans l'hypothèse (ci-jointe), j'ai des données dans Espagne Maroc et France.
Je viens de coller dans "Travail J" (Espagne+France) malheureusement quand je démarre la macro, il bug sur la sheet Maroc, car il veut modifier mes données.
Effectivement, la procédure TriColonne ne peut pas être lancée sur une feuille vide.
J’ai rajouté un test.

Cordialement.
Fichiers attachés
Type de fichier : xls Copie de Repartition.xls (93,5 Ko, 4 affichages)
gFZT82 est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web