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

Excel Discussion :

Dispatch colonnes sur un deuxième onglet sous conditions


Sujet :

Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Dispatch colonnes sur un deuxième onglet sous conditions
    Bonjour à tous,

    J'ai un fichier avec des données qui changent de colonnes en fonction des cas (sur l'onglet 1).
    Afin de faire des injections dans mon logiciel j'ai besoin d'avoir les données dans l'ordre de l'onglet 2.

    J'aimerai donc remplir les colonnes de l'onglet 2 automatiquement à l'aide d'une macro (au lieu de faire manuellement des copier coller ou rechercheV), avec les données de l'onglet 1.

    En gros par exemple : Si l'intitulé de la colonne "article" existe dans onglet 1, alors on colle les données de la colonne dans l'onglet 2 sous l'intitulé de la colonne "article"...

    Idem pour mes autres colonnes ...

    Et si l'intitulé d'une colonne de l'onglet 2 n'existe pas dans l'onglet 1 alors on ne remplit rien dans l'onglet 2...

    J'espere avoir été clair...

    Je joins un fichier exemple!

    Merci d'avance vous me serez d'une grande aide

    Bonne aprem
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir,
    essaye ce code qui peut certainement être amélioré
    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
    Sub dispatch()
    Dim Dcol1 As Long, Dcol2 As Long, x As Long, y As Long
    Dim Dl As Long, Ws1 As Worksheet, Ws2 As Worksheet, Tb
    Set Ws1 = Sheets("Données à dispatcher")
    Set Ws2 = Sheets("fichier final")
    With Ws1
      Dcol1 = .Range("IV1").End(xlToLeft).Column
    End With
    With Ws2
      Dcol2 = .Range("IV1").End(xlToLeft).Column
    End With
    For x = 1 To Dcol1
      For y = 1 To Dcol2
        With Ws1
          If .Cells(1, x) = Ws2.Cells(1, y) Then
            Dl = .Range(Split(.Cells(1, x).Address, "$")(1) & .Rows.Count).End(xlUp).Row
            Tb = .Range(.Cells(2, x), .Cells(Dl, x))
            Ws2.Cells(2, y).Resize(UBound(Tb, 1)) = Tb
          End If
        End With
      Next y
    Next x
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Super merci beaucoup,

    Pourrais je juste te demander quelques phrases d explication afin de progresser en VBA ?

    En tout cas super ça marche du tonerre !

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Ok, patientes un peu le temps de rédiger
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    prends ton temps ce n'est pas urgent merci beaucoup en tout cas

  6. #6
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Voilà,
    Ca sera encore un peu confus pour toi mais avec de l'investissement tu comprendra en t'aidant avec les tutos de DVP et l'aide (F1)
    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
    Sub dispatch()
    'donc, ci-dessous on déclare explicitement les variables (très important)
    'Dcol1,Dcol2 pour repérer les dernières colonnes, appelles-les comme tu veux, en long ou integer
    'voir la différence avec l'aide (F1)
    Dim Dcol1 As Long, Dcol2 As Long, x As Long, y As Long
    'Dl comme ci-dessus mais pour dernière cellule, Ws1, Ws2 variables objet représentant une feuille
    Dim Dl As Long, Ws1 As Worksheet, Ws2 As Worksheet, Tb
    'ci-dessous Ws1 représentera la feuille "Données à dispatcher"
    Set Ws1 = Sheets("Données à dispatcher")
    'et Ws2.., tu as compris
    Set Ws2 = Sheets("fichier final")
    With Ws1 'afin de ne pas répêter Ws sans arrêt, voir l'aide pour With
      Dcol1 = .Range("IV1").End(xlToLeft).Column 'donc Dcol1 représente dern. col. (renseignée) de "Données à dispatcher"
    End With 'fin du With
    With Ws2
      Dcol2 = .Range("IV1").End(xlToLeft).Column 'là tu comprends maintenant
    End With
    For x = 1 To Dcol1 'une boucle qui va de la prem. col. à la dern. de "Données à dispatcher"
      For y = 1 To Dcol2 'une boucle (imbriquée) qui va de la prem. col. à la dern. de "fichier final"
        With Ws1 'Ws1 représente (tu l'as vu) la feuille "Données à dispatcher"
        'ci-dessous, on met une condition, la première => si cellule A1 en "Données à dispatcher" = A1 en "fichier final"
        'la 2ème  => si cellule A1 en "Données à dispatcher" = B1 en "fichier final"
        'on parcoure donc les col de "Fichier final" pour comparer à A1 de l'autre
          If .Cells(1, x) = Ws2.Cells(1, y) Then
            'ci-dessous Dl représente dern. cellule de 1ère col identique
            'voir définition de split avec l'aide
            Dl = .Range(Split(.Cells(1, x).Address, "$")(1) & .Rows.Count).End(xlUp).Row
            'ci-dessous une variable tableau qui reprend les données de la col.
            Tb = .Range(.Cells(2, x), .Cells(Dl, x))
            'et on affecte le tableau depuis la 2ème cellule à la dernière cellule
            'voir définition de resize et ubound avec l'aide
            Ws2.Cells(2, y).Resize(UBound(Tb, 1)) = Tb
          End If
        End With
      Next y
      'ci-dessous pour comparer à A2 de l'autre, etc.
    Next x
    End Sub
    Et penses à cliquer sur si c'est le cas
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

Discussions similaires

  1. Programmation de recherche entre onglets sous conditions
    Par Zigziig dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/05/2012, 19h08
  2. Décaler une colonne sur une autre feuille sous condition
    Par rafspain77 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/11/2011, 17h15
  3. [WD16] Ouverture d'une fenetre sur le deuxième onglet
    Par Tober dans le forum WinDev
    Réponses: 2
    Dernier message: 28/06/2011, 12h08
  4. [XL-2003] changer la couleur d'un onglet sous condition
    Par domik dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 19/09/2010, 11h58
  5. Empêcher accès à un onglet sous condition
    Par C0sC0us dans le forum Access
    Réponses: 2
    Dernier message: 10/01/2007, 19h47

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