XL 2010 extraction donnees [resolu]

  • Initiateur de la discussion Initiateur de la discussion jeffe
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

jeffe

XLDnaute Impliqué
bonjour le forum,
je voudrais retrouver uniquement des actions à réaliser seulement sur des process séléctionnés.
voir le tableau exemple joint ou j'ai mis le resultat attendu.
merci
 

Pièces jointes

Bonjour jeffe,

Voyez le fichier joint et cette macro dans Feuil2 :
Code:
Private Sub Worksheet_Activate()
Dim t, nlig&, j%, proces$, i&, n&, resu()
t = Sheets("Feuil1").[B2:H17] 'matrice, plus rapide, plage à adapter
nlig = UBound(t)
For j = 1 To UBound(t, 2)
    If LCase(t(1, j)) = "oui" Then
        proces = t(3, j)
        For i = 4 To nlig
            If t(i, j) <> "" Then
                n = n + 1
                ReDim Preserve resu(1 To 2, 1 To n)
                resu(1, n) = proces
                resu(2, n) = t(i, 1)
            End If
        Next
    End If
Next
'---transposition---
ReDim t(1 To n, 1 To 2)
For i = 1 To n
    t(i, 1) = resu(1, i)
    t(i, 2) = resu(2, i)
Next
'---restitution---
With [A2] 'cellule à adapter
    If n Then .Resize(n, 2) = t
    .Offset(n).Resize(Rows.Count - n - .Row + 1, 2).ClearContents 'RAZ sous le tableau
End With
Columns(2).AutoFit 'ajustement largeur
With UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Elle se déclenche quand on active la feuille.

Elle est très rapide car elle utilise des tableaux VBA.

A+
 

Pièces jointes

Bonsoir,


Code:
Sub essai()
  Set d = CreateObject("scripting.dictionary")
  TblImpact = [B2].CurrentRegion.Value: TblBD = [B4].CurrentRegion.Value
  For k = 2 To UBound(TblImpact, 2)
    If TblImpact(1, k) = "oui" Then
      For i = 2 To UBound(TblBD)
        If TblBD(i, k) = "x" Then d(TblBD(1, k) & "|" & TblBD(i, 1)) = ""
      Next i
    End If
  Next k
  Set f = Sheets("feuil2")
  f.[A2].Resize(d.Count) = Application.Transpose(d.keys)
  Application.DisplayAlerts = False
  f.[A2].Resize(d.Count).TextToColumns Other:=True, OtherChar:="|"
End Sub


Boisgontier
 

Pièces jointes

bonjour, Boisgontier, job75, le forum,
merci pour vos propositions, je dois m'absenter 4 j, je testerai vos solutions à mon retour, ce qui me permettra de comparer et voir pour la suite de mon projet. je vous retien informé, merci.
jf
 
Bonjour Job75

Merci pour la remarque.
C'est exact et c'est moi qui avait modifié le code de klin89 avec une erreur au départ #1004 mais qui n'avait pas attrait à cette partie donc il faut corriger ce point dans le code, tout à fait ok.

Je reste cependant limité sur une restitution au-delà de 65536 lignes (excel 2003) si par exemple la plupart des cellules étaient avec un "x".
Quelle méthode utiliserais-tu STP pour faire un renvoi automatique aux colonnes suivantes (restituer tableau "b" si n > 65536) ?

T'en remerciant par avance, bonne journée
zebanx
 
Re,

En dimensionnant le tableau resu au début avec CountIf (NB.SI) c'est (un peu) plus rapide :
Code:
Private Sub Worksheet_Activate()
Dim t, nlig&, j%, proces$, i&, n&, resu()
With Sheets("Feuil1").[B2:H17]
    t = .Value 'matrice, plus rapide, plage à adapter
    ReDim resu(1 To Application.CountIf(.Cells, "x"), 1 To 2)
End With
nlig = UBound(t)
For j = 1 To UBound(t, 2)
    If LCase(t(1, j)) = "oui" Then
        proces = t(3, j)
        For i = 4 To nlig
            If t(i, j) <> "" Then
                n = n + 1
                resu(n, 1) = proces
                resu(n, 2) = t(i, 1)
            End If
        Next
    End If
Next
'---restitution---
With [A2] 'cellule à adapter
    If n Then .Resize(n, 2) = resu
    .Offset(n).Resize(Rows.Count - n - .Row + 1, 2).ClearContents 'RAZ sous le tableau
End With
Columns(2).AutoFit 'ajustement largeur
With UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Fichiers (2) joints.

A+
 

Pièces jointes

bonjour, je viens de regarder vos solutions qui fonctionnent tres bien, je vous en remercie.
je suis parti sur la solution de job75, mais mon ficjier source etant un peut différent, je suis paumé;(
j'essaie de commenter les lignes mais ne comprend pas tout.
de plus est il possible lors de la restitution d'inscrire le responsable?
merci
 

Pièces jointes

Hello, merci, mince je me suis mal exprimé.
C'est un fichier qui va permettre à pluisieurs personnes de renseigner la feuille "initial" plusieurs fois dans lannée.
donc a chaque fois, je dois recuperer la date et le nom en B2 et B3 qui seront renseignés par la personne qui va remplir, puis "GO" et les données s'empileront au fur et a mesure.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
18
Affichages
189
Réponses
0
Affichages
67
Réponses
4
Affichages
611
Retour