Macro qui ne fonctionne pas...correctement...

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 !

Christian0258

XLDnaute Accro
Bonjour à tout le forum,

Pourriez-vous me dire pourquoi cette macro ne fonctionne que partiellement et ne traite pas l'ensemble...

voir fichier joint...difficile à expliquer...

Merci pour le temps que vous voudrez bien m'accorder.

Bien amicalement,
Christian
 

Pièces jointes

Re : Macro qui ne fonctionne pas...correctement...

Salut Christian,
voici une version qui fonctionne très bien chez moi.

VB:
Sub DoublerLesPlatsPdt()

Dim cel As Range 'déclare la variable cel (Cellule)
Dim DL As Long 'déclare la variable dl (Dernière Ligne)
Dim fin As String 'déclare la variable fin
Dim deb As String 'déclare la variable deb (début)

Application.ScreenUpdating = False

Columns("F:F").Replace What:="+pdt", Replacement:="+ pdt", lookat:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False

'boucle sur toutes les cellule éditées de la colonne F
For Each cel In Range("F2:F" & Cells(65536, 6).End(xlUp).Row)
    cel.Value = Trim(cel.Value) 'Enlever les espaces inutiles à la fin
    fin = Right(cel.Value, 5) 'définit la varaible fin
    If fin = "+ pdt" Then 'condition : si fin = " + pdt"
        deb = Left(cel.Value, Len(cel.Value) - 6) 'définit la variable deb
        DL = Cells(65536, 1).End(xlUp).Row + 1 'définit la dernière ligne
        Range(Cells(cel.Row, 1), Cells(cel.Row, 6)).Copy Range(Cells(DL, 1), Cells(DL + 1, 1)) 'copie la ligne de cel en dernier
        Cells(DL, 6).Value = deb 'modifie la valeur de la cellule en colonne F
        Cells(DL + 1, 6).Value = fin 'modifie la valeur de la cellule en colonne F
        cel.Offset(0, -2).Value = "annulé" 'écrit "annulé" dans la colonne D
    End If 'fin de la condition
Next cel 'prochaine cellule de la boucle
End Sub

Cordialement,

Étienne

ÉDIT : Salutations JC 🙂 Juste trop rapide !!! J'avais fait le même constat, de la l'utilisation de Trim 😉 Bonne journée à vous !
 
Re : Macro qui ne fonctionne pas...correctement...

Salut,

il y a un espace à la fin de "+pdt " donc le test
fin = Right(cel.Value, 6)
If fin = "+ pdt" Then
Ne marche pas

Attention, si tu enlève simplement l'espace, ton test devient

fin = Right(cel.Value, 5)
If fin = "+ pdt" Then
 
Re : Macro qui ne fonctionne pas...correctement...

Bonjour à tous,

c'est fait, alors je donne...

Code:
Sub test()
Dim c As Range, p As String, i As Byte
With Sheets("RECAPS").Range("F2", Range("F65536").End(xlUp))
    Set c = .Find("+pdt", , xlValues, xlPart, , , False)
    If Not c Is Nothing Then
        p = c.Address
        Do
            For i = 1 To 2
                c.Offset(0, -5).Resize(, 5).Copy Range("A65536").End(xlUp)(2)
                If i = 1 Then Range("F65536").End(xlUp)(2) = Replace(c, "+pdt", "") _
                    Else: Range("F65536").End(xlUp)(2) = "+pdt"
            Next i
            Set c = .FindNext(c)
        Loop While c.Address <> p
    End If
End With
End Sub

bon après midi
@+
 
Re : Macro qui ne fonctionne pas...correctement...

Salut Christian0258 et le forum
Code:
fin = Right(cel.Value, 6) 'définit la varaible fin
        If fin = "+ pdt" Then 'condition : si fin = " + pdt"
??? il faut être logique ;
" + pdt" : 6 caractères
"+ pdt" : 5 caractères => l'égalité ne sera jamais vraie !
Dans le même style, F2 nous donne : "Haricots beurre vinaigrette + pdt " => ce qui nous donne pour les 6 derniers caractères "+ pdt ". En les comparant à " + pdt", on peut attendre quelque temps une égalité 😉.

Les erreurs sont peut-être dues à une erreur de recopie, mais je ne travaille qu'avec l'exemple donné.

Je ne suis pas particulièrement fana de
Code:
For Each cel In .Range("F2:F" & .Cells(Application.Rows.Count, "F").End(xlUp).Row)
Normalement, la boucle initialisée ne varie pas, mais comme on rajoute des lignes, je préfère rechercher d'abord la ligne de fin, puis faire l'instruction de boucle sur la variable trouvée. C'est une question de sécurité pour l'adaptation suivant les versions (qui peut dire comment se comportera les versions suivantes ?).

Cells(Application.Rows.Count, "F").End(xlUp) ??? Rows est une propriété de dimension plage => Cells(Rows.Count, "F").End(xlUp) serait plus logique et surtout plus lisible (ActiveWorkBook.ActiveSheet étant le préfixe par défaut)

Pour ton problème, il faut regarder sur tes critères, avec une recherche de la place du "+" et une égalié avec "+ pdt", ou, si ça finit, une recherche des 3 derniers sur une variable débarrassée des espaces inutiles avec un trim().
A+
 
- 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
1
Affichages
162
Retour