Feuille variable grâce à une cellule, dans macro
Résolu
Alexver
Messages postés
44
Date d'inscription
Statut
Membre
Dernière intervention
-
Alexver Messages postés 44 Date d'inscription Statut Membre Dernière intervention -
Alexver Messages postés 44 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Feuille variable grâce à une cellule, dans macro
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Aller à la ligne dans une cellule excel - Guide
- Verrouiller cellule excel sans verrouiller la feuille - Guide
- Bruler une feuille de laurier - Guide
- Excel cellule couleur si condition texte - Guide
2 réponses
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
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
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.
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.
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.
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.
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
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