Extraction de données dans Excel
Bonjour,
J'aurais voulu savoir si cela est possible d'extraire des données d'un tableau pour en faire un autre qui soit automatisée. J'ai un fichier Excel par rapport à un jeu, où est regroupé tout les membres de la guilde par ordre alphabétique avec tous les grands monuments. Dans ma guilde, nous mettons chacun des points pour les monuments qui sortent.
Certain membre récalcitrant, on pris du retard, pour cela j'ai mi une croix en rouge.
J'aurais voulu extraire tout ceux qui ont une croix rouge dans un tableau à part qui me permettra de savoir chez qui, je dois réclamer. Je n'ai pas encore trouver comment faire?
Je vous remercie pour votre aide.
Bonjour,
Tiens, c'est un peu sale, mais ça te donne les membres récalcitrants!
A copier coller dans un module, et a utiliser tel quel!
Yann
Sub Qui_est_recalcitrant()
Dim tabentree() As Variant
Dim tabsortie(75, 0) As String
Dim i As Long, j As Long
Dim ligneSortie As Long
tabentree = ThisWorkbook.Sheets("Investissements").Range("I4:CE574").Value
For j = 1 To 75
For i = 2 To 571
If tabentree(i, j) = "X" Then
tabsortie(ligneSortie, 0) = tabentree(1, j)
ligneSortie = ligneSortie + 1
Exit For
End If
Next i
Next j
ThisWorkbook.Sheets("RETARD ").Range("A1:A200").Value = tabsortie
End Sub
Merci L-Yann, c'est déjà pas mal, mais j'aurais voulu avoir en même temps les noms et la liste des grands monuments d'où ils n'ont pas participé.
Comment puis-je faire la suite pour afficher les noms des récalcitrants ainsi chez qui ils doivent mettre et sur quel bâtiment?
Merci d'avance.
Par contre mon tableau évolue constamment en nombre de colonne et ligne.
Bonjour,
J'ai été un peu busy ces derniers jours j'aipas pu m'occuper de ton cas.
Tu as essayé / réussit a adapter mon bout de code?
Quand tu dit que ton tableau évolu constamment, que représentent les nouvelles lignes / colonnes?
En faite, je rajoute souvent des nouveaux membres, et de nouveau grands monuments. J'ai mi ton code, il marche bien. J'ai juste la liste des noms. Ce que j'aurais voulu avoir enfaite donc la liste des noms des récalcitrant, et en même temp les noms des personnes et grand monuments pour voir faire les rappels. J'ai du mal à adapter le code.
Bonjour, je vais essayer de t'adapter ça.
Mais je t'avoue que ton tableau est assez dur à traiter de manière automatique.. :/ Le premier noms sera toujours Asus? Sera t-il toujours positionné en I4? Les noms ajoutés seront toujours sur la ligne 4 ?
La colonne es batiments, j'ai l'impression que c'est la colonne F. Ce sera toujours le cas? Le premier batiment sera toujours ligne 6 ? Les autres batiments seront toujours entrés sur la colonne 6 ?
Je crois qu'on a fait le tour des questions dont j'ai besoin d'avoir les réponses avant de te faire une macro!
A te lire,
Yann
Bonjour,
Les noms commenceront toujours à partir de I4 et dans D6. On adapte notre tableau par rapport au entrée et sortie dans Notre Guilde, donc je ne peux assurer si Asus compte rester ou pas chez nous pour le moment. Nous avons adapté le tableau exprès. Ensuite les bâtiments resteront toujours dans la colonne F,et commenceront toujours à partir de F6. C'est mon tableau final en faite.
Je te remercie d'avance.
Lamangaka
Bonjour,
Encore une fois désolé du retard!
Voilà, la macro devrait faire ce que tu veux! peut être même plus!
Sub Qui_est_recalcitrant()
Dim tabentree() As Variant
Dim tabsortie() As String
Dim i As Long, j As Long
Dim ligneSortie As Long, derlig As Long, dercol As Long
derlig = ThisWorkbook.Sheets("Investissements").Range("A" & Rows.Count).End(xlUp).Row
dercol = ThisWorkbook.Sheets("Investissements").Cells(1, Cells.Columns.Count).End(xlToLeft).Column
ReDim tabsortie(derlig + 1, 3) As String
If ActiveSheet.Name <> "Investissements" Then ThisWorkbook.Sheets("Investissements").Select
tabentree = ThisWorkbook.Sheets("Investissements").Range(Cells(1, 1), Cells(derlig, dercol)).Value
ligneSortie = 1
tabsortie(0, 0) = "Nom du récalcitrant"
tabsortie(0, 1) = "Nom du batiment"
tabsortie(0, 2) = "Date de pose"
tabsortie(0, 3) = "Nom du poseur"
For j = 1 To dercol
For i = 1 To derlig
If tabentree(i, j) = "X" And tabentree(4, j) <> "" Then
tabsortie(ligneSortie, 0) = tabentree(4, j)
tabsortie(ligneSortie, 1) = tabentree(i, 6)
tabsortie(ligneSortie, 2) = tabentree(i, 5)
tabsortie(ligneSortie, 3) = tabentree(i, 4)
ligneSortie = ligneSortie + 1
Exit For
End If
Next i
Next j
ThisWorkbook.Sheets("RETARD ").Range("A1:D" & derlig).Value = tabsortie
End Sub
Dit moi si ça tourne comme tu le veux!
Yann
C'est super, mais tu va me trouver chiante à la fin, mais par exemple Carmeliane dans mon tableau à plus de 25 retard, et j aurais voulu qu'il soit tous dans le tableau, car parfois Thomas, Carmeliane et d'autres ont pas mal de retard et d'autre en ont deux ou trois, la en appliquant la macro, ils apparaissent une seul fois.
Je te remercie.
Enlèves le
Exit for
dans la boucle, il devrais tous te les marquer!
Super, ça marche. Tu m'a été d'un très grande aide, une toute dernière chose, quand je met à jour ma liste au lieu de resté sur ma page des retards, il me met dans la feuille Investissements, comment ça se fait?
C'est parce qu'au moment du lancement de la macro, ça bug si tu n'est pas sur la feuille investissement. J'ai forcé la selection de la feuille pour éviter ce problème!
Tiens, je t'ai remis le code, je l'ai entièrement commenté pour que tu comprennes ce qu'il se passe. ça t'aidera à modifier le code à la marge au cas ou!
Sub Qui_est_recalcitrant()
'Déclaration des variables utilisées dans le code
Dim tabentree() As Variant
Dim tabsortie() As String
Dim i As Long, j As Long
Dim ligneSortie As Long, derlig As Long, dercol As Long
Dim Ws as boolean
Ws = false
'On gèle la mise a jour de l'écran
Application.screenUpdating = false
'On cherche la derniere ligne utilisée sur la feuille investissement
derlig = ThisWorkbook.Sheets("Investissements").Range("A" & Rows.Count).End(xlUp).Row
'On cherche la derniere colonne utilisée sur la feuille investissement
dercol = ThisWorkbook.Sheets("Investissements").Cells(1, Cells.Columns.Count).End(xlToLeft).Column
'On dimensionne le tableau de sortie en fonction du nombre de ligne de la feuille investissement
ReDim tabsortie(derlig + 1, 3) As String
'Si la feuille active n'est pas la feuille investissement, on la sélectionne (et on met le capteur Ws à true)
If ActiveSheet.Name <> "Investissements" Then ThisWorkbook.Sheets("Investissements").Select : Ws = true
'On récupère la totalité de ton tableau d'investissement
tabentree = ThisWorkbook.Sheets("Investissements").Range(Cells(1, 1), Cells(derlig, dercol)).Value
'on écrit les titres sur la premiere ligne du tableau de sortie
tabsortie(0, 0) = "Nom du récalcitrant"
tabsortie(0, 1) = "Nom du batiment"
tabsortie(0, 2) = "Date de pose"
tabsortie(0, 3) = "Nom du poseur"
'on se place sur la deuxieme ligne du tableau de sortie (la premiere ligne d'un tableau est 0, idem la premiere colonne d'un tableau est 0) => (sauf lorsqu'on recupère les données en une fois sur une feuille, comme je l'ai fait pour tabEntree) => (Les joies du VBA...)
ligneSortie = 1 'deuxieme ligne du tableau de sortie donc..!
'on boucle sur la totalité des valeurs de ton tableau d'investissements
For j = 1 To dercol 'Pour toutes les colonnes
For i = 1 To derlig 'On par court toutes les lignes
If tabentree(i, j) = "X" And tabentree(4, j) <> "" Then 'Si la valeur est égale à X et le nom du joueur existe alors
tabsortie(ligneSortie, 0) = tabentree(4, j) 'On écrit le nom dans tabSortie
tabsortie(ligneSortie, 1) = tabentree(i, 6) 'On écrit le batiment
tabsortie(ligneSortie, 2) = tabentree(i, 5) 'On écrit la date de pose
tabsortie(ligneSortie, 3) = tabentree(i, 4) 'On écrit le nom du poseur
'On incremente la ligne de sortie
ligneSortie = ligneSortie + 1
End If
Next i
Next j
'On colle le tableau de sortie sur la feuille Retard, sur la plage de cellule A1:D et nombre de ligne
ThisWorkbook.Sheets("RETARD ").Range("A1:D" & derlig).Value = tabsortie
'Si jamais le capteur est a true, on reselectionne la feuille retard
If Ws = true then ThisWorkbook.Sheets("RETARD ").Select
'On reactive le rafraichissement de l'écran
Application.screenUpdating = true
End Sub
ça devrait être tout bon maintenant!
Yann
Merci, pour tout. Tu m'a énormément aidé, je m'y connais bien en Excel, mis niveau Macro j'ai beaucoup à apprendre. Mais tu m' as résolu mon problème.
Merci beaucoup.
Lamangaka.