Condition VBA

Bonjour,

Je n'arrive pas à faire en sorte que ce code applique la condition souhaitée :

- Si la colonne B dans l'onglet "Guide" contient les valeurs "Donnée Non Saisie" ou "Saisie Erronée"

-> Copie d'éléments dans l'onglet "Sauvegarde" (Cellules D11/D10/D9/D8/B6/B7/B6/B9) + Toutes les lignes comportant les

valeurs "Donnée Non Saisie" ou "Saisie Erronée"

- Si la condition n'est pas remplie

-> Copie d'éléments dans l'onglet "Sauvegarde" (Cellules D11/D10/D9/D8/B6/B7/B6/B9) et indiquer dans la colonne K : "PAS

D'ERREURS DETECTEES"

Lorsque j'exécute le code, il me fait un mix et n'applique pas la condition souhaitée

Quelqu'un pourrait-il m'aider, please?

Sub Archiver()
Dim sht As Worksheet, sht1 As Worksheet
Dim lastrow As Long, ligne As Long, i As Integer
Set sht = Worksheets("Guide")
Set sht1 = Worksheets("Sauvegarde")
ligne = sht1.Cells(sht1.Rows.Count, "A").End(xlUp).Row + 1

With sht1
lastrow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
For i = 14 To lastrow
If sht.Range("B" & i).Value = "Donnée Non Saisie" Or sht.Range("B" & i).Value = "Saisie Erronée" Then

    .Range("A" & ligne).Value = sht.Range("D11").Value 'N° Fiche
    .Range("B" & ligne).Value = sht.Range("D10").Value 'Date du contrôle
    .Range("C" & ligne).Value = sht.Range("D9").Value 'Contrôleur
    .Range("D" & ligne).Value = sht.Range("D8").Value 'Type
    .Range("E" & ligne).Value = sht.Range("B6").Value 'Num CL
    .Range("F" & ligne).Value = sht.Range("B7").Value 'Date de réception
    .Range("G" & ligne).Value = sht.Range("B6").Value 'Date de traitement
    .Range("H" & ligne).Value = sht.Range("B9").Value 'Traité par

    sht.Range("A" & i & ":C" & i & "").Copy
    .Range("J" & ligne).PasteSpecial xlPasteValues
    ligne = ligne + 1

Else
    .Range("A" & ligne).Value = sht.Range("D11").Value 'N° Fiche
    .Range("B" & ligne).Value = sht.Range("D10").Value 'Date du contrôle
    .Range("C" & ligne).Value = sht.Range("D9").Value 'Contrôleur
    .Range("D" & ligne).Value = sht.Range("D8").Value 'Type
    .Range("E" & ligne).Value = sht.Range("B6").Value 'Num CL
    .Range("F" & ligne).Value = sht.Range("B7").Value 'Date de réception
    .Range("G" & ligne).Value = sht.Range("B6").Value 'Date de traitement
    .Range("H" & ligne).Value = sht.Range("B9").Value 'Traité par
    .Range("K" & ligne).Value = "PAS D'ERREURS DETECTEES"

End If
Next i
End With
End Sub
3prepa-3.xlsm (123.61 Ko)

Bonjour,

Il n'y avait pas grand chose > juste la détection de la dernière ligne et B6 deux fois au lieu de B6 et B8.

Un essai ...

Sub Archiver()
Dim sht As Worksheet, sht1 As Worksheet
Dim lastrow As Long, ligne As Long, i As Integer

    Set sht = Worksheets("Guide")
    Set sht1 = Worksheets("Sauvegarde")

    With sht1
        lastrow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
        For i = 14 To lastrow
            If sht.Range("B" & i).Value = "Donnée Non Saisie" Or sht.Range("B" & i).Value = "Saisie Erronée" Then
                ligne = sht1.Cells(sht1.Rows.Count, "A").End(xlUp).Row + 1  '' << Modif
                .Range("A" & ligne).Value = sht.Range("D11").Value    'N° Fiche
                .Range("B" & ligne).Value = sht.Range("D10").Value    'Date du contrôle
                .Range("C" & ligne).Value = sht.Range("D9").Value    'Contrôleur
                .Range("D" & ligne).Value = sht.Range("D8").Value    'Type
                .Range("E" & ligne).Value = sht.Range("B6").Value    'Num CL
                .Range("F" & ligne).Value = sht.Range("B7").Value    'Date de réception
                .Range("G" & ligne).Value = sht.Range("B8").Value    'Date de traitement   '' << Modif B8
                .Range("H" & ligne).Value = sht.Range("B9").Value    'Traité par

                sht.Range("A" & i & ":C" & i & "").Copy
                .Range("J" & ligne).PasteSpecial xlPasteValues
                ligne = ligne + 1

            Else
                ligne = sht1.Cells(sht1.Rows.Count, "A").End(xlUp).Row + 1  '' << Modif
                .Range("A" & ligne).Value = sht.Range("D11").Value    'N° Fiche
                .Range("B" & ligne).Value = sht.Range("D10").Value    'Date du contrôle
                .Range("C" & ligne).Value = sht.Range("D9").Value    'Contrôleur
                .Range("D" & ligne).Value = sht.Range("D8").Value    'Type
                .Range("E" & ligne).Value = sht.Range("B6").Value    'Num CL
                .Range("F" & ligne).Value = sht.Range("B7").Value    'Date de réception
                .Range("G" & ligne).Value = sht.Range("B8").Value    'Date de traitement  '' << Modif B8
                .Range("H" & ligne).Value = sht.Range("B9").Value    'Traité par
                .Range("K" & ligne).Value = "PAS D'ERREURS DETECTEES"

            End If
        Next i
    End With
