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 :

Rapatriement de données [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 27
    Par défaut Rapatriement de données
    Bonjour à tous,

    Dans un dossier, je dispose de trois classeur intitulés "Synthèse", "1" et "2" ayant la même structure et constitués chacun de 3 feuilles nommées "Lundi", "Mardi" et "Mercredi".

    Je souhaiterai savoir s'il est possible en cliquant sur un bouton dans le fichier "Synthèse" que les lignes des fichiers "1" et "2" dont au moins une cellue ne soit pas vide dans la plage de colonne H à S se rapatrient dans ce fichier. Si les celulles sont vides, la ligne en question n'est pas rapatriée et on passe à la ligne suivante.

    En vous remerciant pour votre aide.

  2. #2
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,

    c'est possible

    un peu dans ce genre là

    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 synthese()
    Dim WBS(1 To 2) As Workbook
    Dim C As Range
    Dim I As Integer, R As Integer, WB As Integer, DestRow As Integer
    Dim strRange As String, F As Variant, Test As String
    Dim NoMoreTeam As Boolean
     
     
    'referencer les classeurs
    Set WBS(1) = GetObject(ActiveWorkbook.Path & "\1.xls")
    Set WBS(2) = GetObject(ActiveWorkbook.Path & "\2.xls")
     
    'parcourir les fuilles
    Application.ScreenUpdating = False
    For WB = 1 To 2
        For Each F In Array("LUNDI", "MARDI", "MERCREDI")
            NoMoreTeam = False
            R = 7
            Do Until NoMoreTeam
                strRange = Replace("H%:S%", "%", CStr(R))
                For Each C In WBS(WB).Sheets(F).Range(strRange)
                    Test = Test & C.Value
                Next C
                If Not Test = "" Then
                    WBS(WB).Sheets(F).Rows(R).Copy
                    ActiveWorkbook.Sheets(F).Range("B65536").End(xlUp).Offset(1, -1).PasteSpecial
                End If
                R = R + 1
                If WBS(WB).Sheets(F).Cells(R, 2) = "" Then NoMoreTeam = True
            Loop
        Next F
        Set WBS(WB) = Nothing
    Next WB
    Application.ScreenUpdating = True
     
    End Sub

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 27
    Par défaut
    Bonjour,

    Merci pour votre participation. J'aurai une question concernant les lignes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     For Each C In WBS(WB).Sheets(F).Range(strRange)
                    Test = Test & C.Value
                Next C
                If Not Test = "" Then
                    WBS(WB).Sheets(F).Rows(R).Copy
                    ActiveWorkbook.Sheets(F).Range("B65536").End(xlUp).Offset(1, -1).PasteSpecial
                End If
    Je suppose que c'est ce qui permet de vérifier la présence de cellule vide dans la plage H à S, néanmoins même si cette plage est vide, la ligne en question est rapatriée. Ceci est-il dû au fait que les cellulse B, C, D, E, et F de cette ligne ne sont pas vides?

  4. #4
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    on peux faire autrement

    on redéfinit test
    ensuite on change dans la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Do Until NoMoreTeam
                strRange = Replace("H%:S%", "%", CStr(R))
                For Each C In WBS(WB).Sheets(F).Range(strRange)
                    if ucase(c)="X" then test=true
                Next C
                If test Then
                    WBS(WB).Sheets(F).Rows(R).Copy
                    ActiveWorkbook.Sheets(F).Range("B65536").End(xlUp).Offset(1, -1).PasteSpecial
                End If
                R = R + 1
                If WBS(WB).Sheets(F).Cells(R, 2) = "" Then NoMoreTeam = True
                test=false
            Loop

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 27
    Par défaut
    Merci beaucoup Mayekeu.

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

Discussions similaires

  1. Rapatrier des données filtrées dans une listbox
    Par starius dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/01/2009, 13h21
  2. Réponses: 2
    Dernier message: 08/07/2008, 11h47
  3. Rapatrier des données au même niveau
    Par Darcynette dans le forum SQL
    Réponses: 2
    Dernier message: 09/06/2008, 14h14
  4. Rapatrier des données
    Par ANTMA dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 19/12/2007, 14h15
  5. Réponses: 2
    Dernier message: 20/11/2006, 21h42

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