Feuille variable grâce à une cellule, dans macro

Résolu/Fermé
Alexver Messages postés 44 Date d'inscription lundi 1 juillet 2013 Statut Membre Dernière intervention 21 août 2013 - Modifié par Alexver le 31/07/2013 à 12:14
Alexver Messages postés 44 Date d'inscription lundi 1 juillet 2013 Statut Membre Dernière intervention 21 août 2013 - 1 août 2013 à 11:25
Bonjour,

Microsoft Office 2007

j'ai la macro suivante:

Sub ajouter_un_produit()

Dim MaPlage As Range, Cel As Range

Set MaPlage = Sheets("ajout_produit_composant").Range("D3:D15")
For Each Cel In MaPlage 'pour toutes les cellules de la plage
If Cel.Value = "" Then 'si elle est vide alors
'message à l'utilisateur
MsgBox "La cellule : " & Cel.Address & " n'est pas remplie."
'sortie de la procédure
Exit Sub
End If
Next

Set MaPlage = Sheets("ajout_produit_composant").Range("G3:G15")
For Each Cel In MaPlage 'pour toutes les cellules de la plage
If Cel.Value = "" Then 'si elle est vide alors
'message à l'utilisateur
MsgBox "La cellule : " & Cel.Address & " n'est pas remplie."
'sortie de la procédure
Exit Sub
End If
Next
Set MaPlage = Sheets("ajout_produit_composant").Range("I12,I13")
For Each Cel In MaPlage 'pour toutes les cellules de la plage
If Cel.Value = "" Then 'si elle est vide alors
'message à l'utilisateur
MsgBox "La cellule : " & Cel.Address & " n'est pas remplie."
'sortie de la procédure
Exit Sub
End If

Next

Application.ScreenUpdating = False
Sheets("ajout_produit_composant").Range("D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14,D15").Copy
Set Derligne = Sheets("tableau").Range("$A$65536").End(xlUp).Offset(1, 0)
Derligne.PasteSpecial Paste:=xlAll, Operation:=xlNone, Transpose:=True
Application.ScreenUpdating = False
Sheets("ajout_produit_composant").Range("G3,G4,G5,G6,G7,G8,G9,G10,G11,G12,G13,G14,G15,G16").Copy
Set Derligne = Sheets("tableau").Range("$A$65536").End(xlUp).Offset(0, 13)
Derligne.PasteSpecial Paste:=xlAll, Operation:=xlNone, Transpose:=True
Sheets("ajout_produit_composant").Range("D6,D7,D8,D10,D11,D12,D14,D15,G3,G4,G5,G6,G7,G8,G9,G10,G11,G12,G13,G14,G15,G16,I12,I13").ClearContents
Application.CutCopyMode = False

End Sub

Elle me permet de copier des cellules de la feuille ajout_produit_composant dans la feuille tableau et cela toujours à la fin de ce tableau.

Elle vérifie aussi qu'aucune case n'est vide sinon elle envoi un message, et stop l'execution de la macro.

Je suis novice au niveau des macros, et j'ai pu la faire grâce aux réponse sur ce forum, et je sais très bien qu'elle n'est peut être pas parfaite pour des connaisseurs. :)

Mon nouveau probleme est le suivant:

J'aimerais que la macro fasse ce travail en fonction de la feuille ou je lui indique de copier. Par exemple, dans la case I18 de la feuille ajout_produit_composant, je rentre le nom: Apple . J'aimerais donc ainsi que ma macro s'execute et fasse le travail vers la feuille Apple. Si je change le nom avant pour mettre Microsoft elle copiera ensuite vers la feuille Microsoft.

J'avais pensé mettre un truc du genre: Sheets(I18)Range ou Sheet(=I18)Range, mais cela ne marche pas. Bref je ne m'y connais pas et la bidouille ne fonctionne pas.

Merci d'avance si vous avez une solution :).

Cordialement,

ALex
A voir également:

2 réponses

melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
31 juil. 2013 à 13:06
Bonjour,

voici la résolution à ton problème :
dim a as variant
a= Sheets("ajout_produit_composant").range("I18")
Sheets(a).select

==> a prendra la valeur de la cellule I18 de ta feuille
sheets(a).select ==> sélectionnes la feuille nommée dans la variable a définie par ta feuille cellule I18
0
Alexver Messages postés 44 Date d'inscription lundi 1 juillet 2013 Statut Membre Dernière intervention 21 août 2013
1 août 2013 à 10:59
Merci :).

Il faut que je le mette ou? car si je le met au début sa ne marche pas et en plein milieu non plus sa bug.
0
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
1 août 2013 à 11:03
mets moi tout toncode vba ici ou bien ton fichier ou une copie de ton fichier dan cjoint.com
Je te modifierais le code en fonction
0
Alexver Messages postés 44 Date d'inscription lundi 1 juillet 2013 Statut Membre Dernière intervention 21 août 2013
1 août 2013 à 11:07
Sub ajouter_un_produit()

Dim MaPlage As Range, Cel As Range

