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 :

Recherche de données et copier sur d'autres feuilles en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2019
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2019
    Messages : 64
    Par défaut Recherche de données et copier sur d'autres feuilles en VBA
    Bonjour, je sollicite vôtres aides pour modifié un de mes projets que j'avais fais à l'époques avec des formules mais j'aimerai que vous puissiez m'aidé à le faire en code VBA que je trouve plus esthétique.

    Dans mon fichier simplifier j'ai 4 feuilles, listes de données, voyages hors service, feuille de travaille et liste de service

    1) J'aimerai que dans la feuille voyages hors service, lorsque je tape le numéro d'agent dans la cellule G7 il me retrouve le nom correspondant dans la feuille listes de données et me l'indique dans la cellules C7 de la feuille voyages hors service.
    Nom : Capture1.JPG
Affichages : 159
Taille : 26,8 Ko

    2) Dans la feuille, feuille de travaille lorsque je sélectionne un des mots qui ce trouve dans la liste déroulante de la colonne C quand fonction du mots il m'indique le temps correspondant qui ce trouve dans la feuilles listes de données a la colonne K et me l'inscrive dans la cellule correspondante de la colonne G
    Nom : Capture2.JPG
Affichages : 159
Taille : 43,9 Ko

    3) Dans la feuille, liste de service lorsque je tape le numéro d'agent dans les cellules de la colonne D, N et X il me retrouve les noms et numéro de GSM correspondant qui se trouve dans la feuille listes de données et me l'indique dans les cellules correspondante des colonnes C - E, M - O et V - Y
    Nom : Capture3.JPG
Affichages : 170
Taille : 93,3 Ko

    Compilation test.xlsm

    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 414
    Par défaut
    Bonjour,

    En fait ce n'est pas vraiment une bonne idée de passer par du code VBA quand il est possible de faire les opérations directement par des formules, mais bon, voici toujours une façon de faire en utilisant du code VBA et des tableaux structurés.

    Pour la feuille "Liste de service" (les autres feuilles utilisant quasi le même):
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Count = 1 Then
            If Not (Application.Intersect(Target, Range("D3:D14,N3:N14,X3:X14,D23:D34,N23:N34")) Is Nothing) Then
                Dim kRt As Long, kCt As Long, kR As Long
                kRt = Target.Row
                kCt = Target.Column
                If Target = "" Then
                    Cells(kRt, kCt - 1) = ""
                    Cells(kRt, kCt + 1) = ""
                Else
                    With Worksheets("Liste de données").ListObjects("t_Pers")
                        kR = Application.WorksheetFunction.Match(Target, .ListColumns("N°").Range, 0)
                        Cells(kRt, kCt - 1) = .Range(kR, .ListColumns("Nom").Index)
                        Cells(kRt, kCt + 1) = .Range(kR, .ListColumns("Tél").Index)
                    End With
                End If
            End If
        End If
    End Sub
    Bonne continuation.
    Fichiers attachés Fichiers attachés

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonsoir,

    J'ai transformé le tableau de Liste de données en tableau dynamique en ayant auparavant changé l'apostrophe par un espace.


    1- Voyages hors service

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Count = 1 Then
            If Not Intersect(Target, [G7]) Is Nothing Then
              Position = Application.Match(Target, [tableau1[N° Gradé]], False)
              If Not IsError(Position) Then
                [C7] = [tableau1[Nom Gradé]].Item(Position, 1)
              Else
                MsgBox "Erreur de code!"
              End If
            End If
        End If
    End Sub
    2- Liste de service

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Count = 1 Then
            If Not (Application.Intersect(Target, Range("D3:D14,N3:N14,X3:X14,D23:D34,N23:N34")) Is Nothing) Then
              Position = Application.Match(Target, [tableau1[N° Gradé]], False)
              If Not IsError(Position) Then
                Target.Offset(, -1) = [tableau1[Nom Gradé]].Item(Position, 1)
                Target.Offset(, 1) = [tableau1[N° D appel]].Item(Position, 1)
              Else
                MsgBox "Erreur de code!"
              End If
            End If
        End If
    End Sub
    3- Feuille de travail

    Transformer en TD les colonnes J,K deListe de données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Count = 1 Then
            If Not (Application.Intersect(Target, Range("C2:C25")) Is Nothing) Then
              Position = Application.Match(Target, [tableau2[visites]], False)
              If Not IsError(Position) Then
                Target.Offset(, 4) = [tableau2[Temps]].Item(Position, 1)
              Else
                MsgBox "Erreur!"
              End If
            End If
        End If
    End Sub



    Boisgontier
    Fichiers attachés Fichiers attachés

  4. #4
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2019
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2019
    Messages : 64
    Par défaut
    Merci à vous deux pour votre aides et solution apporté, je comprend votre logique me conseillant de continué avec les formules au lieu du VBA ce que je m'étais attelé a faire ces dernier jours j'ai juste modifié toutes les formules pour que dans les cellules n'apparaisse plus les #NA# ou 0 je trouve cela plus esthétique sans

    Mais je vais quand même tenir compte du fichier proposé en code VBA

    Merci encore pour tout.

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,

    Avec des formules,on aurait:

    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    =SIERREUR(INDEX(Tableau1[Nom Gradé];EQUIV(D3;Tableau1[N° Gradé];0));"")
    =SIERREUR(INDEX(Tableau1[N° D appel];EQUIV(D3;Tableau1[N° Gradé];0));"")
     
    =SIERREUR(INDEX(Tableau1[Nom Gradé];EQUIV(G7;Tableau1[N° Gradé];0));"")
     
    =SIERREUR(INDEX(Tableau2[Temps];EQUIV(C2;Tableau2[Visites];0));"")

    Boisgontier
    Fichiers attachés Fichiers attachés

  6. #6
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2019
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2019
    Messages : 64
    Par défaut
    Merci Boisgontier pour l'exemple présenté

    C'est plus ou moins le même principe que j'ai placé dans la plupart de mes cellules

    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =SI(ESTVIDE(D3);"";RECHERCHEV(D3;'Liste de données'!A2:B78;2;FAUX))
    =SI(ESTVIDE(D3);"";RECHERCHEV(D3;'Liste de données'!E2:F78;2;FAUX))

    Bon week-end

Discussions similaires

  1. [AC-2010] Formulaire avec import de données d'une table pour copier sur une autre
    Par RoiSorcierdAngmar dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/03/2018, 15h46
  2. [XL-2007] Recherche date la plus récente sur une base de données
    Par BERRACHED SAID dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 20/03/2017, 16h35
  3. [XL-2010] recherche de N° commande et copier sur une page étiquette
    Par zergo dans le forum Excel
    Réponses: 3
    Dernier message: 25/11/2016, 06h37
  4. Réponses: 1
    Dernier message: 01/06/2016, 03h54
  5. Macro recherche données pour copier dans une autre feuille
    Par Philippine dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/04/2013, 19h26

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