XL 2016 Extraire des valeurs d'un tableau vers un autre.

Seddiki_adz

XLDnaute Occasionnel
bonjour
besoin d'aide pour extraire des valeurs d'une tableau vers une autre dans une 2ieme feuil suivant la condition en colonne h
merci d'avance
 

Pièces jointes

  • Classeur1.xlsx
    11.9 KB · Affichages: 15
Dernière édition:

BrunoM45

XLDnaute Barbatruc
Bonjour,
Lorsque vous commencez un fil de discussion et que vous posez une question sur le forum, il est de bon ton d'utiliser les formules de politesse usuelles.
Dites systématiquement "Bonjour" avant de poser vos questions car ici on se comporte comme dans la vrai vie.
Vous pouvez aussi conclure vos messages par un "Merci d'avance", ou "Bonne journée", cela ne sera pas de trop 🙂.
Une fois que vous aurez commencé à interagir au sein d'un fil existant vous pourrez faire preuve de moins de formalisme.
Merci d'en prendre bonne note afin que ce forum reste accueillant et convivial!
Profitez en pour relire la charte.

Vous avez posté votre message avec un formatage incorrect pour un forum :
- Le titre du fil doit être explicite (le plus clair possible) et écrit en minuscules
- Pas de titre du style "URGENT", "A L'AIDE",...
- Votre poste doit être rédigé simplement, en minuscules avec un minumum de formatages, pas de posts tout en gras par exemple.
Merci de respecter ces éléments qui contribuent à la lisibilité du forum.
Profitez en pour relire la charte dans laquelle il est expliqué que cette pratique n'est pas admise sur XLD.
 

soan

XLDnaute Barbatruc
@Seddiki

sur "Feuil2" tu peux voir que la plage B9:H21 est entièrement vide ; va sur "Feuil1", et regarde les données de la ligne 9 ; « PACA » est une région de France ; « RAS » = Rien A Signaler ; fait Ctrl e ; ça te demande de saisir la lettre de la condition ; saisis au choix "a" ou "A", et clique sur le bouton OK ➯ toutes les lignes ayant la condition "A" sont copiées sur le tableau de "Feuil2", puis ça va sur cette feuille pour te montrer les résultats ... sauf qu'il n'y a qu'une seule ligne ! ben oui, hein, vu qu't'a mis qu'une seule ligne dans ton 1er tableau ! tu croyais tout d'même pas qu'j'allais perdre du temps à inventer d'autres données à ta place ! mais si t'avais mis bien plus de lignes, dont certaines avec la condition "A", elles auraient été écrites en dessous !

va sur "Feuil1", fais Ctrl e, et sans rien saisir, clique sur OK ; ça n'a rien fait du tout, et c'est normal, car sans une condition, le travail que tu demandes est sans objet ; va sur "Feuil2" ; tu peux voir que rien n'a changé : ta ligne de condition "A" est toujours présente.​



va sur "Feuil1", fais Ctrl e, saisis "b", clique sur OK ; ça va sur "Feuil2", et tu peux voir qu'y'a plus de données ; t'inquiètes pas, c'est normal : c'est car avant de faire le travail, ça efface les anciennes données, puis ça écrit les nouvelles données ... sauf que dans le cas présent, ça n'a rien écrit du tout car dans ton tableau initial d'une seule ligne, y'a aucune ligne de condition "B" ! si t'en avais mis au moins une ou deux, elles auraient été écrites sur le tableau de "Feuil2".

alors pour faire un vrai test, à toi de commencer par ajouter d'autres données dans ton tableau initial, puis d'essayer la macro sur ce tableau plus complet !​



code VBA de Module1 :

VB:
Option Explicit: Option Compare Text

