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 :

copier des infos avec condition entre deux feuilles


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juillet 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut copier des infos avec condition entre deux feuilles
    Bonjour
    je suis débutant et cherche a résoudre le problème suivant:

    J'ai deux sheets, "WB" et "CA".
    - WB contient un pivot avec une colonne contrats (qui contient des codes lettres et une quelques cellules vides au milieu)
    - CA contient un tableau avec une colonne contrats mais dont certains elements ne sont pas dans WB. Par ailleurs ce tableau fait correspondre a chaque contrat un poids.

    J'ai mis un bouton sur la sheet WB et je voudrais qu'il soit associée a la procédure suivante:
    1. pour chaque contrat dans le pivot de WB, allez chercher dans CA le même numéro de contrat
    2. copier le poids associe a ce contrat tel qu'il apparait dans CA
    3. coller ce dernier dans une cellule immédiatement a cote du contrat dans WB

    et ce bien entendu pour chacun des code contrats de WB.



    Voici mon code jusqu'ici, sans doute tres tres moche... mais pas de solution apres deux jours donc je me permets de poster.


    -------
    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
    Dim contratID As String
    Dim noLigneWB As Integer
    Dim noLigneCA As Integer
     
    Dim Plage As Range
    Dim Cellule As Range
     
    Sheets("WB").Activate
    noLigneWB = ActiveSheet.Range("J65536").End(xlUp).Row
    Sheets("CA").Activate
    noLigneCA = ActiveSheet.Range("H65536").End(xlUp).Row
     
     
    Set Plage = Sheets("CA").Range("A1:A&noligneCA")
     
    For i = 9 To noLigneWB
    contratID = Sheets("WB").Range("J" & i).Value
    For Each Cellule In Plage
    If Cellule.Value = contratID Then
    Cellule.Select
    Dim L As Integer
    L = ActiveCell.Row
    Dim comwgt As Double
    comwgt = Range("H&L").Value
    Sheets("WB").Range("N" & i).Value = comwgt
    End If
    Next Cellule
    Next
    --------

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut

    Tu vas faire un traitement qui risque de prendre un peu de temps, le premier réflexe est de faire référence aux onglets sur lesquels tu travailles via une variable, ainsi si tu change de classeur au cours de l'opération ta macro n'ira pas chercher les onglet dans ce nouveau classeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim ShWB as Worksheet, ShCA as worksheet
     
    'On initialise les 2 variables onglet
    set ShWB = ThisWorkbook.Sheets("WB")
    Set ShCA = ThisWorkbook.Sheets("CA")

    Il faut impérativement laisser tomber les Activate, select et compagnie, ils ne seront utiliser que dans certain cas bien précis. En règle général, il est inutile d'afficher une feuille pour travailler sur son contenu.
    Il est préférable d'utiliser Cells plutôt que Range dans ce cas de figure afin de rendre le code portable sur des versions supérieures d'excel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    noLigneWB = shwb.cells(shwb.rows.count,"J").End(xlUp).Row
    Il existe une autre méthode avec une boucle For Each [Edit]Je suivais ton code ligne par ligne et je n'avais pas vu que tu l'utilisais après[/Edit]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim TheCell as Range
     
    For each TheCEll in shwb.range("J9",shwb.cells(shwb.rows.count,"J").End(xlUp)
       'Ici TheCell pointera alternativement chaque cellule incluse après In
       contratID = TheCell.value
       ...
    Next
    Il faut éviter de déclarer les variables en plein milieu du code, les déclarer au début rend le code plus lisible.

    Une fois que tu as la valeur à rechercher contratID, plutot que de refaire une boucle de recherche, il est préférable d'utiliser la méthode Find, tu trouveras les renseignements nécessaires à sa mise en place dans l'aide.


    Deux conseils,
    Au début de ton traitement utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = false
    et repasse le à True à la fin du traitement. Ton affichage restera figé, tu ne verras pas les valeur se remplir mais tu y gagneras en vitesse d’exécution (et je ne parle pas de quelques millisecondes...)
    Si ton traitement s'effectue sur un très grand nombre de lignes, regarde du coté des tableaux de valeurs, ils te permettent de faire un travail bien plus rapide.
    ++
    Qwaz

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juillet 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre reponse et votre temps.
    Je vais essayer de reformuler mon code avec vos conseils.

Discussions similaires

  1. [XL-2010] Extraire des données sous conditions entre deux bornes
    Par benadry dans le forum Excel
    Réponses: 4
    Dernier message: 13/02/2015, 11h57
  2. Réponses: 4
    Dernier message: 12/07/2011, 09h05
  3. Copier des centaines de vues entre deux serveurs
    Par Baquardie dans le forum Administration
    Réponses: 2
    Dernier message: 19/02/2010, 22h15
  4. Navigation avec condition entre deux pages JSF
    Par karim_sousse dans le forum JSF
    Réponses: 0
    Dernier message: 30/06/2009, 01h39
  5. copier des données avec conditions
    Par captaine93 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/12/2007, 16h47

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