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 :

Transfert données avec conditions [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Transfert données avec conditions
    Bonjour,

    J'ai besoin de votre participation car je sèche vraiment vu mon niveau très élémentaire en VBA .

    Je voudrais automatiser un travail que je faisais manuellement sur excel.

    D'une feuille BD, je dois transférer des données sur 2 feuilles de destination avec conditions.

    Tant bien que mal je suis parvenu à faire une macro qui me reconstitue l'entête de ligne.

    Je vous précise que le gros problème est peut-être, le nombre différent de colonnes sur les feuilles de destination.

    Je vous remercie beaucoup pour votre aide.

    Cordialement,
    Cathodique
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    D'une feuille BD, je dois transférer des données sur 2 feuilles de destination avec conditions.
    Tant bien que mal je suis parvenu à faire une macro qui me reconstitue l'entête de ligne.
    De quelles conditions s'agit-il ?
    Voir peut-être les filtres avancés. Un tutoriel sur le sujet Les filtres avancés ou élaborés dans Excel avec fichier téléchargeable contenant des exemples.
    Un exemple peut-être intéressant à voir dans cette discussion Création de plusieurs onglets avec saut de ligne
    Je vous précise que le gros problème est peut-être, le nombre différent de colonnes sur les feuilles de destination.
    C'est effectivement un problème si c'est sur la même feuille que les colonnes sont différentes.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je vous remercie pour votre réponse et vos liens. J'ai téléchargé la version PDF pour la consulter hors connexion. Il se pourrait que les filtres élaborés fassent ce que je recherche. Cependant je voudrais le réaliser en VBA, mon souci est de compléter ma macro.

    Pour le nombre de colonnes, il est différent sur les 2 feuilles de destination (conditionné par les données de la colonne C de la feuille BD).

    Pourriez-vous me dire si les explications contenues dans mon fichier sont claires? Ceci dans le souci, de reformuler peut-être mes attentes.

    Je vous remercie beaucoup.

    Cordialement,
    Cathodique

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le fichier téléchargeable qui se trouve sur la page du tutoriel contient quelques exemple avec VBA et la discussion que j'ai référencée aussi du code VBA et un fichier téléchargeable.
    Pourriez-vous me dire si les explications contenues dans mon fichier sont claires? Ceci dans le souci, de reformuler peut-être mes attentes.
    Je n'ai pas ouvert le fichier.
    Je ne télécharge les fichiers qu'en dernier recours. Qu'il soit intervenant ou curieux, le forum a pour but de faire profiter un maximum de personnes intéressées par le sujet. Si les questions et les réponses se font au travers de classeur à télécharger, cela devient un huis clos et n'est pas très profitable à mon sens. Donc pour ma part, je ne regarde les classeurs que si je ne comprends pas ce qui est écrit et ce après quelques échanges.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Invité
    Invité(e)
    Par défaut
    Re,

    Je viens de télécharger le fichier exemple, je vous avoue que je n'ai rien compris au code. Ce n'est pas de mon niveau, ne vous fiez pas à la date de mon inscription (Nov 2008), j'ai découvert le forum à cette date. Je le consultais assez régulièrement mais sans y participer, je n'avais pas le temps (trop d'obligations).

    Aujourd'hui ma situation à changer, et j'y participe en tant qu'apprenti. J'espère apprendre et pourquoi pas aider aussi les autres.

    J'ai consulté et téléchargé les 2 fichiers joints de la discution:"Création de plusieurs onglets avec saut de ligne" et comme l'avait déclaré Aude Alti c'est magique. Effectivement, c'est magique.
    J'ai suivi le déroulement du code pas à pas, c'est super. le code est trop subtile pour ma petite tête.

    Pour ma part, je ne vois pas comment je pourrais m'y retrouver. Mes 2 onglets sont déjà créer.
    Sur tes fichiers, le transfert se fait toujours avec le même nombre de colonne sur tous les onglets.
    Pour mon cas ils sont différents. Avec la situation actuelle de la feuille "BD", L'onglet "Beta" Contient 11 colonnes et l'onglet "Delta" 13 colonnes.
    Pour les 3 premières colonnes, je pense qu'il n'y aura pas de difficultés. Le gros problème, c'est les colonnes suivantes.
    J'ai pensé à mettre la dernière colonne dans une variable, mais vu mon niveau je patauge.

    Je remercie toutes celles et tous ceux qui pourront me donner un bon coup de main.

    Cordialement,
    Cathodique

  6. #6
    Expert éminent 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
    Par défaut Il faudra activer la référence Microsoft Scripting Runtime
    Vu la disposition de tes données, ci-joint une proposition avec gymnastique

    EDIT: '/!\ Active la référence Microsoft Scripting Runtime

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    Sub Traitement()
    Dim Lastlig As Long
    Dim Tb, Tablo, Tp
    Dim Ind As Byte
     
    Application.ScreenUpdating = False
    With Worksheets("BD")
        Lastlig = .Cells(.Rows.Count, 1).End(xlUp).Row
        Tb = .Range("A2:J" & Lastlig)
    End With
     
    Tp = Array("Beta", "Delta")
    For Ind = 0 To 1
        Tablo = Dispatch(Tb, Tp(Ind))
        With Worksheets.Add
            .Range("A1") = Tp(i)
            .Range("A2").Resize(UBound(Tablo, 1), UBound(Tablo, 2)) = Tablo
            .Range("A4").Resize(UBound(Tablo, 1) - 2, UBound(Tablo, 2)).Sort Key1:=.Range("A4"), order1:=xlAscending, Header:=xlNo
        End With
    Next Ind
    End Sub
     
    '/!\ Active la référence Microsoft Scripting Runtime
    Private Function Dispatch(ByVal Tb, ByVal Typ As String)
    Dim Ouvrage As New Scripting.Dictionary
    Dim PosteDirect As New Scripting.Dictionary
    Dim C As Integer, m As Integer, R As Integer, n As Integer
    Dim p As Integer, i As Integer, j As Integer, k As Integer
    Dim Res(), Tmp, Vemp
     
    p = UBound(Tb, 1)
    For i = 1 To p
        If Tb(i, 2) = Typ Then
            Ouvrage(Tb(i, 3)) = ""
            PosteDirect(Tb(i, 4) & "|" & Tb(i, 9)) = ""
        End If
    Next i
    C = Ouvrage.Count
    m = 5 + 2 * C
    R = PosteDirect.Count
    n = 2 + R
    ReDim Res(1 To n, 1 To m)
     
    Res(1, 1) = "N°Poste Localisation"
    Res(1, 2) = "Redresseur"
    Res(1, 3) = "Redresseur"
    Res(2, 2) = "Tension (V)"
    Res(2, 3) = "Courant (A)"
    For j = 0 To 2 * C - 1
        k = Int(j / 2)
        Res(1, j + 4) = Ouvrage.Keys(k)
        Res(2, k + 4) = "Potentiel (mV)"
        Res(2, k + 5) = "Courant (mA)"
    Next j
    Res(1, m - 1) = "Direction"
    Res(1, m) = "Observations (" & Typ & ")"
     
    For i = 3 To n
        Vemp = Split(PosteDirect.Keys(i - 3), "|")
        Res(i, 1) = Vemp(0)
        For j = 4 To m - 2 Step 2
            k = Int((j - 4) / 2)
            Tmp = Sum(Tb, Typ, Vemp(1), Ouvrage.Keys(k), Res(i, 1))
            If Res(i, 2) = "" Then Res(i, 2) = Tmp(0)
            If Res(i, 3) = "" Then Res(i, 3) = Tmp(1)
            Res(i, j) = Tmp(2)
            Res(i, j + 1) = Tmp(3)
            Res(i, m) = Res(i, m) & "" & Tmp(5)
        Next j
        Res(i, m - 1) = Vemp(1)
    Next i
     
    Set Ouvrage = Nothing
    Set PosteDirect = Nothing
    Dispatch = Res
    End Function
     
     
    Private Function Sum(ByVal Tb, ByVal Typ As String, ByVal Dire As String, ByVal Ouv As String, ByVal Post As String)
    Dim Tablo(0 To 5)
    Dim i As Integer
    Dim t As Byte
     
    For i = 1 To UBound(Tb, 1)
        If Tb(i, 2) = Typ And Tb(i, 3) = Ouv And Tb(i, 4) = Post And Tb(i, 9) = Dire Then
            For t = 0 To 5
                Tablo(t) = Replace(Tb(i, 5 + t), Chr(10), " ")
            Next t
            Exit For
        End If
    Next i
    Sum = Tablo
    End Function

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour Mercatog,

    Je te remercie beaucoup pour ton code, qui fonctionne bien. je vais essayer de le comprendre et essayer de mettre le tableau à partir de la ligne 7, Ajouter le nom des onglets.

    J'ai remarqué que les intitulés Potentiel et courant doivent se succéder, les résultats sont différents et ne vont pas jusqu'à la fin.

    Mais sinon, pour les valeurs c'est impeccable. Je t'en suis vraiment reconnaissant.

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

Discussions similaires

  1. [XL-2003] Transfert donnée avec macro
    Par JIPE59552 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/03/2010, 17h26
  2. copier des données avec conditions
    Par captaine93 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/12/2007, 16h47
  3. Importation de données avec conditions
    Par nono le golfeur dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 24/08/2007, 08h40
  4. db2: récupération de données avec condition max
    Par letuyen dans le forum Langage SQL
    Réponses: 8
    Dernier message: 07/03/2007, 16h45
  5. Réponses: 4
    Dernier message: 09/05/2006, 08h55

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