Bonsoir le Forum.
Après beaucoup de difficultés, maitrisant très mal le vba, j'ai réussi à partir de plusieurs petites macro et d'info puisser dans ce forum à faire la macro suivante :
Elle est en deux grande partie :
1ere partie : fait des controles sur le contenu de différentes cellules.
2ème partie : fait un copier coller du contenue de deux feuilles (fichier EAF et Fichier BAP) pour les regrouper dans la feuille IMPORT puis supprime toutes les lignes dont les cellules de la colonne J est égale à zéro.
Séparément, ces deux macros fonctionnent très bien.
Réunies en une seule, j'ai le message d'erreur suivant :
"Erreur d'exécution 1004
La méthode select de la classe range a échoué"
Le "débogage" s'arrete sur la ligne :
Rows("2:150").Select (deuxième ligne après le titre Debut de l'import"). J'ai mis un pour montrer où c'est.
J'ai vraiment du mal et je ne comprend pas pourquoi séparé ca fonctionne mais réuni, ca plante.
Quelqu'un peu m'aider ?
Par avance merci
Cordialement
Dominique
LA MACRO
Private Sub CommandButton1_Click()
'
' debut des controle sur les champs à remplir obligatoirement
'
Dim Numfacture As Range
Dim Datefacture As Range
Dim Periode As Range
Dim Annee As Range
Dim MontantHT As Range
Dim MontantTTC As Range
Dim MoisConcerne As Range
Dim TVA As Range
Dim SoldeHT As Range
Dim DueDAte As Range
Dim ControlTVA As Range
Set Numfacture = Worksheets("Codification").Range("B1")
If Numfacture = "" Then
Select Case MsgBox("Le champ N° DE FACTURE est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("b1").Activate
Exit Sub
End If
'
Set Datefacture = Worksheets("Codification").Range("B2")
If Datefacture = "" Then
Select Case MsgBox("Le champ DATE est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("b2").Activate
Exit Sub
End If
Set Periode = Worksheets("Codification").Range("B3")
If Periode = "" Then
Select Case MsgBox("Le champ PERIODE est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("b3").Activate
Exit Sub
End If
Set Annee = Worksheets("Codification").Range("B4")
If Annee = "" Then
Select Case MsgBox("Le champ ANNEE est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("b4").Activate
Exit Sub
End If
Set MontantHT = Worksheets("Codification").Range("d1")
If MontantHT = "" Then
Select Case MsgBox("Le champ MONTANT HT est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("d1").Activate
Exit Sub
End If
Set MontantTTC = Worksheets("Codification").Range("d2")
If MontantTTC = "" Then
Select Case MsgBox("Le champ MONTANT TTC est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("d2").Activate
Exit Sub
End If
Set MoisConcerne = Worksheets("Codification").Range("d3")
If MoisConcerne = "" Then
Select Case MsgBox("Le champ MOIS CONCERNE est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("d3").Activate
Exit Sub
End If
Set TVA = Worksheets("Codification").Range("F1")
If TVA = "" Then
Select Case MsgBox("Le champ MONTANT TVA est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("F1").Activate
Exit Sub
End If
Set DueDAte = Worksheets("Codification").Range("h1")
If DueDAte = "" Then
Select Case MsgBox("Le champ DUE DATE est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("h1").Activate
Exit Sub
End If
Set SoldeHT = Worksheets("Codification").Range("h1")
If SoldeHT <> MontantHT Then
Select Case MsgBox("Le solde HT (H1) des données saisies dans la colonne G, est différent du montant HT (D1).", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("h1").Activate
Exit Sub
End If
Set ControlTVA = Worksheets("Codification").Range("e2")
If ControlTVA <> "OK" Then
Select Case MsgBox("Le TOTAL (Montant HT + le Montant TVA) est <> du Montant TTC.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("f1").Activate
Exit Sub
End If
'fin des controles
'DEBUT DE L'IMPORT
Sheets("IMPORT").Select
Rows("2:150").Select (c'est sur cette ligne là)
Selection.Delete Shift:=xlUp
Sheets("Fichier EAF").Select
Rows("6:150").Select
Range("C6").Activate
Selection.Copy
Sheets("IMPORT").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Fichier BAP").Select
Rows("4:154").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("IMPORT").Select
ActiveWindow.SmallScroll Down:=12
Range("A50").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("G48").Select
ActiveWindow.SmallScroll Down:=45
' supprimer les ligne à zero par rapport à la colonne J
Worksheets("IMPORT").Select
Dim l As Long
For l = Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
If Cells(l, "j").Value = 0 _
Or Cells(l, "j").Value = "" Then Cells(l, 1).EntireRow.Delete
Next l
End Sub
Après beaucoup de difficultés, maitrisant très mal le vba, j'ai réussi à partir de plusieurs petites macro et d'info puisser dans ce forum à faire la macro suivante :
Elle est en deux grande partie :
1ere partie : fait des controles sur le contenu de différentes cellules.
2ème partie : fait un copier coller du contenue de deux feuilles (fichier EAF et Fichier BAP) pour les regrouper dans la feuille IMPORT puis supprime toutes les lignes dont les cellules de la colonne J est égale à zéro.
Séparément, ces deux macros fonctionnent très bien.
Réunies en une seule, j'ai le message d'erreur suivant :
"Erreur d'exécution 1004
La méthode select de la classe range a échoué"
Le "débogage" s'arrete sur la ligne :
Rows("2:150").Select (deuxième ligne après le titre Debut de l'import"). J'ai mis un pour montrer où c'est.
J'ai vraiment du mal et je ne comprend pas pourquoi séparé ca fonctionne mais réuni, ca plante.
Quelqu'un peu m'aider ?
Par avance merci
Cordialement
Dominique
LA MACRO
Private Sub CommandButton1_Click()
'
' debut des controle sur les champs à remplir obligatoirement
'
Dim Numfacture As Range
Dim Datefacture As Range
Dim Periode As Range
Dim Annee As Range
Dim MontantHT As Range
Dim MontantTTC As Range
Dim MoisConcerne As Range
Dim TVA As Range
Dim SoldeHT As Range
Dim DueDAte As Range
Dim ControlTVA As Range
Set Numfacture = Worksheets("Codification").Range("B1")
If Numfacture = "" Then
Select Case MsgBox("Le champ N° DE FACTURE est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("b1").Activate
Exit Sub
End If
'
Set Datefacture = Worksheets("Codification").Range("B2")
If Datefacture = "" Then
Select Case MsgBox("Le champ DATE est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("b2").Activate
Exit Sub
End If
Set Periode = Worksheets("Codification").Range("B3")
If Periode = "" Then
Select Case MsgBox("Le champ PERIODE est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("b3").Activate
Exit Sub
End If
Set Annee = Worksheets("Codification").Range("B4")
If Annee = "" Then
Select Case MsgBox("Le champ ANNEE est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("b4").Activate
Exit Sub
End If
Set MontantHT = Worksheets("Codification").Range("d1")
If MontantHT = "" Then
Select Case MsgBox("Le champ MONTANT HT est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("d1").Activate
Exit Sub
End If
Set MontantTTC = Worksheets("Codification").Range("d2")
If MontantTTC = "" Then
Select Case MsgBox("Le champ MONTANT TTC est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("d2").Activate
Exit Sub
End If
Set MoisConcerne = Worksheets("Codification").Range("d3")
If MoisConcerne = "" Then
Select Case MsgBox("Le champ MOIS CONCERNE est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("d3").Activate
Exit Sub
End If
Set TVA = Worksheets("Codification").Range("F1")
If TVA = "" Then
Select Case MsgBox("Le champ MONTANT TVA est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("F1").Activate
Exit Sub
End If
Set DueDAte = Worksheets("Codification").Range("h1")
If DueDAte = "" Then
Select Case MsgBox("Le champ DUE DATE est vide.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("h1").Activate
Exit Sub
End If
Set SoldeHT = Worksheets("Codification").Range("h1")
If SoldeHT <> MontantHT Then
Select Case MsgBox("Le solde HT (H1) des données saisies dans la colonne G, est différent du montant HT (D1).", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("h1").Activate
Exit Sub
End If
Set ControlTVA = Worksheets("Codification").Range("e2")
If ControlTVA <> "OK" Then
Select Case MsgBox("Le TOTAL (Montant HT + le Montant TVA) est <> du Montant TTC.", vbOKOnly + vbExclamation, "ASF - ERREUR A LA SAISIE")
Case vbOK
End Select
Worksheets("Codification").Activate
Range("f1").Activate
Exit Sub
End If
'fin des controles
'DEBUT DE L'IMPORT
Sheets("IMPORT").Select
Rows("2:150").Select (c'est sur cette ligne là)
Selection.Delete Shift:=xlUp
Sheets("Fichier EAF").Select
Rows("6:150").Select
Range("C6").Activate
Selection.Copy
Sheets("IMPORT").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Fichier BAP").Select
Rows("4:154").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("IMPORT").Select
ActiveWindow.SmallScroll Down:=12
Range("A50").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("G48").Select
ActiveWindow.SmallScroll Down:=45
' supprimer les ligne à zero par rapport à la colonne J
Worksheets("IMPORT").Select
Dim l As Long
For l = Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
If Cells(l, "j").Value = 0 _
Or Cells(l, "j").Value = "" Then Cells(l, 1).EntireRow.Delete
Next l
End Sub