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 :

Dernière cellule non vide d'une ligne et simplification code [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Mai 2012
    Messages : 19
    Points : 10
    Points
    10
    Par défaut Dernière cellule non vide d'une ligne et simplification code
    Bonsoir à tous,

    J'ai une feuille WsRes avec des données (de 200 à 300) qui sont actualisées et donc modifiées toutes les heures ainsi deux feuilles Ws1 et Ws2.

    La feuille WsRes contient un ID dans la colonne A et plusieurs cellules (de 1 a 20) contenant diverses informations par rapport à cet ID.


    ID - Donnée1 - Donnée2 - Donnée3

    12 - tata - toto - tutu
    15 - toto - tutu - titi

    la feuille Ws1 liste les hommes:

    ID - Nom - Prénom - Phone - Ville
    11 - Némar - Jean - 01234567 - New-York
    15 - Térieur - alain - 1326523 - Las Vegas

    La feuille Ws2 liste les femmes avec la même présentation

    Mon code ajoute les données sur les 2 feuilles suivant l'ID et ça fonctionne plutôt pas mal.

    15 - Térieur - alain - 1326523 - Las Vegas - toto - tutu - titi


    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
    Sub test()
     
    Dim Ws1 As Worksheet
    Dim Ws2 As Worksheet
    Dim WsRes As Worksheet
    Dim derlig As Long
     
    Dim Plage1 As Range, Plage2 As Range, PlageRes As Range, Cel As Range, C As Range
     
        Set Ws1 = Worksheets(1)
        Set Ws2 = Worksheets(2)
        Set WsRes = Worksheets("Résultat")
     
        derlig = WsRes.Range("A" & WsRes.Rows.Count).End(xlUp).Row    
     
        Set Plage1 = Ws1.Range("B4:B25")
        Set Plage2 = Ws2.Range("B4:B25")
        Set PlageRes = WsRes.Range("A2:A" & derlig)
     
        For Each Cel In PlageRes
            Set C = Plage1.Find(Cel)
     
            If Not C Is Nothing Then
                WsRes.Range(Cel.Offset(0, 1), Cel.Offset(0, 20)).Copy C.Offset(0, 6)
            End If
        Next Cel
     
        For Each Cel In PlageRes
            Set C = Plage2.Find(Cel)
     
            If Not C Is Nothing Then
                WsRes.Range(Cel.Offset(0, 1), Cel.Offset(0, 20)).Copy C.Offset(0, 6)
            End If
        Next Cel
     
    End Sub
    J'aimerais pouvoir déterminer la dernière cellule non vide de chaque ligne Cel.Offset(0, 20

    Le code est-il approprié à ce genre de traitement ou y a-t-il moyen de simplifier au lieu de faire 2 boucles for each ?

    Je suis un peu embêté aussi car j'aurai aimé ne rien écrire dans la colonne 11, comment faire à partir de C.Offset(0, 6), copier jusque 10 puis repartir de 12 à n ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WsRes.Range(Cel.Offset(0, 1), Cel.Offset(0, 20)).Copy C.Offset(0, 6)
    Merci d'avance pour vos réponses.

    Didier

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    J'aimerais pouvoir déterminer la dernière cellule non vide de chaque ligne Cel.Offset(0, 20
    Ci dessous une exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        For Each Cel In PlageRes
            Set C = Plage1.Find(Cel)
     
            If Not C Is Nothing Then
                WsRes.Range(Cel.Offset(0, 1), Cel.Offset(0, WsRes.Rows(Cel.Row).End(xlToRight).Column)).Copy C.Offset(0, 6)
            End If
        Next Cel

    Le code est-il approprié à ce genre de traitement ou y a-t-il moyen de simplifier au lieu de faire 2 boucles for each ?
    Personnellement, je ferais mes recherches à la suite dans la même boucle " For Each Cel"
    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
    For Each Cel In PlageRes
        Set C = Plage1.Find(Cel)
     
        If Not C Is Nothing Then
            WsRes.Range(Cel.Offset(0, 1), Cel.Offset(0, 20)).Copy C.Offset(0, 6)
        End If
     
     
        Set C = Plage2.Find(Cel)
     
        If Not C Is Nothing Then
            WsRes.Range(Cel.Offset(0, 1), Cel.Offset(0, 20)).Copy C.Offset(0, 6)
        End If
     
    Next Cel


    Je suis un peu embêté aussi car j'aurai aimé ne rien écrire dans la colonne 11, comment faire à partir de C.Offset(0, 6), copier jusque 10 puis repartir de 12 à n ?
    Le plus simple c'est de vider cette cellule après la copie

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Mai 2012
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Jérôme,

    Je te remercie pour ta réponse aux 2 questions, tout à fait ce que recherchais.

    Concernant la cellule 11, je vais m'arranger autrement.

    Didier

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

Discussions similaires

  1. Dernière cellule non vide d'une ligne
    Par rapheb dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 30/11/2011, 07h45
  2. renvoi dernière cellule non vide d'une colonne
    Par emilie31 dans le forum Excel
    Réponses: 5
    Dernier message: 29/09/2008, 16h26
  3. Dernière cellule non vide d'une colonne
    Par RéviAT dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/02/2008, 15h43
  4. [vba Excel] Obtenir dernier cellule non vide d'une ligne
    Par cow_boy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/05/2007, 11h07
  5. [VBA-E]selectionner la premiere cellule non vide d'une ligne
    Par muse47 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/10/2005, 09h11

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