Débutant VBA erreur de compilation
Résolu/Fermé
A voir également:
- Débutant VBA erreur de compilation
- Erreur 0x80070643 - Guide
- Erreur 38 free ✓ - Forum Mobile
- Incompatibilité de type vba ✓ - Forum Programmation
- Erreur 1004 vba ✓ - Forum Excel
- Vba erreur automation référence future non valide ✓ - Forum Word
4 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
9 nov. 2010 à 11:22
9 nov. 2010 à 11:22
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
Modifié par pijaku le 9/11/2010 à 08:54
Modifié par pijaku le 9/11/2010 à 08:54
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é :)
Merci beaucoup à tous les deux.
Je ne connaissais pas cette méthode, c'est parfait !
Je ne connaissais pas cette méthode, c'est parfait !
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
Modifié par pijaku le 9/11/2010 à 13:00
Modifié par pijaku le 9/11/2010 à 13:00
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.