VBA problèmes de variables ERREUR 1004

luc -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je souhaite faciliter la copie de certaines cellules d'une feuille à l'autre. Sachant que les deux feuilles ne se ressemblent pas du tout au niveau de la mise en page. J'aurai donc besoin de votre aide s'il vous plait, je suis encore débutant en matière de VBA.

Private Sub CommandButton4_Click()
Dim Copiage, Collage

Copiage = InputBox("Entrez le numero de la ligneEB! à copier", "COPIE", 0)
Collage = InputBox("Entrez le numero de la lignePAC! où sera copier la ligne", "COLLAGE", 0)

Sheets("PAC").Cells(Collage, 7).Value = Sheets("EB").Cells(i, Copiage).Value
Sheets("pac").Cells(Collage, 8).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 9).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 20).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 19).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 25).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 10).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 32).Value = Feuil1.Cells(i, Copiage).Value

End Sub

1 réponse

pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
Bonjour,

Une InputBox, sans autre précision, renvoie une donnée de type String. Même si tu lui donne un nombre, elle le transforme en string...

Par conséquent, tu as deux choix :
Tu déclares tes variables As Long :

Private Sub CommandButton4_Click()
Dim Copiage As Long, Collage As Long

Copiage = InputBox("Entrez le numero de la ligneEB! à copier", "COPIE", 0)
Collage = InputBox("Entrez le numero de la lignePAC! où sera copier la ligne", "COLLAGE", 0)
Sheets("PAC").Cells(Collage, 7).Value = Sheets("EB").Cells(i, Copiage).Value
Sheets("pac").Cells(Collage, 8).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 9).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 20).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 19).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 25).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 10).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 32).Value = Feuil1.Cells(i, Copiage).Value
End Sub


Inconvénient : il y a tout de même beaucoup de risque d'erreur...
Si un 0 est saisi, la macro plante
Si une lettre est saisie la macro plante...

Le code ci-dessous évite déjà quelques erreurs.
A tester :

Private Sub CommandButton4_Click()
Dim Copiage As Long, Collage As Long
Dim InBox1 As String, InBox2 As String
Dim i As Long

i = 15

InBox1 = "a"
InBox2 = "b"
Do While Not IsNumeric(InBox1) Or Not IsNumeric(InBox2) Or InBox1 = "" Or InBox2 = "" Or InBox1 = 0 Or InBox2 = 0
    InBox1 = InputBox("Entrez le numero de la ligneEB! à copier", "COPIE", 0)
    InBox2 = InputBox("Entrez le numero de la lignePAC! où sera copier la ligne", "COLLAGE", 0)
    If Not IsNumeric(InBox1) Or Not IsNumeric(InBox2) Or InBox1 = "" Or InBox2 = "" Or InBox1 = 0 Or InBox2 = 0 Then
        MsgBox "Format de données erroné. Saisie numérique obligatoire"
    End If
Loop
Copiage = CLng(InBox1)
Collage = CLng(InBox2)
Sheets("PAC").Cells(Collage, 7).Value = Sheets("EB").Cells(i, Copiage).Value
Sheets("pac").Cells(Collage, 8).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 9).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 20).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 19).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 25).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 10).Value = Feuil1.Cells(i, Copiage).Value
Sheets("PAC").Cells(Collage, 32).Value = Feuil1.Cells(i, Copiage).Value
End Sub


Question subsidiaire : c'est quoi i??????? Par défaut je lui ai affecté 15 mais...
Cordialement,
Franck P
0