Set MaPlage = Sheets("ajout_produit_composant").Range("D3:D15")
For Each Cel In MaPlage 'pour toutes les cellules de la plage
If Cel.Value = "" Then 'si elle est vide alors
'message à l'utilisateur
MsgBox "La cellule : " & Cel.Address & " n'est pas remplie."
'sortie de la procédure
Exit Sub
End If
Next

Set MaPlage = Sheets("ajout_produit_composant").Range("G3:G15")
For Each Cel In MaPlage 'pour toutes les cellules de la plage
If Cel.Value = "" Then 'si elle est vide alors
'message à l'utilisateur
MsgBox "La cellule : " & Cel.Address & " n'est pas remplie."
'sortie de la procédure
Exit Sub
End If
Next
Set MaPlage = Sheets("ajout_produit_composant").Range("I12,I13")
For Each Cel In MaPlage 'pour toutes les cellules de la plage
If Cel.Value = "" Then 'si elle est vide alors
'message à l'utilisateur
MsgBox "La cellule : " & Cel.Address & " n'est pas remplie."
'sortie de la procédure
Exit Sub
End If

Next

Application.ScreenUpdating = False
Sheets("ajout_produit_composant").Range("D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14,D15").Copy
Set Derligne = Sheets("tableau").Range("$A$65536").End(xlUp).Offset(1, 0)
Derligne.PasteSpecial Paste:=xlAll, Operation:=xlNone, Transpose:=True
Application.ScreenUpdating = False
Sheets("ajout_produit_composant").Range("G3,G4,G5,G6,G7,G8,G9,G10,G11,G12,G13,G14,G15,G16").Copy
Set Derligne = Sheets("tableau").Range("$A$65536").End(xlUp).Offset(0, 13)
Derligne.PasteSpecial Paste:=xlAll, Operation:=xlNone, Transpose:=True
Sheets("ajout_produit_composant").Range("D6,D7,D8,D10,D11,D12,D14,D15,G3,G4,G5,G6,G7,G8,G9,G10,G11,G12,G13,G14,G15,G16,I12,I13").ClearContents
Application.CutCopyMode = False

End Sub

Voila le code VBA, je sais il est un peu lourd ^^ j'ai mi en gras la partie que j'aimerais variable.
0
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
1 août 2013 à 11:19
coucou,

essaie ca :

Sub ajouter_un_produit()

Dim MaPlage As Range, Cel As Range
dim a as variant


Set MaPlage = Sheets("ajout_produit_composant").Range("D3:D15")
For Each Cel In MaPlage 'pour toutes les cellules de la plage
If Cel.Value = "" Then 'si elle est vide alors
'message à l'utilisateur
MsgBox "La cellule : " & Cel.Address & " n'est pas remplie."
'sortie de la procédure
Exit Sub
End If
Next

Set MaPlage = Sheets("ajout_produit_composant").Range("G3:G15")
For Each Cel In MaPlage 'pour toutes les cellules de la plage
If Cel.Value = "" Then 'si elle est vide alors
'message à l'utilisateur
MsgBox "La cellule : " & Cel.Address & " n'est pas remplie."
'sortie de la procédure
Exit Sub
End If
Next
Set MaPlage = Sheets("ajout_produit_composant").Range("I12,I13")
For Each Cel In MaPlage 'pour toutes les cellules de la plage
If Cel.Value = "" Then 'si elle est vide alors
'message à l'utilisateur
MsgBox "La cellule : " & Cel.Address & " n'est pas remplie."
'sortie de la procédure
Exit Sub
End If

Next


a= Sheets("ajout_produit_composant").range("I18") 'la variable a = la valeur de la cellule I18 de la feuille ajout produit composant

Application.ScreenUpdating = False
Sheets("ajout_produit_composant").Range("D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14,D15").Copy
Set Derligne = Sheets(a).Range("$A$65536").End(xlUp).Offset(1, 0)
Derligne.PasteSpecial Paste:=xlAll, Operation:=xlNone, Transpose:=True
Application.ScreenUpdating = False
Sheets("ajout_produit_composant").Range("G3,G4,G5,G6,G7,G8,G9,G10,G11,G12,G13,G14,G15,G16").Copy
Set Derligne = Sheets(a).Range("$A$65536").End(xlUp).Offset(0, 13)
Derligne.PasteSpecial Paste:=xlAll, Operation:=xlNone, Transpose:=True
Sheets("ajout_produit_composant").Range("D6,D7,D8,D10,D11,D12,D14,D15,G3,G4,G5,G6,G7,G8,G9,G10,G11,G12,G13,G14,G15,G16,I12,I13").ClearContents
Application.CutCopyMode = False

End Sub
0
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
1 août 2013 à 11:20
j'ai remplacé tableau par la variable a et j'ai donné la valeur à la variable a
0
Alexver Messages postés 44 Date d'inscription lundi 1 juillet 2013 Statut Membre Dernière intervention 21 août 2013
1 août 2013 à 11:25
Sa fonctionne :). Parfait, merci beaucoup mélanie. Cela me sera très utile ;).
0