Copie selon conditions

Résolu/Fermé
Ismailjosh Messages postés 3 Date d'inscription lundi 5 août 2019 Statut Membre Dernière intervention 6 août 2019 - 5 août 2019 à 18:34
yg_be Messages postés 22728 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 - 6 août 2019 à 20:11
Bonjour,

Je recherche de l'aide pour corriger ce code que je n'arrive pas à faire fonctionner comme je souhaite :
Je souhaite que la copie de la ligne 14 (contenant 3 cellules) soit copiée si la valeur de la cellule B15 est égale à "Donnée Non Saisie" ou "Donnée Erronée"

Quelqu'un pourrait-il m'aider ?
Merci par avance :)

Voici le code :

Sub Archiver()

ligne = Sheets("Sauvegarde").Range("A1").End(xlDown).Row + 1
Sheets("Sauvegarde").Range("A" & ligne).Value = Sheets("Guide").Range("B5").Value 'N° Fiche
Sheets("Sauvegarde").Range("B" & ligne).Value = Sheets("Guide").Range("D10").Value 'Date du contrôle
Sheets("Sauvegarde").Range("C" & ligne).Value = Sheets("Guide").Range("D9").Value 'Contrôleur
Sheets("Sauvegarde").Range("D" & ligne).Value = Sheets("Guide").Range("D8").Value 'Type
Sheets("Sauvegarde").Range("E" & ligne).Value = Sheets("Guide").Range("B6").Value 'Num CL
Sheets("Sauvegarde").Range("F" & ligne).Value = Sheets("Guide").Range("B7").Value 'Date de réception
Sheets("Sauvegarde").Range("G" & ligne).Value = Sheets("Guide").Range("B6").Value 'Date de traitement
Sheets("Sauvegarde").Range("H" & ligne).Value = Sheets("Guide").Range("B9").Value 'Traité par

If Worksheets("Guide").Range("B14").Value = "Donnée Non Saisie" Then
Set plage = Worksheets("Sauvegarde").Range("A14:A" & Cells(Rows.Count, 2).End(xlUp).Row)
ArchiveRow = plage.SpecialCells(xlCellTypeBlanks).Cells(1, 1).Row
Worksheets("Guide").Rows(i).Copy
Worksheets("Sauvegarde").Cells(ArchiveRow, 1).PasteSpecial
End If

End Sub




Configuration: Windows / Chrome 76.0.3809.87
A voir également:

2 réponses

yg_be Messages postés 22728 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
6 août 2019 à 11:35
bonjour,
merci d'utiliser les balises de code quand tu postes du code.
il est très important d'ajouter "option explicit" en début de module.
tu écris que ton code ne fait pas ce que tu souhaites. que fait-il? en quoi est-ce différent de ce que tu attends?
tu n'expliques pas non plus ce que le code doit faire.
0
Ismailjosh Messages postés 3 Date d'inscription lundi 5 août 2019 Statut Membre Dernière intervention 6 août 2019
6 août 2019 à 18:15
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
0
yg_be Messages postés 22728 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
Modifié le 6 août 2019 à 19:04
penses-tu que ta ligne 24 est au bon endroit?
0
Ismailjosh Messages postés 3 Date d'inscription lundi 5 août 2019 Statut Membre Dernière intervention 6 août 2019
6 août 2019 à 19:10
Selon toi, elle devrait être où?
0
yg_be Messages postés 22728 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476 > Ismailjosh Messages postés 3 Date d'inscription lundi 5 août 2019 Statut Membre Dernière intervention 6 août 2019
6 août 2019 à 20:11
n'est-ce pas ton code? à quoi sert-elle?
tu n'as pas expliqué ce que faisait ton code ("il me fait un mix").
connais-tu la technique d'execution pas à pas?
0