Débutant VBA erreur de compilation
Résolu
Le débutant
-
Le débutant -
Le débutant -
A voir également:
- Débutant VBA erreur de compilation
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
- J'aime par erreur facebook notification - Forum Facebook
4 réponses
Bonjour,
S'cusez l'incruste, je passais dans le coin et j'ai vu de la lumière...
début de la macro( le principe est le même) pour la feuille détail_facture). la variable "result" est inutile
S'cusez l'incruste, je passais dans le coin et j'ai vu de la lumière...
début de la macro( le principe est le même) pour la feuille détail_facture). la variable "result" est inutile
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 With Sheets("liste_facture") ligvid = .Range("A1000").End(xlUp).Row + 1 .Cells(ligvid, 1) = Range("nf") .Cells(ligvid, 2) = Range("nc") .Cells(ligvid, 3) = Range("date_facture") End With ''//FIN DE PROCEDURE POUR LA FEUILLE liste_facture
Salut,
Qu'est ce que "nf"?
Est ce que : nf est inscrit dans les cellules à tester ou nf est une variable?
Range(Cells(1, 1), Cells(1, 60000)) équivaut à A1:ZZA1
Si tu veux A1:A60000 : Range(Cells(1, 1), Cells(60000, 1))
Déjà modifie ceci :
Cordialement,
-- Il n'y a rien de tel qu'une question idiote, seulement une réponse idiote. A.Einstein --
Qu'est ce que "nf"?
Est ce que : nf est inscrit dans les cellules à tester ou nf est une variable?
Range(Cells(1, 1), Cells(1, 60000)) équivaut à A1:ZZA1
Si tu veux A1:A60000 : Range(Cells(1, 1), Cells(60000, 1))
Déjà modifie ceci :
Sub archive() Application.ScreenUpdating = False Dim Plage As Range Dim Cellule As Range On Error Resume Next 'cette ligne sert à quoi??? Set Plage = Sheets("liste_facture").Range(Cells(1, 1), Cells(60000, 1)) For Each Cellule In Plage If Cellule.Value = "nf" Then Result = MsgBox("Archivage déjà effectué", vbOKOnly + vbExclamation, "Attention") Else 'pas besoin de 2ème test... OPERATION D'ARCHIVAGE (je ne l'ai pas mise car elle fonctionne seule) Result = MsgBox("Archivage effectué", vbOKOnly + vbInformation, "Terminé") End If Next Application.ScreenUpdating = True End Sub
Cordialement,
-- Il n'y a rien de tel qu'une question idiote, seulement une réponse idiote. A.Einstein --
Merci Pijaku pour ton aide. "nf" est le nom que j'ai donné à la cellule contenant le numéro de la facture en cours.
C'est la clé qui me permet de vérifier si la facture est déjà archivée ou non sur la feuille "liste_facture".
En ce qui concerne le "Else", j'ai essayé comme tu m'a conseillé, ça n'effectue que la première opération "Archivage déjà effectué" et ça ne fait rien d'autre même si la facture n'est pas archivée.
Ci-dessous j'ai joint le fichier Excel, tu auras accès au code en entier, ce sera surement plus clair:
http://www.cijoint.fr/cjlink.php?file=cj201011/cijVZVqdK2.xls
Merci beaucoup dans tous les cas et merci pour la plage, je m'étais effectivement trompé :)
C'est la clé qui me permet de vérifier si la facture est déjà archivée ou non sur la feuille "liste_facture".
En ce qui concerne le "Else", j'ai essayé comme tu m'a conseillé, ça n'effectue que la première opération "Archivage déjà effectué" et ça ne fait rien d'autre même si la facture n'est pas archivée.
Ci-dessous j'ai joint le fichier Excel, tu auras accès au code en entier, ce sera surement plus clair:
http://www.cijoint.fr/cjlink.php?file=cj201011/cijVZVqdK2.xls
Merci beaucoup dans tous les cas et merci pour la plage, je m'étais effectivement trompé :)
Salut,
Voici en retour ton fichier avec une troisième variante utilisant la méthode .find :
Merci à Michel_m pour le coup de main.
Voici en retour ton fichier avec une troisième variante utilisant la méthode .find :
Dim Trouve As Range Dim Valeur_cherchee, Valeur_trouvee As String Dim PremiereLigneVide As Integer Application.ScreenUpdating = False 'Détermination de la valeur à rechercher dans liste_facture, soit le N° de facture Valeur_cherchee = Sheets("facture").Range("B8").Value 'procédure de recherche du numéro de facture Set Trouve = Sheets("liste_facture").Columns(1).Cells.Find(what:=Valeur_cherchee) 'Si la procédure ne trouve pas le num de fact (= facture non archivée) If Trouve Is Nothing Then ''//DEBUT DE PROCEDURE POUR LA FEUILLE liste_facture With Sheets("liste_facture") 'détermination du numéro de la première ligne vide PremiereLigneVide = .Cells(65536, 1).End(xlUp).Offset(1, 0).Row 'Dans la première colonne, j'affecte le numéro de facture désignée feuille facture .Cells(PremiereLigneVide, 1).Value = Sheets("facture").Range("B8").Value 'Dans la deuxième colonne, j'affecte la valeur du numéro client .Cells(PremiereLigneVide, 2).Value = Sheets("facture").Range("B9").Value 'Dans la troisième colonne, j'affecte la valeur de date_facture .Cells(PremiereLigneVide, 3).Value = Sheets("facture").Range("F1").Value End With ''//FIN DE PROCEDURE POUR LA FEUILLE liste_facture
Merci à Michel_m pour le coup de main.