VBA problèmes de variables ERREUR 1004

Fermé
luc - 28 juin 2013 à 15:57
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 28 juin 2013 à 16:15
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 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
Modifié par pijaku le 28/06/2013 à 16:18
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