Sub CpyData()
  If ActiveSheet.Name <> "Feuil1" Then Exit Sub
  Dim cel As Range, nlm&, cnd1$, cnd2$, n1&, n2&, i&, j&: nlm = Rows.Count
  With Worksheets("Feuil2")
    n1 = Cells(nlm, 2).End(3).Row: If n1 = 8 Then Exit Sub
    Do
      cnd1 = InputBox("Lettre de la condition :", "Condition")
      If cnd1 = "" Then Exit Sub 'condition non indiquée => quitter la sub
    Loop Until cnd1 <> ""
    n2 = .Cells(nlm, 2).End(3).Row: j = 9: Application.ScreenUpdating = 0
    If n2 > 8 Then .Range("B9:H" & n2).ClearContents
    For i = 9 To n1
      Set cel = Cells(i, 2): cnd2 = cel.Offset(, 9)
      If cnd2 = cnd1 Then
        With .Cells(j, 2)
          .Value = cel                    'B : NOM
          .Offset(, 1) = cel.Offset(, 1)  'C : PRENOM
          .Offset(, 2) = cel.Offset(, 3)  'D : PROFESSION
          .Offset(, 3) = cel.Offset(, 2)  'E : ETABLISSEMENT
          .Offset(, 4) = cel.Offset(, 6)  'F : REGION
          .Offset(, 5) = cel.Offset(, 8)  'G : OBS
          .Offset(, 6) = cnd2             'H : CONDITION
          j = j + 1
        End With
      End If
    Next i
    .Select
  End With
End Sub



edit : désolé, cette solution est erronée, car en fait, c'est inutile de saisir une lettre pour la condition ; voir mon post #13, puis mon post #25.​

soan
 

Pièces jointes

  • Classeur1.xlsm
    20.6 KB · Affichages: 3
Dernière édition:

BrunoM45

XLDnaute Barbatruc
Et bien tu vois Soan... pas d'édition du 1er post et pas de BONJOUR sur celui-ci :mad:

Juste du copier/coller de ca demande, on l'aura compris
J'ai besoin d'aide pour extraire les valeurs d'un tableau vers un autre dans une 2ème feuille, suivant la condition qui est en colonne H

Je sais je suis à cheval sur l'éducation que nos parents nous donnent en général :rolleyes:

@Seddiki_adz si vous avez des problèmes avec la langue française, vous avez Google Translate 🤔
 

soan

XLDnaute Barbatruc
Bonjour Seddiki, le fil,

suite à ton MP, je te propose cette autre version du fichier. :)

* sur les 2 feuilles, j'ai supprimé la colonne A d'en-tête "N"
➯ il n'y a plus la 1ère colonne avec les numéros 1 à 13.

* la copie des données est faite sans condition : j'ai enlevé l'instruction
InputBox, et même la boucle Do .. Loop qui la contenait.

➯ on copie dans les colonnes A à G de "Feuil2" les données
correspondantes de "Feuil1" ; et cela pour toutes les lignes
utilisées
de "Feuil1".



* sur "Feuil2", note que le tableau est vide : y'a aucune donnée.

* va sur "Feuil1", et fais Ctrl e ➯ travail effectué ! 😊

toutes les lignes utilisées du tableau de "Feuil1" ont été copiées
en "Feuil2", pour les valeurs qui y avaient une correspondance.



code VBA de Module1 :

VB:
Option Explicit

Sub CpyData()
  If ActiveSheet.Name <> "Feuil1" Then Exit Sub
  Dim cel As Range, nlm&, n1&, n2&, i&, j&: nlm = Rows.Count
  With Worksheets("Feuil2")
    n1 = Cells(nlm, 1).End(3).Row: If n1 = 8 Then Exit Sub
    n2 = .Cells(nlm, 1).End(3).Row: j = 9: Application.ScreenUpdating = 0
    If n2 > 8 Then .Range("A9:G" & n2).ClearContents
    For i = 9 To n1
      Set cel = Cells(i, 1)
      With .Cells(j, 1)
        .Value = cel                    'A : NOM
        .Offset(, 1) = cel.Offset(, 1)  'B : PRENOM
        .Offset(, 2) = cel.Offset(, 3)  'C : PROFESSION
        .Offset(, 3) = cel.Offset(, 2)  'D : ETABLISSEMENT
        .Offset(, 4) = cel.Offset(, 6)  'E : REGION
        .Offset(, 5) = cel.Offset(, 8)  'F : OBS
        .Offset(, 6) = cel.Offset(, 9)  'G : CONDITION
        j = j + 1
      End With
    Next i
    .Select
  End With
End Sub

soan
 

Pièces jointes

  • Classeur2.01.xlsm
    19.9 KB · Affichages: 3

Discussions similaires

Réponses
3
Affichages
194
Réponses
6
Affichages
330
Réponses
2
Affichages
191

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
290 974
Messages
1 911 776
Membres
177 382
dernier inscrit
Cdrik4
Haut Bas