Débutant -erreur dans le code-fonction si

Résolu
cs_ilyaundebutatout Messages postés 10 Date d'inscription lundi 8 novembre 2010 Statut Membre Dernière intervention 4 février 2011 - 8 nov. 2010 à 13:01
cs_ilyaundebutatout Messages postés 10 Date d'inscription lundi 8 novembre 2010 Statut Membre Dernière intervention 4 février 2011 - 9 nov. 2010 à 12:40
Bonjour,

J'ai réussi à archiver mes facture sur une feuilles réservée à cela sur Excel.

Désormais, j'aimerais qu'Excel me dise "archivage déjà effectué" lorsque la facture est déjà archivée (pour je vérifie que sur la feuille "liste_facture", le numéro de facture "nf" n'est pas déjà présent) et qu'il l'archive avec un message "Archivage terminée" si ce n'est pas le cas.

Or avec le code que j'ai écris, Excel effectue les deux opérations à chaque fois, il archive (même si c'est déjà fait) et il me montre les 2 MsgBox.

Je ne sais pas du tout d'où vient mon erreur, est-ce que quelqu'un pourrait m'aider ?

Sub archive()

Application.ScreenUpdating = False

'Je vérifie que la facture ne soit pas déjà archivée

Dim Plage As Range
Dim Cellule As Range

On Error Resume Next
Set Plage = Sheets("liste_facture").Range(Cells(1, 1), Cells(1, 60000))
For Each Cellule In Plage
If Cellule.Value = "nf" Then
Result = MsgBox("Archivage déjà effectué", vbOKOnly + vbExclamation, "Attention")

If Cellule.Value <> "nf" Then

PROCEDURE D'ARCHIVAGE (non détaillée car elle fonctionnait précedemment, le problème ne vient pas de là)

Result = MsgBox("Archivage effectué", vbOKOnly + vbInformation, "Terminé")

End If

End If

Next

Application.ScreenUpdating = True
End Sub


Merci d'avance pour votre aide :))))

5 réponses

CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
8 nov. 2010 à 13:29
Bonjour,

Dans un premier temps, il faudrait savoir ce qu'est exactement nf...

En lisant ton code, nf est un TEXTE comportant seulement les lettres n et f, probablement dans une colonne précise, ce pour chaque ligne de facture (ta Plage, je suppose).
Est-ce bien le cas ?

Ensuite, je ne comprends pas pourquoi tu as placé tes End if de cette manière

Dim Plage As Range 
Dim Cellule As Range 

On Error Resume Next 
Set Plage = Sheets("liste_facture").Range(Cells(1, 1), Cells(1, 60000)) 
For Each Cellule In Plage 
   If Cellule.Value = "nf" Then 
      Result = MsgBox("Archivage déjà effectué", vbOKOnly + vbExclamation, "Attention") 
      If Cellule.Value <> "nf" Then 
         'PROCEDURE D'ARCHIVAGE (non détaillée car elle fonctionnait précedemment, le problème ne vient pas de là) 
         Result = MsgBox("Archivage effectué", vbOKOnly + vbInformation, "Terminé") 
      End If 
   End If 
Next 

Application.ScreenUpdating = True 
End Sub


Ceci me semble pus approprié :

Dim Plage As Range 
Dim Cellule As Range 

On Error Resume Next 
Set Plage = Sheets("liste_facture").Range(Cells(1, 1), Cells(1, 60000)) 
For Each Cellule In Plage 
   If Cellule.Value = "nf" Then 
      Result = MsgBox("Archivage déjà effectué", vbOKOnly + vbExclamation, "Attention") 
      'If Cellule.Value <> "nf" Then
   Else 
         'PROCEDURE D'ARCHIVAGE (non détaillée car elle fonctionnait précedemment, le problème ne vient pas de là) 
         Result = MsgBox("Archivage effectué", vbOKOnly + vbInformation, "Terminé") 
      'End If 
   End If 
Next 

Application.ScreenUpdating = True 
End Sub


Cordialement
Rataxes64
3
cs_ilyaundebutatout Messages postés 10 Date d'inscription lundi 8 novembre 2010 Statut Membre Dernière intervention 4 février 2011
8 nov. 2010 à 15:28
Merci Rataxes64 pour ta réponse.

J'avais commencé comme ceci en mettant "else" mais ça n'effectue que la première opération "archivage déjà effectué" et je ne peux archiver mes factures je ne comprend pas pourquoi.

"nf" désigne la cellule avec le numéro de facture, c'est la clé me permettant de déterminer si la cellule est déjà archivée ou pas.

Je t'ai mis le fichier Excel ci-dessous ce sera surement plus clair avec le code en entier:
http://www.cijoint.fr/cjlink.php?file=cj201011/cij2nmRt3k.xlsm

Merci beaucoup pour ton aide, je pense que l'erreur vient de mes variables mais je n'arrive pas à trouver la solution.

Je sais qu'il existe une fonction .Find pour vérifier si "nf" (le numéro de facture en cours) et déjà présent sur ma feuille (liste_facture) ou j'archive. Mais je ne sais pas comment l'utiliser. Penses-tu que c'est plus approprier?

Merci d'avance
3
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
8 nov. 2010 à 19:20
Bonsoir,

Passer par Find ne changerait probablement rien, mais je ne suis pas devin...

De plus, ça risque d'être plus lourd à faire tourner.

J'ai plutôt un doute concernant ce que récupère "nf".

Seul soucis, je n'ai pas pu exploiter ton Zip..

Pourrais-tu m'indiquer la marche à suivre pour pouvoir générer un fichier .xls exploitable (je suis sous Excel 2003).

Merci

Rataxes64
3
cs_ilyaundebutatout Messages postés 10 Date d'inscription lundi 8 novembre 2010 Statut Membre Dernière intervention 4 février 2011
8 nov. 2010 à 22:33
Excuse-moi je viens juste de rentrer du travail.

J'ai mis le fichier sous Excel 2003. Par contre je ne suis pas sûr que tu es accès à mon code.

J'espère que c'est bon et encore merci pour ton aide:
http://www.cijoint.fr/cjlink.php?file=cj201011/cijVZVqdK2.xls
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ilyaundebutatout Messages postés 10 Date d'inscription lundi 8 novembre 2010 Statut Membre Dernière intervention 4 février 2011
9 nov. 2010 à 12:40
C'est bon j'ai trouvé la solution.

Merci beaucoup CerberusPau.

Voila une façon qui fonctionne:

Sub archive()

dim cellule as range
Dim ligvid as integer

Application.ScreenUpdating = False

If Application.CountIf(Sheets("liste_facture").Range("A2:A1000"), Range("nf")) > 0 Then
MsgBox "Archivage déjà effectué", vbOKOnly + vbExclamation, "Attention"
Else

OPERATION D'ARCHIVAGE

End If
Application.ScreenUpdating = True

End Sub
3
Rejoignez-nous