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 les données d'un tableau d'un onglet dans un autre onglet suivant une condition [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 41
    Points : 31
    Points
    31
    Par défaut copier les données d'un tableau d'un onglet dans un autre onglet suivant une condition
    Bonjour à tous,

    J'aimerai votre aide car je ne sais pas comment commencé ce code..

    Voici mon problème:
    Dans mon classeur Excel j'ai trois feuilles : Global, B et C
    Elles sont constituées toutes les trois d'un tableau reprenant certains titre.
    Le tableau dans la feuille global est le plus important, les deux autres étant des parties de celui-ci.
    Je souhaite que lorsque je répond oui dans le tableau Global, les informations dont j'ai besoin (suivant le nom des colonnes) se copient dans l'onglet B.
    Si je répond non, les informations dontj'ai besoin se copient dans l'onglet C.

    Je vous remercie d'avance de l'aide que vous pourrait m'apporter.
    Bonne journée.

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonsoir,

    Avec des formules ?
    Tu peux faire simple comme =SI(Global!A1="Oui";Global!B7;"") en mettant cette formule dans la cellule voulue de l'onglet C et à peu près la même dans la cellule voulue de l'onglet C =SI(Global!A1="Non";Global!B7;"").

    Hervé.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    Bonjour ,

    Merci de m'avoir répondu.
    J'ai bien essayer de faire avec des formules excel cependant ce n'est pas du tout pratique.
    Lorsque je lance mes macros et que j'ai rentré mes formules dans mes cellules, le fichier plante.

    C'est pourquoi j'ai besoin d'une macro capable de faire mon problème.
    J'ai déjà commencé à coder, mais je n'arrive pas à copier les données du fichier global vers B ou C.
    Voici mon bout de code :

    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
    Dim K25 As Integer, K26 As Variant, K27 As Variant
    Dim rwindex As Integer
     
    Dim Wlibelle As String, Wlibelle_bis As String
     
    K26 = 0
    K27 = 0
    K25 = 0
     
    K25 = Application.Worksheets("Global").Range("A15").End(xlDown).Row
     
        For rwindex = 1 To K25
     
            Wlibelle = Application.Worksheets("Global").Cells(rwindex, 2).Value
            Wlibelle_bis = Application.Worksheets("Golbal").Cells(rwindex, 1).Value
     
            K26 = Application.Worksheets("Fichier B").Range("A65536").End(xlUp).Row
            K27 = Application.Worksheets("Fichier C").Range("A65536").End(xlUp).Row
     
            Select Case Wlibelle
                Case "OUI":
                Application.Worksheets("Fichier B").Cells(K26 + 1, 1).Value = Wlibelle_bis
     
                Case "NON":
                Application.Worksheets("Fichier C").Cells(K27 + 1, 1).Value = Wlibelle_bis
     
            End Select
     
        Next rwindex
     
    End Sub
    De plus, les informations que j'ai dans le fichier global ne sont pas toutes à copier pour le fichier B ou le fichier A.
    Je m'explique avec un schéma :

    Fichier Global:
    !nom ! prenom ! date ! lieux ! bloquant ! telephone ! maison ! adresse ! [...]
    Fichier B:
    !nom ! date ! bloquant ! maison ! [..]
    Fichier B:
    !nom ! prenom ! lieux! maison ! adresse ! [..]

    Suis-je assez claire?

    Merci d'avance pour votre aide précieuse.
    charline

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu peux réaliser ça sans boucle en utilisant un filtre automatique sur la colonne comportant les OUI et NON.
    Pour commencer, ci-dessous un code simple qui boucle sur la colonne B et reporte les données dans la feuille concernée
    A adapter
    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
    Dim LastLig As Long, NewLig As Long, i As Long
    Dim Sh As Worksheet
    Dim Col As Variant
    Dim k As Byte
     
    Application.ScreenUpdating = False
    With Worksheets("Global")
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        For i = 2 To LastLig
            If UCase(.Range("B" & i).Value) = "OUI" Then
                Set Sh = Worksheets("Fichier B")
                Col = Array(1, 3, 5, 7)                                  'Colonnes à copier dans fichier B
            Else
                Set Sh = Worksheets("Fichier C")
                Col = Array(1, 4, 5, 7, 8)                               'Colonnes à copier dans fichier C
            End If
            NewLig = Sh.Cells(Sh.Rows.Count, "A").End(xlUp).Row + 1
            For k = 0 To UBound(Col)
                Sh.Cells(NewLig, k + 1).Value = .Cells(i, Col(k)).Value
            Next k
            Set Sh = Nothing
        Next i
    End With
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Merci beaucoup pour votre code il fonctionne à merveille.
    J'aimerai juste choisir l'emplacement des cellules collées.
    Pour le moment elles se collent sur les feuilles B et C en A1 et j'aimerai que ce soit en A14, comment faire?

    Merci beaucoup

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Ajoute ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            NewLig = Sh.Cells(Sh.Rows.Count, "A").End(xlUp).Row + 1
    '>>> ICI
            If NewLig<14 then NewLig=14
    'la suite
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    Merci !

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 24/02/2012, 13h07
  2. [XL-2002] copier onglet dans un autre onglet
    Par patou41000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/04/2009, 20h58
  3. Réponses: 1
    Dernier message: 05/12/2006, 10h40
  4. [Oracle 8.1.7] Copier les données d'un tablespace
    Par bobunny dans le forum Oracle
    Réponses: 2
    Dernier message: 01/12/2005, 14h34
  5. Réponses: 3
    Dernier message: 18/10/2005, 13h43

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