Feuille variable grâce à une cellule, dans macro

[Résolu/Fermé]
Signaler
Messages postés
44
Date d'inscription
lundi 1 juillet 2013
Statut
Membre
Dernière intervention
21 août 2013
-
Messages postés
44
Date d'inscription
lundi 1 juillet 2013
Statut
Membre
Dernière intervention
21 août 2013
-
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

2 réponses

Messages postés
1505
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
31 janvier 2018
146
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
Messages postés
44
Date d'inscription
lundi 1 juillet 2013
Statut
Membre
Dernière intervention
21 août 2013

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.
Messages postés
1505
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
31 janvier 2018
146
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
Messages postés
44
Date d'inscription
lundi 1 juillet 2013
Statut
Membre
Dernière intervention
21 août 2013

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.
Messages postés
1505
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
31 janvier 2018
146
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
Messages postés
1505
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
31 janvier 2018
146
j'ai remplacé tableau par la variable a et j'ai donné la valeur à la variable a
Messages postés
44
Date d'inscription
lundi 1 juillet 2013
Statut
Membre
Dernière intervention
21 août 2013

Sa fonctionne :). Parfait, merci beaucoup mélanie. Cela me sera très utile ;).