Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Recerchev en vba

nabilexcel2007

XLDnaute Occasionnel
Bonjour;
j'aimerai bien appliquer ma formule recherchev en code vba a la saisie de l'utilisateur automatiquement Svp
=SIERREUR(INDEX(bd!a2:t100]; EQUIV(a3;bd!a3:a100; 0));"")
Merci
 

vgendron

XLDnaute Barbatruc
pour ta feuille Archive
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Fin = Range("A" & Rows.Count).End(xlUp).Row
If Not Intersect(Target, Range("A3:A" & Fin)) Is Nothing Then
    With Sheets("BD").Range("A:A")
        Set trouve = .Find(Target)
        If Not trouve Is Nothing Then
            Target.Offset(0, 1) = trouve.Offset(0, 1)  'annexe
            Target.Offset(0, 2) = trouve.Offset(0, 4)  'nom
            Target.Offset(0, 3) = trouve.Offset(0, 4)  'DateSortie
            Target.Offset(0, 4) = trouve.Offset(0, 4)  'DateRetour
            Target.Offset(0, 5) = trouve.Offset(0, 4)  'EtatDossier
            Target.Offset(0, 6) = trouve.Offset(0, 4)  'Personnel
            Target.Offset(0, 7) = trouve.Offset(0, 2)  'Empl
            Target.Offset(0, 8) = trouve.Offset(0, 4)  'Observation
        End If
    End With
End If
Application.EnableEvents = True
End Sub
Je te laisse modifier les "trouve.offset(0,x) parce que je n'ai pas compris la correspondance entre les noms de colonne
 

vgendron

XLDnaute Barbatruc
et pour ta feuille "Décharge"
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Fin = Range("A" & Rows.Count).End(xlUp).Row
If Not Intersect(Target, Range("A4:A" & Fin)) Is Nothing Then
    With Sheets("BD").Range("A:A")
        Set trouve = .Find(Target)
        If Not trouve Is Nothing Then
            Target.Offset(0, 1) = trouve.Offset(0, 4)  'annexe
            Target.Offset(0, 2) = trouve.Offset(0, 2)  'nom
            'Target.Offset(0, 4) = Target.Offset(-1, 4) + 1 'N° incrémentation
            'ou alors
            Target.Offset(0, 4) = WorksheetFunction.Max(Range("E2:E" & Target.Row - 1)) + 1
        End If
    End With
End If
Application.EnableEvents = True
End Sub
 

vgendron

XLDnaute Barbatruc
je suis en train de regarder ton code

comment est alimentée la feuille Archive?
uniquement en saisissant un numéro de dossier en colonne A?
une fois que la ligne est remplie avec les infos de la BD: vas tu modifier/ajouter des infos directement dans la feuille Archive? auquel cas, la colonne F (qui contient une formule pour l'instant) doit etre mise à jour
 

vgendron

XLDnaute Barbatruc
Voir PJ

Comme tu utilises des tables, j'en ai ajouté une et redimensionné celles qui existaient déjà
Le code utilise donc maintenant ces noms de table

pour supprimer les dossiers "Rendu"
plutot qu'une boucle, on utilise le filtre et supprime les lignes filtrées
==> à tester sur ton fichier, car je pense que avec 40 000 lignes, ca risque d'etre plus long
==> il faudra voir pour passer par les tableaux VBA (voir macro dans module 2)
 

Pièces jointes

  • Entree-sortie.xlsm
    757.3 KB · Affichages: 13

vgendron

XLDnaute Barbatruc
Pour redimensionner la table: corriger le code de la macro module 2

'redimensionner la table
'Fin = .Range("A" & .Rows.Count).End(xlUp).Row
.ListObjects("Tab_Archive").Resize .Range("tab_Archive").CurrentRegion
 

nabilexcel2007

XLDnaute Occasionnel
Bonsoir;
=NB.SI.ENS(Tab_BD[Année];A4;Tab_BD[Annexe];ville1_creation;Tab_BD[Phase];"Creation";Tab_BD[Etat];"archivé")

je veux transformer cette formule en code vba qui se trouve dans la feuille ETAT cellule B4
et a moi de compléter le reste de tableau merci
 

vgendron

XLDnaute Barbatruc
Hello
ce code te permet de remplir tout le tableau (hors lignes 28 et 29)

VB:
Sub RemplirTabEtat()
Dim TabEtat() As Variant
With Sheets("Etat")
    TabEtat = .Range("A4:X27").Value

    For i = LBound(TabEtat, 1) To UBound(TabEtat, 1)
        Somme = 0
        For j = 1 To 24 'pour toutes les colonnes du tableau
            Select Case j
                Case 2, 3, 4, 5 'formule pour "Phase Creation"
                    formule = "countifs(Tab_BD[Année],A" & i + 3 & ",Tab_BD[Annexe],ville" & (j - 1) Mod 6 & "_creation,Tab_BD[Phase],""Creation"",Tab_BD[Etat],""archivé"")"
                Case 8, 9, 10, 11 'formule pour "Phase Extension"
                    formule = "countifs(Tab_BD[Année],A" & i + 3 & ",Tab_BD[Annexe],ville" & (j - 1) Mod 6 & "_ext,Tab_BD[Phase],""extension"",Tab_BD[Etat],""archivé"")"
                Case 14, 15, 16, 17 'formule pour "Dossier Annule"
                    formule = "countifs(Tab_BD[Année],A" & i + 3 & ",Tab_BD[Annexe],ville" & (j - 1) Mod 6 & "_annule,Tab_BD[Phase],""annule"",Tab_BD[Etat],""archivé"")"
                Case 20, 21, 22, 23 'formule pour "Sieje"
                    formule = "countifs(Tab_BD[Année],A" & i + 3 & ",Tab_BD[Annexe],""ville" & (j - 1) Mod 6 & """)"
                Case 1, 7, 13, 19 'cas où j pointe sur une colonne "Année"
                    Somme = 0
                    GoTo suivant
                Case Else 'cas où j pointe une colonne "somme"
                    TabEtat(i, j) = Somme
                    GoTo suivant
            End Select
            
            TabEtat(i, j) = Application.Evaluate(formule)
            Somme = Somme + TabEtat(i, j)
suivant:
        Next j
        
    Next i
    .Range("A4:X27") = TabEtat
End With
End Sub
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…