Microsoft 365 Saisie automatique dans cellule en fonction d'une autre

odohe

XLDnaute Occasionnel
Bonjour, à tous

je tiens à préciser que je suis novice.
Voila ma question j'ai un classeur qui se nomme PCC y aurait-il possibilité avec un code VBA d'inscrire automatiquement dans les cellules de la colonne B en fonction du nombre indiquer dans les cellules A et qui va rechercher le résultat sur le classeur nommer Affectation Tram
Voici un exemple que j'aimerai obtenir

Classeur PCC
1031721


Classeur Affectation Tram
1031717



Ps: j'ai bien une formule qui fonctionne assez bien mais c'est pas terrible d'avoir des formule inscrit dans les cellules

1031718
=RECHERCHEV(A3;'Affectation Tram'!Y1:Z397;2;FAUX)

Merci d'avance pour votre aide.
 

Staple1600

XLDnaute Barbatruc
Re

mapomme
Sa seule grosse faille que je connaisse c'est celle de San Andrea.
Me dit pas que mon VBA rivalise en effet dévastateur dans VBE avec elle?
J'ai testé mon code (assez sommairement, je l'avoue)
Et j'ai pas vu ou j'ai fauté...
Un indice?

ododhe
On a tous un jour débuter avec Excel.
Il se trouve que moi, c'était au XXième siècle ;)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
@Staple1600,

Je suis facétieux ce soir.
Dans ton code, si le tram est dans la liste, on retourne son dépôt. mais auparavant la détection d'évènement aura été inhibée.
Vu la localisation de Application.EnablesEvents=True, cette instruction ne sera jamais exécutée ensuite. Donc après avoir trouvé une première fois un dépôt, le code ne sera plus déclenché.

VB:
Private Sub Worksheet_Change(ByVal T As Range)
  If Not Intersect(T, Range("A3:A" & Rows.Count)) Is Nothing Then
    If Not IsError(Application.VLookup(T, [sDATA], 2, False)) Then
      Application.EnableEvents = False  'on désactive
      T(1, 2) = Application.VLookup(T, [sDATA], 2, False) 'on écrit la valeur du dépot
      ' on quitte le if sans exécuter Application.EnableEvents = True
    Else
      T(1, 2) = Application.VLookup(T, [sDATA], 2, False)
      Application.EnableEvents = True
    End If
  End If
End Sub
 

odohe

XLDnaute Occasionnel
Merci à vous
j'essai de comprendre en tant que novice, j'essai de faire différentes combinaison entre différents codes pour arriver aux résultats souhaiter et à mon niveau j'en éprouve déjà une certaines satisfaction :p
 

odohe

XLDnaute Occasionnel
Juste par souci de perfection lorsque je supprime plusieurs lignes il me reste toujours juste la date de la première ligne je vous joint le fichier pour que vous puissiez me dire d'où vient mon erreur
Merci
 

Pièces jointes

  • odohe- recherche- v1.xlsm
    58 KB · Affichages: 9

Staple1600

XLDnaute Barbatruc
Re

Correction du code suite correction de mapomme
VB:
Private Sub Worksheet_Change(ByVal T As Range)
Application.EnableEvents = False
On Error GoTo FIN
If Not Intersect(T, Range("A3:A" & Rows.Count)) Is Nothing Then
If Not IsError(Application.VLookup(T, [sDATA], 2, False)) Then
T(1, 2) = Application.VLookup(T, [sDATA], 2, False)
Else
T(1, 2) = ""
End If
End If
FIN:
Application.EnableEvents = True
End Sub

NB:
Je n'ai pas testé.
Je n'ai pas fini de réinstaller Excel ;)
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @odohe
Juste par souci de perfection lorsque je supprime plusieurs lignes il me reste toujours juste la date de la première ligne je vous joint le fichier pour que vous puissiez me dire d'où vient mon erreur

Cette anomalie est assez vicieuse. C'est presque une anomalie d'effet de bord. J'explique:
  • vous supprimez une première ligne
  • donc vous modifiez les valeurs de la colonne A
  • ce faisant, vous déclenchez immédiatement la procédure évènementielle Private Sub WorkSheet_Change(ByVal Target As Range
  • nous voilà donc branché vers une autre procédure (c'est logique) alors que la première n'est pas terminée
  • le seconde va s'exécuter et quand elle aura fini de tourner, on retournera à la première;

Nous avons donc deux procédures concurrentes concomitantes. Ce n'est jamais très bon sauf si on l'a prèvu et tiré toutes les conséquences.

Une solution consiste donc:
  • au début à inhiber la détection des changements au sein de la feuille
  • à faire les changements (suppression des lignes à toto)
  • et à ne pas oublier de réactiver la détection des évènements à la fin des suppressions
Ce qui donne:
VB:
Sub supprimerligne()
Dim l As Long
  Application.EnableEvents = False
  For l = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
    If Cells(l, "N") = "toto" Then Rows(l).Delete
  Next
  Application.EnableEvents = True
End Sub
 

odohe

XLDnaute Occasionnel
Vous êtes un chef ;)
Dernière demande et puis promis je vous laisse tranquille pour aujourd'hui :p
j'ai modifié le code pour qu'il efface la ligne sans la supprimer pour que j'évite de perdre toutes les ligne de mon tableau par contre quel code ajouter pour quand je clic sur un bouton que je nommerai Refresh et qui aura pour fonction de faire monter toutes les lignes qui ne seront pas effacer

Merci

Sub supprimerligne()
Dim l As Long
Application.EnableEvents = False
For l = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
If Cells(l, "N") = "toto" Then Rows(l).ClearContents
Next
Application.EnableEvents = True
End Sub

1031750
1031751
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @odohe,

quel code ajouter pour quand je clic sur un bouton que je nommerai Refresh et qui aura pour fonction de faire monter toutes les lignes qui ne seront pas effacer

J'ai merdoyé quelque temps sur une ligne de code simple (tri d'une plage) avant de m'apercevoir (oh horreur!) que dans votre base de données PCC, vous aviez fusionné des cellules. On NE fusionne JAMAIS des cellules au sein d'une base de données. Ça n'apporte que des emmerdes et notamment empêche les tris.

Donc j'ai dé-fusionné les colonnes et supprimé les colonnes devenue inutiles et tout est rentré dans l'ordre. A noter que dans les codes, la colonne N est devenue la colonne K.

Le code du bouton Refresh:

VB:
Sub refresh()
Dim derlig
  With Sheets("PCC")
    derlig = .Cells(.Rows.Count, "a").End(xlUp).Row
    .Range("a2:k" & derlig).Sort key1:=.Range("a2"), order1:=xlAscending, Header:=xlYes
 End With
End Sub



 

Pièces jointes

  • odohe- recherche- v2.xlsm
    55.7 KB · Affichages: 29

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 251
Membres
103 497
dernier inscrit
FAHDE