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
Un tout grand merci cela fonctionne à merveille ;)

Par contre je suis toujours preneur en code VBA juste pour la connaissance :p

Bien à vous.
Par contre, les membres "répondeurs du forum" sont toujours preneur d'un fichier* Excel fourni par le demandeur, juste par commodité d'aise ;)

(*fichier qui aura été au préalable anonymisé)

NB: Cela nous évite de devoir recréer un fichier qui existe déjà sur le disque dur du demandeur ;)
 

Staple1600

XLDnaute Barbatruc
Re

Il suffit de créer un fichier (à partir d'un classeur vierge) et d'y mettre que des données fictives.
De reproduire la structure de l'original
(Même plage de cellules, même colonnes, entêtes identiques etc...)
Ce fichier sert juste à illustrer la problématique rencontrée.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @odohe,

Un essai en VBA. Le code est dans le module de la feuille PCC.
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xcell
  Application.EnableEvents = False
  On Error GoTo FIN
  For Each xcell In Intersect(Target, Range("a3:a" & Rows.Count))
    If xcell = "" Then
      xcell.Offset(, 1) = Empty
    Else
      xcell.Offset(, 1).FormulaR1C1 = _
      "=IFERROR(VLOOKUP(RC[-1],'Affectation Tram'!R1C25:R99999C26,2,FALSE),"""")"
      xcell.Offset(, 1).Value = xcell.Offset(, 1)
    End If
  Next xcell
FIN:
  Application.EnableEvents = True
End Sub
 

Pièces jointes

  • odohe- recherche- v1.xlsm
    62.7 KB · Affichages: 25

Staple1600

XLDnaute Barbatruc
Bonsoir Monsieur mapomme

Je m'inscris en faux.
Une absence de bidon peut être le signe d'une pathologie. Et c'est donc point bidon.
A contrario une présence de bidon est également le signe d'une pathologie.
Subséquemment, le seul remède connu dans les deux cas est celui-ci
A utiliser durant la phase de saisie dans Excel.
(Pas d'effet secondaire connu)
 

odohe

XLDnaute Occasionnel
Un tout grand merci pour vos aides ;)
Les deux solutions me conviennent à merveille
Par contre j'aurai besoin encore de vos lumières, j'ai aussi placer un code pour effacer toutes les lignes qui ont comme mot "toto" dans la cellule N mais le souci c'est quand je clic sur la macro UPDATE cela m'efface que 4 lignes donc je dois à chaque fois recliquer pour toutes les effacer

Merci

1031743


voici le code que j'ai mis

Sub supprimerligne()
Dim l As Long
For l = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If Cells(l, "N") = "toto" Then Rows(l).Delete
Next
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

En voyant le message (et le code de mapomme), j'ai compris que la PJ tel quelle suffisait.
Ce qui m'a inspiré le code suivant
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
T(1, 2) = Application.VLookup(T, [sDATA], 2, False)
Else
T(1, 2) = ""
Application.EnableEvents = True
End If
End If
End Sub
sDATA est le nom de la plage Y1:Z397 de la feuille Affectation Tram
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Quand on supprime des lignes par une boucle, on part toujours du bas pour remonter. Imaginons que les lignes 2 et 3 contiennent le mot toto.
Au départ, dans la boucle, l = 2 donc vous supprimez la ligne 2. Mais alors la ligne 3 devient la ligne 2 (puisque la ligne 2 a été supprimée)
Le passage suivant dans la boucle se produit pour l = 3. Donc vous examinez la ligne 3 qui était en fait la ligne 4. Et vous avez raté la ligne 3 qui a remplacé l'ex ligne 2 supprimée.

Ce phénomène ne se produit pas si vous partez du bas:
VB:
Sub supprimerligne()
Dim l As Long
For l = Cells(Rows.Count, "A").End(xlUp).Row to 2 step -1
If Cells(l, "N") = "toto" Then Rows(l).Delete
Next
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 136
Membres
103 129
dernier inscrit
Atruc81500