Recherche à partir de caractères extraits à gauche d'une chaine
d
bonjour le forum,
je me tourne vers vous car je cale sur ceci depuis plusieurs heures.
dans l'exemple (joint) je cherche à écrire en colonne N de la feuille Mouvements, la lettre "A" si ce qui se trouve en colonne Q de la planning commence par A sinon j'écris "P", à condition que les 7 premiers caractères en colonne J de la feuille Mouvements soient des chiffres et que ces 7 mêmes chiffres se retrouvent en colonne I de la feuille Planning.
j'ai écrit le code ci-dessous mais je tourne en rond et j'avance pas, merci de m'aider svp.
Private Sub CommandButton1_Click()
Dim Bl, Ligne, TypeCgt, i%
For i = 2 To 100
If IsNumeric(Left(Sheets("Mouvements").Range("J" & i), 7)) Then
Bl = Left(Sheets("Mouvements").Range("J" & i), 7).Value
Ligne = Sheets("Mouvements").Range("J" & i)
End If
For j = 2 To 100
If Left(Sheets("Planning").Range("J" & j), 1) = "A" Then
TypeCgt = "A"
Else: TypeCgt = "P"
End If
If Sheets("Planning").Range("J" & j).Value = Bl Then Sheets("Mouvements").Range("N" & Ligne) = TypeCgt
Next j
Next i
End SubPedro.
Invité
Bonjour Dudesson,
Voici une procédure et une fonction à utiliser pour ce que vous souhaitez
Option Explicit
Private Sub Mouvements()
Dim dLig As Long, Lig As Long, LigF As Long
' Avec la feuille mouvement
With Sheets("Mouvements")
' Dernière ligne
dLig = .Range("J" & Rows.Count).End(xlUp).Row
' Pour chaque ligne
For Lig = 2 To dLig
' Vérifier si valeur numérique, sinon passer à la ligne suivante
If Not IsNumeric(Left(.Range("J" & Lig), 7)) Then GoTo SuiteLig
' La valeur dans Planning commence t'elle par A
If CommenceParA(Left(.Range("J" & Lig), 7)) Then
.Range("N" & Lig).Value = "A"
Else
.Range("N" & Lig).Value = "P"
End If
SuiteLig:
Next Lig
End With
End Sub
Function CommenceParA(ValCherchée As Variant) As Boolean
Dim LigFind As Long
LigFind = 0: CommenceParA = False
' En cas d'erreur on continue
On Error Resume Next
' Chercher la ligne contenant la valeur
With Sheets("Planning")
LigFind = .Range("I:I").Find(What:=ValCherchée, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False).Row
If LigFind > 0 Then
CommenceParA = UCase(Left(.Range("Q" & LigFind), 1)) = "A"
End If
End With
On Error GoTo 0
End Function
@+
d
bonjour BrunoM45,
bonjour le forum,
c'est parfait, c'est exactement ce que je cherchais.
merci à vous.
bon dimanche
Pedro.