End Sub

ric

Merci Ric pour ton aide

Mais çà ne correspond pas à ce que je souhaite

Ce document est une fiche de contrôle des erreurs éventuelles sur le traitement de dossiers clients.

  • Si le résultat d'un point de contrôle = "Donnée Non Saisie" ou "Saisie Erronée" , cela est considéré comme une erreur
  • Si le résultat d'un point de contrôle = "OK" ou "Non Concerné" , cela n'est pas considéré comme une erreur
Il s'agit donc d'archiver le détail de toutes les erreurs relevées dans les points de contrôle.

Cas 1 : Il y a au moins une cellule dans la colonne B ayant pour valeur "Donnée Non Saisie" ou "Saisie Erronée"

-> Copie d'éléments dans l'onglet "Sauvegarde" (Cellules D11/D10/D9/D8/B6/B7/B6/B9) + Toutes les lignes comportant les

valeurs "Donnée Non Saisie" ou "Saisie Erronée" (Pas la copie des lignes "OK" et "Non Concerné"

En clair, s'il y a 5 erreurs, copie des 5 lignes en erreur

Cas 2 : Aucune cellule de la colonne B n'a pour valeur "Donnée Non Saisie" ou "Saisie Erronée"

-> Copie d'éléments dans l'onglet "Sauvegarde" (Cellules D11/D10/D9/D8/B6/B7/B6/B9) et indiquer dans la colonne K : "PAS

D'ERREURS DETECTEES"

En clair, 1 seule ligne doit apparaître dans l'onglet "Sauvegarde"

Bonjour,

C'est plus clair ainsi.

ric

Désolé,

Pas évident pour toi, si j'explique mal ma demande...

Bonjour,

Un essai ...

Sub Archiver()
Dim sht As Worksheet, sht1 As Worksheet
Dim lastrow As Long, ligne As Long, i As Integer
Dim SiErr As Integer

    Set sht = Worksheets("Guide")
    Set sht1 = Worksheets("Sauvegarde")

    SiErr = 0

    With sht1
        lastrow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
        For i = 14 To lastrow
            If sht.Range("B" & i).Value = "Donnée Non Saisie" Or sht.Range("B" & i).Value = "Saisie Erronée" Then
                ligne = sht1.Cells(sht1.Rows.Count, "A").End(xlUp).Row + 1  '' << Modif
                .Range("A" & ligne).Value = sht.Range("D11").Value    'N° Fiche
                .Range("B" & ligne).Value = sht.Range("D10").Value    'Date du contrôle
                .Range("C" & ligne).Value = sht.Range("D9").Value    'Contrôleur
                .Range("D" & ligne).Value = sht.Range("D8").Value    'Type
                .Range("E" & ligne).Value = sht.Range("B6").Value    'Num CL
                .Range("F" & ligne).Value = sht.Range("B7").Value    'Date de réception
                .Range("G" & ligne).Value = sht.Range("B8").Value    'Date de traitement   '' << Modif B8
                .Range("H" & ligne).Value = sht.Range("B9").Value    'Traité par

                sht.Range("A" & i & ":C" & i & "").Copy
                .Range("J" & ligne).PasteSpecial xlPasteValues
                ligne = ligne + 1
                SiErr = SiErr + 1
            End If
        Next i

        If SiErr = 0 Then
                ligne = sht1.Cells(sht1.Rows.Count, "A").End(xlUp).Row + 1  '' << Modif
                .Range("A" & ligne).Value = sht.Range("D11").Value    'N° Fiche
                .Range("B" & ligne).Value = sht.Range("D10").Value    'Date du contrôle
                .Range("C" & ligne).Value = sht.Range("D9").Value    'Contrôleur
                .Range("D" & ligne).Value = sht.Range("D8").Value    'Type
                .Range("E" & ligne).Value = sht.Range("B6").Value    'Num CL
                .Range("F" & ligne).Value = sht.Range("B7").Value    'Date de réception
                .Range("G" & ligne).Value = sht.Range("B8").Value    'Date de traitement  '' << Modif B8
                .Range("H" & ligne).Value = sht.Range("B9").Value    'Traité par
                .Range("K" & ligne).Value = "PAS D'ERREURS DETECTEES"
            End If
    End With
End Sub

ric

Hollaaaaaaaaaaaaaaa!

Merci beaucoup !

Cà fonctionne à merveille

Reste à voir pour la remise à zéro des cellules et l'incrémentation du numéro de fiche...

Je planche dessus

Rechercher des sujets similaires à "condition vba"