Bonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Bonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Bonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLDBonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLD
Bonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLDBonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLDBonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLD
Bonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLDBonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
JLGD ( et les autres !!) : me revoilà !
J'ai donc essayé de suivre et de comprendre ton raisonnement et voilà ce que
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
i = 0
If Not Application.Intersect(CellChange, Range(Target.Address)) Then
IsNothing
If CellChange = "E" Or CellChange = "F" Or CellChange = "B" Then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").Offset(i)
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End If
i = i + 1
End Sub
Le hic c'est que rien ne se passe !! même pas une erreur surlignée dans le
code quand j'essaie de mettre des E, des F ou des B...
C'est vrai que je débute et que j'ai sûrement zappé quelque chose
d'essentiel...
Merci de me dire ce que je peux faire (je vous rassure, j'ai des cours de
programmés mais j'ai quand même envie d'avancer en attendant !).
Bien cordialement,
Pascale
Vébéiste en herbe (;-))Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLDBonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
JLGD ( et les autres !!) : me revoilà !
J'ai donc essayé de suivre et de comprendre ton raisonnement et voilà ce que
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
i = 0
If Not Application.Intersect(CellChange, Range(Target.Address)) Then
IsNothing
If CellChange = "E" Or CellChange = "F" Or CellChange = "B" Then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").Offset(i)
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End If
i = i + 1
End Sub
Le hic c'est que rien ne se passe !! même pas une erreur surlignée dans le
code quand j'essaie de mettre des E, des F ou des B...
C'est vrai que je débute et que j'ai sûrement zappé quelque chose
d'essentiel...
Merci de me dire ce que je peux faire (je vous rassure, j'ai des cours de
programmés mais j'ai quand même envie d'avancer en attendant !).
Bien cordialement,
Pascale
Vébéiste en herbe (;-))
Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLD
Bonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
JLGD ( et les autres !!) : me revoilà !
J'ai donc essayé de suivre et de comprendre ton raisonnement et voilà ce que
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
i = 0
If Not Application.Intersect(CellChange, Range(Target.Address)) Then
IsNothing
If CellChange = "E" Or CellChange = "F" Or CellChange = "B" Then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").Offset(i)
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End If
i = i + 1
End Sub
Le hic c'est que rien ne se passe !! même pas une erreur surlignée dans le
code quand j'essaie de mettre des E, des F ou des B...
C'est vrai que je débute et que j'ai sûrement zappé quelque chose
d'essentiel...
Merci de me dire ce que je peux faire (je vous rassure, j'ai des cours de
programmés mais j'ai quand même envie d'avancer en attendant !).
Bien cordialement,
Pascale
Vébéiste en herbe (;-))Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLDBonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Pascale,
voici le code en entier. Je pars du principe que dans la feuille cible où
copier les valeurs, j'ai deux lignes de titres au moins. Je l'ai testé ça
fonctionne.
Par contre, si une ligne qi avait la valeur E est modifée avec F par
exemple, tu auras deux fois la même ligne dans la feuille cible.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
Set CellCible = Sheets("MSDS Review 2006").Range("A1")
If Not Application.Intersect(CellChange, Range(Target.Address)) Is Nothing
Then
If Range(Target.Address).Value = "E" Or Range(Target.Address).Value =
"F" Or Range(Target.Address).Value = "B" Then
Application.ScreenUpdating = False
Set CellCible = CellCible.End(xlDown).Offset(1)
Range(Target.Address).EntireRow.Select
Selection.Copy
Sheets("MSDS Review 2006").Activate
ActiveSheet.Paste Destination:ÎllCible
End If
End If
Sheets("List Of Products").Range(Target.Address).Activate
Application.ScreenUpdating = True
End SubJLGD ( et les autres !!) : me revoilà !
J'ai donc essayé de suivre et de comprendre ton raisonnement et voilà ce que
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
i = 0
If Not Application.Intersect(CellChange, Range(Target.Address)) Then
IsNothing
If CellChange = "E" Or CellChange = "F" Or CellChange = "B" Then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").Offset(i)
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End If
i = i + 1
End Sub
Le hic c'est que rien ne se passe !! même pas une erreur surlignée dans le
code quand j'essaie de mettre des E, des F ou des B...
C'est vrai que je débute et que j'ai sûrement zappé quelque chose
d'essentiel...
Merci de me dire ce que je peux faire (je vous rassure, j'ai des cours de
programmés mais j'ai quand même envie d'avancer en attendant !).
Bien cordialement,
Pascale
Vébéiste en herbe (;-))Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLDBonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Pascale,
voici le code en entier. Je pars du principe que dans la feuille cible où
copier les valeurs, j'ai deux lignes de titres au moins. Je l'ai testé ça
fonctionne.
Par contre, si une ligne qi avait la valeur E est modifée avec F par
exemple, tu auras deux fois la même ligne dans la feuille cible.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
Set CellCible = Sheets("MSDS Review 2006").Range("A1")
If Not Application.Intersect(CellChange, Range(Target.Address)) Is Nothing
Then
If Range(Target.Address).Value = "E" Or Range(Target.Address).Value =
"F" Or Range(Target.Address).Value = "B" Then
Application.ScreenUpdating = False
Set CellCible = CellCible.End(xlDown).Offset(1)
Range(Target.Address).EntireRow.Select
Selection.Copy
Sheets("MSDS Review 2006").Activate
ActiveSheet.Paste Destination:ÎllCible
End If
End If
Sheets("List Of Products").Range(Target.Address).Activate
Application.ScreenUpdating = True
End Sub
JLGD ( et les autres !!) : me revoilà !
J'ai donc essayé de suivre et de comprendre ton raisonnement et voilà ce que
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
i = 0
If Not Application.Intersect(CellChange, Range(Target.Address)) Then
IsNothing
If CellChange = "E" Or CellChange = "F" Or CellChange = "B" Then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").Offset(i)
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End If
i = i + 1
End Sub
Le hic c'est que rien ne se passe !! même pas une erreur surlignée dans le
code quand j'essaie de mettre des E, des F ou des B...
C'est vrai que je débute et que j'ai sûrement zappé quelque chose
d'essentiel...
Merci de me dire ce que je peux faire (je vous rassure, j'ai des cours de
programmés mais j'ai quand même envie d'avancer en attendant !).
Bien cordialement,
Pascale
Vébéiste en herbe (;-))
Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLD
Bonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Pascale,
voici le code en entier. Je pars du principe que dans la feuille cible où
copier les valeurs, j'ai deux lignes de titres au moins. Je l'ai testé ça
fonctionne.
Par contre, si une ligne qi avait la valeur E est modifée avec F par
exemple, tu auras deux fois la même ligne dans la feuille cible.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
Set CellCible = Sheets("MSDS Review 2006").Range("A1")
If Not Application.Intersect(CellChange, Range(Target.Address)) Is Nothing
Then
If Range(Target.Address).Value = "E" Or Range(Target.Address).Value =
"F" Or Range(Target.Address).Value = "B" Then
Application.ScreenUpdating = False
Set CellCible = CellCible.End(xlDown).Offset(1)
Range(Target.Address).EntireRow.Select
Selection.Copy
Sheets("MSDS Review 2006").Activate
ActiveSheet.Paste Destination:ÎllCible
End If
End If
Sheets("List Of Products").Range(Target.Address).Activate
Application.ScreenUpdating = True
End SubJLGD ( et les autres !!) : me revoilà !
J'ai donc essayé de suivre et de comprendre ton raisonnement et voilà ce que
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
i = 0
If Not Application.Intersect(CellChange, Range(Target.Address)) Then
IsNothing
If CellChange = "E" Or CellChange = "F" Or CellChange = "B" Then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").Offset(i)
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End If
i = i + 1
End Sub
Le hic c'est que rien ne se passe !! même pas une erreur surlignée dans le
code quand j'essaie de mettre des E, des F ou des B...
C'est vrai que je débute et que j'ai sûrement zappé quelque chose
d'essentiel...
Merci de me dire ce que je peux faire (je vous rassure, j'ai des cours de
programmés mais j'ai quand même envie d'avancer en attendant !).
Bien cordialement,
Pascale
Vébéiste en herbe (;-))Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLDBonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Bonjour JLGD, bonjour à tous
Voilà un petit moment que je tourne en rond alors je me décide à revenir car
je ne m'en sors pas.
Merci pour le code donné.
Je l'ai copié dans "this workbook" (ça la colle d'ailleurs aussi dans la
feuille concernée), j'ai modifié la ligne :
"Set CellCible = Sheets("MSDS Review 2006").Range("A1")"
par
"Set CellCible = Sheets("MSDS Review 2006").Range("A20")"
car la première ligne dispo est la vingtième (j'ai bien fait ?)
ensuite quand je teste, j'ai une "erreur 1004 définie par l'application ou
par l'objet" : quand je clique sur déboggage, il y a la ligne suivante qui
est surlignée en jaune :
"Set CellCible = CellCible.End(xlDown).Offset(1)"
alors, 1/ c'est quoi j'ai une erreur "1004" définie par l'application ou
par l'objet (j'ai cherché sans trouver) et 2/ que dois-je faire ???
Merci par avance pour votre aide et @ bientôt de vous lire
Cordialement,
Pascale
PS : on est mieux sur ce forum que dans le métro ou personne ne nous ramasse
même quand on se casse une jambe !!
Pascale Vébéiste en herbe (;-))Pascale,
voici le code en entier. Je pars du principe que dans la feuille cible où
copier les valeurs, j'ai deux lignes de titres au moins. Je l'ai testé ça
fonctionne.
Par contre, si une ligne qi avait la valeur E est modifée avec F par
exemple, tu auras deux fois la même ligne dans la feuille cible.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
Set CellCible = Sheets("MSDS Review 2006").Range("A1")
If Not Application.Intersect(CellChange, Range(Target.Address)) Is Nothing
Then
If Range(Target.Address).Value = "E" Or Range(Target.Address).Value =
"F" Or Range(Target.Address).Value = "B" Then
Application.ScreenUpdating = False
Set CellCible = CellCible.End(xlDown).Offset(1)
Range(Target.Address).EntireRow.Select
Selection.Copy
Sheets("MSDS Review 2006").Activate
ActiveSheet.Paste Destination:ÎllCible
End If
End If
Sheets("List Of Products").Range(Target.Address).Activate
Application.ScreenUpdating = True
End SubJLGD ( et les autres !!) : me revoilà !
J'ai donc essayé de suivre et de comprendre ton raisonnement et voilà ce que
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
i = 0
If Not Application.Intersect(CellChange, Range(Target.Address)) Then
IsNothing
If CellChange = "E" Or CellChange = "F" Or CellChange = "B" Then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").Offset(i)
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End If
i = i + 1
End Sub
Le hic c'est que rien ne se passe !! même pas une erreur surlignée dans le
code quand j'essaie de mettre des E, des F ou des B...
C'est vrai que je débute et que j'ai sûrement zappé quelque chose
d'essentiel...
Merci de me dire ce que je peux faire (je vous rassure, j'ai des cours de
programmés mais j'ai quand même envie d'avancer en attendant !).
Bien cordialement,
Pascale
Vébéiste en herbe (;-))Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLDBonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Bonjour JLGD, bonjour à tous
Voilà un petit moment que je tourne en rond alors je me décide à revenir car
je ne m'en sors pas.
Merci pour le code donné.
Je l'ai copié dans "this workbook" (ça la colle d'ailleurs aussi dans la
feuille concernée), j'ai modifié la ligne :
"Set CellCible = Sheets("MSDS Review 2006").Range("A1")"
par
"Set CellCible = Sheets("MSDS Review 2006").Range("A20")"
car la première ligne dispo est la vingtième (j'ai bien fait ?)
ensuite quand je teste, j'ai une "erreur 1004 définie par l'application ou
par l'objet" : quand je clique sur déboggage, il y a la ligne suivante qui
est surlignée en jaune :
"Set CellCible = CellCible.End(xlDown).Offset(1)"
alors, 1/ c'est quoi j'ai une erreur "1004" définie par l'application ou
par l'objet (j'ai cherché sans trouver) et 2/ que dois-je faire ???
Merci par avance pour votre aide et @ bientôt de vous lire
Cordialement,
Pascale
PS : on est mieux sur ce forum que dans le métro ou personne ne nous ramasse
même quand on se casse une jambe !!
Pascale Vébéiste en herbe (;-))
Pascale,
voici le code en entier. Je pars du principe que dans la feuille cible où
copier les valeurs, j'ai deux lignes de titres au moins. Je l'ai testé ça
fonctionne.
Par contre, si une ligne qi avait la valeur E est modifée avec F par
exemple, tu auras deux fois la même ligne dans la feuille cible.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
Set CellCible = Sheets("MSDS Review 2006").Range("A1")
If Not Application.Intersect(CellChange, Range(Target.Address)) Is Nothing
Then
If Range(Target.Address).Value = "E" Or Range(Target.Address).Value =
"F" Or Range(Target.Address).Value = "B" Then
Application.ScreenUpdating = False
Set CellCible = CellCible.End(xlDown).Offset(1)
Range(Target.Address).EntireRow.Select
Selection.Copy
Sheets("MSDS Review 2006").Activate
ActiveSheet.Paste Destination:ÎllCible
End If
End If
Sheets("List Of Products").Range(Target.Address).Activate
Application.ScreenUpdating = True
End Sub
JLGD ( et les autres !!) : me revoilà !
J'ai donc essayé de suivre et de comprendre ton raisonnement et voilà ce que
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
i = 0
If Not Application.Intersect(CellChange, Range(Target.Address)) Then
IsNothing
If CellChange = "E" Or CellChange = "F" Or CellChange = "B" Then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").Offset(i)
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End If
i = i + 1
End Sub
Le hic c'est que rien ne se passe !! même pas une erreur surlignée dans le
code quand j'essaie de mettre des E, des F ou des B...
C'est vrai que je débute et que j'ai sûrement zappé quelque chose
d'essentiel...
Merci de me dire ce que je peux faire (je vous rassure, j'ai des cours de
programmés mais j'ai quand même envie d'avancer en attendant !).
Bien cordialement,
Pascale
Vébéiste en herbe (;-))
Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLD
Bonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Bonjour JLGD, bonjour à tous
Voilà un petit moment que je tourne en rond alors je me décide à revenir car
je ne m'en sors pas.
Merci pour le code donné.
Je l'ai copié dans "this workbook" (ça la colle d'ailleurs aussi dans la
feuille concernée), j'ai modifié la ligne :
"Set CellCible = Sheets("MSDS Review 2006").Range("A1")"
par
"Set CellCible = Sheets("MSDS Review 2006").Range("A20")"
car la première ligne dispo est la vingtième (j'ai bien fait ?)
ensuite quand je teste, j'ai une "erreur 1004 définie par l'application ou
par l'objet" : quand je clique sur déboggage, il y a la ligne suivante qui
est surlignée en jaune :
"Set CellCible = CellCible.End(xlDown).Offset(1)"
alors, 1/ c'est quoi j'ai une erreur "1004" définie par l'application ou
par l'objet (j'ai cherché sans trouver) et 2/ que dois-je faire ???
Merci par avance pour votre aide et @ bientôt de vous lire
Cordialement,
Pascale
PS : on est mieux sur ce forum que dans le métro ou personne ne nous ramasse
même quand on se casse une jambe !!
Pascale Vébéiste en herbe (;-))Pascale,
voici le code en entier. Je pars du principe que dans la feuille cible où
copier les valeurs, j'ai deux lignes de titres au moins. Je l'ai testé ça
fonctionne.
Par contre, si une ligne qi avait la valeur E est modifée avec F par
exemple, tu auras deux fois la même ligne dans la feuille cible.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
Set CellCible = Sheets("MSDS Review 2006").Range("A1")
If Not Application.Intersect(CellChange, Range(Target.Address)) Is Nothing
Then
If Range(Target.Address).Value = "E" Or Range(Target.Address).Value =
"F" Or Range(Target.Address).Value = "B" Then
Application.ScreenUpdating = False
Set CellCible = CellCible.End(xlDown).Offset(1)
Range(Target.Address).EntireRow.Select
Selection.Copy
Sheets("MSDS Review 2006").Activate
ActiveSheet.Paste Destination:ÎllCible
End If
End If
Sheets("List Of Products").Range(Target.Address).Activate
Application.ScreenUpdating = True
End SubJLGD ( et les autres !!) : me revoilà !
J'ai donc essayé de suivre et de comprendre ton raisonnement et voilà ce que
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
i = 0
If Not Application.Intersect(CellChange, Range(Target.Address)) Then
IsNothing
If CellChange = "E" Or CellChange = "F" Or CellChange = "B" Then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").Offset(i)
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End If
i = i + 1
End Sub
Le hic c'est que rien ne se passe !! même pas une erreur surlignée dans le
code quand j'essaie de mettre des E, des F ou des B...
C'est vrai que je débute et que j'ai sûrement zappé quelque chose
d'essentiel...
Merci de me dire ce que je peux faire (je vous rassure, j'ai des cours de
programmés mais j'ai quand même envie d'avancer en attendant !).
Bien cordialement,
Pascale
Vébéiste en herbe (;-))Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLDBonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Bonjour Pascale,
il ne fallait pas changer le code en mettant la cellule A20 qui est ta
première cellule disponible ! La ligne de code "Set CellCible =
CellCible.End(xlDown).Offset(1)" demande à Excel d'aller à la dernière ligne
non vide de ton tableau, +1, pour ajouter une nouvelle ligne. En mettant A20,
qui est ta dernière ligne utilisée, le code en erreur demande à Excel d'aller
en cellule A65536 et de décaler d'une ligne vers le bas soit cellule A65537.
Or, cette cellule n'existe pas sous Excel d'où le message d'erreur. Je t'ai
donné un code trés simple et donc trés perfectible pour que tu puisses
l'améliorer.
Conclusion :
1 - ne modifie pas le code et copie le dans la feuille List Of Products
(dans Visual Basic bien sûr)
2 - ton tableau doit comporter au moins deux lignes à partir de la cellule
A1 (ce que j'avais cru comprendre c'est que tu avais plusieurs lignes de
"titres")
3 - tu verras que la macro fonctionne.
4 - après tu n'as plus qu'à l'améliorer, mais si tu n'as pas encore eu ta
formation...
Bon courage.
A+Bonjour JLGD, bonjour à tous
Voilà un petit moment que je tourne en rond alors je me décide à revenir car
je ne m'en sors pas.
Merci pour le code donné.
Je l'ai copié dans "this workbook" (ça la colle d'ailleurs aussi dans la
feuille concernée), j'ai modifié la ligne :
"Set CellCible = Sheets("MSDS Review 2006").Range("A1")"
par
"Set CellCible = Sheets("MSDS Review 2006").Range("A20")"
car la première ligne dispo est la vingtième (j'ai bien fait ?)
ensuite quand je teste, j'ai une "erreur 1004 définie par l'application ou
par l'objet" : quand je clique sur déboggage, il y a la ligne suivante qui
est surlignée en jaune :
"Set CellCible = CellCible.End(xlDown).Offset(1)"
alors, 1/ c'est quoi j'ai une erreur "1004" définie par l'application ou
par l'objet (j'ai cherché sans trouver) et 2/ que dois-je faire ???
Merci par avance pour votre aide et @ bientôt de vous lire
Cordialement,
Pascale
PS : on est mieux sur ce forum que dans le métro ou personne ne nous ramasse
même quand on se casse une jambe !!
Pascale Vébéiste en herbe (;-))Pascale,
voici le code en entier. Je pars du principe que dans la feuille cible où
copier les valeurs, j'ai deux lignes de titres au moins. Je l'ai testé ça
fonctionne.
Par contre, si une ligne qi avait la valeur E est modifée avec F par
exemple, tu auras deux fois la même ligne dans la feuille cible.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
Set CellCible = Sheets("MSDS Review 2006").Range("A1")
If Not Application.Intersect(CellChange, Range(Target.Address)) Is Nothing
Then
If Range(Target.Address).Value = "E" Or Range(Target.Address).Value =
"F" Or Range(Target.Address).Value = "B" Then
Application.ScreenUpdating = False
Set CellCible = CellCible.End(xlDown).Offset(1)
Range(Target.Address).EntireRow.Select
Selection.Copy
Sheets("MSDS Review 2006").Activate
ActiveSheet.Paste Destination:ÎllCible
End If
End If
Sheets("List Of Products").Range(Target.Address).Activate
Application.ScreenUpdating = True
End SubJLGD ( et les autres !!) : me revoilà !
J'ai donc essayé de suivre et de comprendre ton raisonnement et voilà ce que
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
i = 0
If Not Application.Intersect(CellChange, Range(Target.Address)) Then
IsNothing
If CellChange = "E" Or CellChange = "F" Or CellChange = "B" Then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").Offset(i)
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End If
i = i + 1
End Sub
Le hic c'est que rien ne se passe !! même pas une erreur surlignée dans le
code quand j'essaie de mettre des E, des F ou des B...
C'est vrai que je débute et que j'ai sûrement zappé quelque chose
d'essentiel...
Merci de me dire ce que je peux faire (je vous rassure, j'ai des cours de
programmés mais j'ai quand même envie d'avancer en attendant !).
Bien cordialement,
Pascale
Vébéiste en herbe (;-))Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLDBonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Bonjour Pascale,
il ne fallait pas changer le code en mettant la cellule A20 qui est ta
première cellule disponible ! La ligne de code "Set CellCible =
CellCible.End(xlDown).Offset(1)" demande à Excel d'aller à la dernière ligne
non vide de ton tableau, +1, pour ajouter une nouvelle ligne. En mettant A20,
qui est ta dernière ligne utilisée, le code en erreur demande à Excel d'aller
en cellule A65536 et de décaler d'une ligne vers le bas soit cellule A65537.
Or, cette cellule n'existe pas sous Excel d'où le message d'erreur. Je t'ai
donné un code trés simple et donc trés perfectible pour que tu puisses
l'améliorer.
Conclusion :
1 - ne modifie pas le code et copie le dans la feuille List Of Products
(dans Visual Basic bien sûr)
2 - ton tableau doit comporter au moins deux lignes à partir de la cellule
A1 (ce que j'avais cru comprendre c'est que tu avais plusieurs lignes de
"titres")
3 - tu verras que la macro fonctionne.
4 - après tu n'as plus qu'à l'améliorer, mais si tu n'as pas encore eu ta
formation...
Bon courage.
A+
Bonjour JLGD, bonjour à tous
Voilà un petit moment que je tourne en rond alors je me décide à revenir car
je ne m'en sors pas.
Merci pour le code donné.
Je l'ai copié dans "this workbook" (ça la colle d'ailleurs aussi dans la
feuille concernée), j'ai modifié la ligne :
"Set CellCible = Sheets("MSDS Review 2006").Range("A1")"
par
"Set CellCible = Sheets("MSDS Review 2006").Range("A20")"
car la première ligne dispo est la vingtième (j'ai bien fait ?)
ensuite quand je teste, j'ai une "erreur 1004 définie par l'application ou
par l'objet" : quand je clique sur déboggage, il y a la ligne suivante qui
est surlignée en jaune :
"Set CellCible = CellCible.End(xlDown).Offset(1)"
alors, 1/ c'est quoi j'ai une erreur "1004" définie par l'application ou
par l'objet (j'ai cherché sans trouver) et 2/ que dois-je faire ???
Merci par avance pour votre aide et @ bientôt de vous lire
Cordialement,
Pascale
PS : on est mieux sur ce forum que dans le métro ou personne ne nous ramasse
même quand on se casse une jambe !!
Pascale Vébéiste en herbe (;-))
Pascale,
voici le code en entier. Je pars du principe que dans la feuille cible où
copier les valeurs, j'ai deux lignes de titres au moins. Je l'ai testé ça
fonctionne.
Par contre, si une ligne qi avait la valeur E est modifée avec F par
exemple, tu auras deux fois la même ligne dans la feuille cible.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
Set CellCible = Sheets("MSDS Review 2006").Range("A1")
If Not Application.Intersect(CellChange, Range(Target.Address)) Is Nothing
Then
If Range(Target.Address).Value = "E" Or Range(Target.Address).Value =
"F" Or Range(Target.Address).Value = "B" Then
Application.ScreenUpdating = False
Set CellCible = CellCible.End(xlDown).Offset(1)
Range(Target.Address).EntireRow.Select
Selection.Copy
Sheets("MSDS Review 2006").Activate
ActiveSheet.Paste Destination:ÎllCible
End If
End If
Sheets("List Of Products").Range(Target.Address).Activate
Application.ScreenUpdating = True
End Sub
JLGD ( et les autres !!) : me revoilà !
J'ai donc essayé de suivre et de comprendre ton raisonnement et voilà ce que
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
i = 0
If Not Application.Intersect(CellChange, Range(Target.Address)) Then
IsNothing
If CellChange = "E" Or CellChange = "F" Or CellChange = "B" Then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").Offset(i)
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End If
i = i + 1
End Sub
Le hic c'est que rien ne se passe !! même pas une erreur surlignée dans le
code quand j'essaie de mettre des E, des F ou des B...
C'est vrai que je débute et que j'ai sûrement zappé quelque chose
d'essentiel...
Merci de me dire ce que je peux faire (je vous rassure, j'ai des cours de
programmés mais j'ai quand même envie d'avancer en attendant !).
Bien cordialement,
Pascale
Vébéiste en herbe (;-))
Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLD
Bonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Bonjour Pascale,
il ne fallait pas changer le code en mettant la cellule A20 qui est ta
première cellule disponible ! La ligne de code "Set CellCible =
CellCible.End(xlDown).Offset(1)" demande à Excel d'aller à la dernière ligne
non vide de ton tableau, +1, pour ajouter une nouvelle ligne. En mettant A20,
qui est ta dernière ligne utilisée, le code en erreur demande à Excel d'aller
en cellule A65536 et de décaler d'une ligne vers le bas soit cellule A65537.
Or, cette cellule n'existe pas sous Excel d'où le message d'erreur. Je t'ai
donné un code trés simple et donc trés perfectible pour que tu puisses
l'améliorer.
Conclusion :
1 - ne modifie pas le code et copie le dans la feuille List Of Products
(dans Visual Basic bien sûr)
2 - ton tableau doit comporter au moins deux lignes à partir de la cellule
A1 (ce que j'avais cru comprendre c'est que tu avais plusieurs lignes de
"titres")
3 - tu verras que la macro fonctionne.
4 - après tu n'as plus qu'à l'améliorer, mais si tu n'as pas encore eu ta
formation...
Bon courage.
A+Bonjour JLGD, bonjour à tous
Voilà un petit moment que je tourne en rond alors je me décide à revenir car
je ne m'en sors pas.
Merci pour le code donné.
Je l'ai copié dans "this workbook" (ça la colle d'ailleurs aussi dans la
feuille concernée), j'ai modifié la ligne :
"Set CellCible = Sheets("MSDS Review 2006").Range("A1")"
par
"Set CellCible = Sheets("MSDS Review 2006").Range("A20")"
car la première ligne dispo est la vingtième (j'ai bien fait ?)
ensuite quand je teste, j'ai une "erreur 1004 définie par l'application ou
par l'objet" : quand je clique sur déboggage, il y a la ligne suivante qui
est surlignée en jaune :
"Set CellCible = CellCible.End(xlDown).Offset(1)"
alors, 1/ c'est quoi j'ai une erreur "1004" définie par l'application ou
par l'objet (j'ai cherché sans trouver) et 2/ que dois-je faire ???
Merci par avance pour votre aide et @ bientôt de vous lire
Cordialement,
Pascale
PS : on est mieux sur ce forum que dans le métro ou personne ne nous ramasse
même quand on se casse une jambe !!
Pascale Vébéiste en herbe (;-))Pascale,
voici le code en entier. Je pars du principe que dans la feuille cible où
copier les valeurs, j'ai deux lignes de titres au moins. Je l'ai testé ça
fonctionne.
Par contre, si une ligne qi avait la valeur E est modifée avec F par
exemple, tu auras deux fois la même ligne dans la feuille cible.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
Set CellCible = Sheets("MSDS Review 2006").Range("A1")
If Not Application.Intersect(CellChange, Range(Target.Address)) Is Nothing
Then
If Range(Target.Address).Value = "E" Or Range(Target.Address).Value =
"F" Or Range(Target.Address).Value = "B" Then
Application.ScreenUpdating = False
Set CellCible = CellCible.End(xlDown).Offset(1)
Range(Target.Address).EntireRow.Select
Selection.Copy
Sheets("MSDS Review 2006").Activate
ActiveSheet.Paste Destination:ÎllCible
End If
End If
Sheets("List Of Products").Range(Target.Address).Activate
Application.ScreenUpdating = True
End SubJLGD ( et les autres !!) : me revoilà !
J'ai donc essayé de suivre et de comprendre ton raisonnement et voilà ce que
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
i = 0
If Not Application.Intersect(CellChange, Range(Target.Address)) Then
IsNothing
If CellChange = "E" Or CellChange = "F" Or CellChange = "B" Then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").Offset(i)
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End If
i = i + 1
End Sub
Le hic c'est que rien ne se passe !! même pas une erreur surlignée dans le
code quand j'essaie de mettre des E, des F ou des B...
C'est vrai que je débute et que j'ai sûrement zappé quelque chose
d'essentiel...
Merci de me dire ce que je peux faire (je vous rassure, j'ai des cours de
programmés mais j'ai quand même envie d'avancer en attendant !).
Bien cordialement,
Pascale
Vébéiste en herbe (;-))Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLDBonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Re-Bonjour !
Bon, cette fois ça y est, avec un peu de mal mais j'y suis arrivée !!
Tout fonctionne !
Je cherche maintenant comment me débrouiller pour qu'une fois la cellule
complétée avec une de mes 3 lettres et que la ligne a été copiée dans l'autre
feuille, la cellule sélectionnée soit celle immédiatement en dessous !
Je pense que je vais trouver en copiant un peu sur toi avec ton histoire de
"offset"
En tout cas un grand grand grand merci !
@ bientôt
La Vébéiste en herbe (;-))Bonjour Pascale,
il ne fallait pas changer le code en mettant la cellule A20 qui est ta
première cellule disponible ! La ligne de code "Set CellCible =
CellCible.End(xlDown).Offset(1)" demande à Excel d'aller à la dernière ligne
non vide de ton tableau, +1, pour ajouter une nouvelle ligne. En mettant A20,
qui est ta dernière ligne utilisée, le code en erreur demande à Excel d'aller
en cellule A65536 et de décaler d'une ligne vers le bas soit cellule A65537.
Or, cette cellule n'existe pas sous Excel d'où le message d'erreur. Je t'ai
donné un code trés simple et donc trés perfectible pour que tu puisses
l'améliorer.
Conclusion :
1 - ne modifie pas le code et copie le dans la feuille List Of Products
(dans Visual Basic bien sûr)
2 - ton tableau doit comporter au moins deux lignes à partir de la cellule
A1 (ce que j'avais cru comprendre c'est que tu avais plusieurs lignes de
"titres")
3 - tu verras que la macro fonctionne.
4 - après tu n'as plus qu'à l'améliorer, mais si tu n'as pas encore eu ta
formation...
Bon courage.
A+Bonjour JLGD, bonjour à tous
Voilà un petit moment que je tourne en rond alors je me décide à revenir car
je ne m'en sors pas.
Merci pour le code donné.
Je l'ai copié dans "this workbook" (ça la colle d'ailleurs aussi dans la
feuille concernée), j'ai modifié la ligne :
"Set CellCible = Sheets("MSDS Review 2006").Range("A1")"
par
"Set CellCible = Sheets("MSDS Review 2006").Range("A20")"
car la première ligne dispo est la vingtième (j'ai bien fait ?)
ensuite quand je teste, j'ai une "erreur 1004 définie par l'application ou
par l'objet" : quand je clique sur déboggage, il y a la ligne suivante qui
est surlignée en jaune :
"Set CellCible = CellCible.End(xlDown).Offset(1)"
alors, 1/ c'est quoi j'ai une erreur "1004" définie par l'application ou
par l'objet (j'ai cherché sans trouver) et 2/ que dois-je faire ???
Merci par avance pour votre aide et @ bientôt de vous lire
Cordialement,
Pascale
PS : on est mieux sur ce forum que dans le métro ou personne ne nous ramasse
même quand on se casse une jambe !!
Pascale Vébéiste en herbe (;-))Pascale,
voici le code en entier. Je pars du principe que dans la feuille cible où
copier les valeurs, j'ai deux lignes de titres au moins. Je l'ai testé ça
fonctionne.
Par contre, si une ligne qi avait la valeur E est modifée avec F par
exemple, tu auras deux fois la même ligne dans la feuille cible.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
Set CellCible = Sheets("MSDS Review 2006").Range("A1")
If Not Application.Intersect(CellChange, Range(Target.Address)) Is Nothing
Then
If Range(Target.Address).Value = "E" Or Range(Target.Address).Value =
"F" Or Range(Target.Address).Value = "B" Then
Application.ScreenUpdating = False
Set CellCible = CellCible.End(xlDown).Offset(1)
Range(Target.Address).EntireRow.Select
Selection.Copy
Sheets("MSDS Review 2006").Activate
ActiveSheet.Paste Destination:ÎllCible
End If
End If
Sheets("List Of Products").Range(Target.Address).Activate
Application.ScreenUpdating = True
End SubJLGD ( et les autres !!) : me revoilà !
J'ai donc essayé de suivre et de comprendre ton raisonnement et voilà ce que
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
i = 0
If Not Application.Intersect(CellChange, Range(Target.Address)) Then
IsNothing
If CellChange = "E" Or CellChange = "F" Or CellChange = "B" Then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").Offset(i)
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End If
i = i + 1
End Sub
Le hic c'est que rien ne se passe !! même pas une erreur surlignée dans le
code quand j'essaie de mettre des E, des F ou des B...
C'est vrai que je débute et que j'ai sûrement zappé quelque chose
d'essentiel...
Merci de me dire ce que je peux faire (je vous rassure, j'ai des cours de
programmés mais j'ai quand même envie d'avancer en attendant !).
Bien cordialement,
Pascale
Vébéiste en herbe (;-))Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLDBonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Re-Bonjour !
Bon, cette fois ça y est, avec un peu de mal mais j'y suis arrivée !!
Tout fonctionne !
Je cherche maintenant comment me débrouiller pour qu'une fois la cellule
complétée avec une de mes 3 lettres et que la ligne a été copiée dans l'autre
feuille, la cellule sélectionnée soit celle immédiatement en dessous !
Je pense que je vais trouver en copiant un peu sur toi avec ton histoire de
"offset"
En tout cas un grand grand grand merci !
@ bientôt
La Vébéiste en herbe (;-))
Bonjour Pascale,
il ne fallait pas changer le code en mettant la cellule A20 qui est ta
première cellule disponible ! La ligne de code "Set CellCible =
CellCible.End(xlDown).Offset(1)" demande à Excel d'aller à la dernière ligne
non vide de ton tableau, +1, pour ajouter une nouvelle ligne. En mettant A20,
qui est ta dernière ligne utilisée, le code en erreur demande à Excel d'aller
en cellule A65536 et de décaler d'une ligne vers le bas soit cellule A65537.
Or, cette cellule n'existe pas sous Excel d'où le message d'erreur. Je t'ai
donné un code trés simple et donc trés perfectible pour que tu puisses
l'améliorer.
Conclusion :
1 - ne modifie pas le code et copie le dans la feuille List Of Products
(dans Visual Basic bien sûr)
2 - ton tableau doit comporter au moins deux lignes à partir de la cellule
A1 (ce que j'avais cru comprendre c'est que tu avais plusieurs lignes de
"titres")
3 - tu verras que la macro fonctionne.
4 - après tu n'as plus qu'à l'améliorer, mais si tu n'as pas encore eu ta
formation...
Bon courage.
A+
Bonjour JLGD, bonjour à tous
Voilà un petit moment que je tourne en rond alors je me décide à revenir car
je ne m'en sors pas.
Merci pour le code donné.
Je l'ai copié dans "this workbook" (ça la colle d'ailleurs aussi dans la
feuille concernée), j'ai modifié la ligne :
"Set CellCible = Sheets("MSDS Review 2006").Range("A1")"
par
"Set CellCible = Sheets("MSDS Review 2006").Range("A20")"
car la première ligne dispo est la vingtième (j'ai bien fait ?)
ensuite quand je teste, j'ai une "erreur 1004 définie par l'application ou
par l'objet" : quand je clique sur déboggage, il y a la ligne suivante qui
est surlignée en jaune :
"Set CellCible = CellCible.End(xlDown).Offset(1)"
alors, 1/ c'est quoi j'ai une erreur "1004" définie par l'application ou
par l'objet (j'ai cherché sans trouver) et 2/ que dois-je faire ???
Merci par avance pour votre aide et @ bientôt de vous lire
Cordialement,
Pascale
PS : on est mieux sur ce forum que dans le métro ou personne ne nous ramasse
même quand on se casse une jambe !!
Pascale Vébéiste en herbe (;-))
Pascale,
voici le code en entier. Je pars du principe que dans la feuille cible où
copier les valeurs, j'ai deux lignes de titres au moins. Je l'ai testé ça
fonctionne.
Par contre, si une ligne qi avait la valeur E est modifée avec F par
exemple, tu auras deux fois la même ligne dans la feuille cible.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
Set CellCible = Sheets("MSDS Review 2006").Range("A1")
If Not Application.Intersect(CellChange, Range(Target.Address)) Is Nothing
Then
If Range(Target.Address).Value = "E" Or Range(Target.Address).Value =
"F" Or Range(Target.Address).Value = "B" Then
Application.ScreenUpdating = False
Set CellCible = CellCible.End(xlDown).Offset(1)
Range(Target.Address).EntireRow.Select
Selection.Copy
Sheets("MSDS Review 2006").Activate
ActiveSheet.Paste Destination:ÎllCible
End If
End If
Sheets("List Of Products").Range(Target.Address).Activate
Application.ScreenUpdating = True
End Sub
JLGD ( et les autres !!) : me revoilà !
J'ai donc essayé de suivre et de comprendre ton raisonnement et voilà ce que
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
i = 0
If Not Application.Intersect(CellChange, Range(Target.Address)) Then
IsNothing
If CellChange = "E" Or CellChange = "F" Or CellChange = "B" Then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").Offset(i)
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End If
i = i + 1
End Sub
Le hic c'est que rien ne se passe !! même pas une erreur surlignée dans le
code quand j'essaie de mettre des E, des F ou des B...
C'est vrai que je débute et que j'ai sûrement zappé quelque chose
d'essentiel...
Merci de me dire ce que je peux faire (je vous rassure, j'ai des cours de
programmés mais j'ai quand même envie d'avancer en attendant !).
Bien cordialement,
Pascale
Vébéiste en herbe (;-))
Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLD
Bonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))
Re-Bonjour !
Bon, cette fois ça y est, avec un peu de mal mais j'y suis arrivée !!
Tout fonctionne !
Je cherche maintenant comment me débrouiller pour qu'une fois la cellule
complétée avec une de mes 3 lettres et que la ligne a été copiée dans l'autre
feuille, la cellule sélectionnée soit celle immédiatement en dessous !
Je pense que je vais trouver en copiant un peu sur toi avec ton histoire de
"offset"
En tout cas un grand grand grand merci !
@ bientôt
La Vébéiste en herbe (;-))Bonjour Pascale,
il ne fallait pas changer le code en mettant la cellule A20 qui est ta
première cellule disponible ! La ligne de code "Set CellCible =
CellCible.End(xlDown).Offset(1)" demande à Excel d'aller à la dernière ligne
non vide de ton tableau, +1, pour ajouter une nouvelle ligne. En mettant A20,
qui est ta dernière ligne utilisée, le code en erreur demande à Excel d'aller
en cellule A65536 et de décaler d'une ligne vers le bas soit cellule A65537.
Or, cette cellule n'existe pas sous Excel d'où le message d'erreur. Je t'ai
donné un code trés simple et donc trés perfectible pour que tu puisses
l'améliorer.
Conclusion :
1 - ne modifie pas le code et copie le dans la feuille List Of Products
(dans Visual Basic bien sûr)
2 - ton tableau doit comporter au moins deux lignes à partir de la cellule
A1 (ce que j'avais cru comprendre c'est que tu avais plusieurs lignes de
"titres")
3 - tu verras que la macro fonctionne.
4 - après tu n'as plus qu'à l'améliorer, mais si tu n'as pas encore eu ta
formation...
Bon courage.
A+Bonjour JLGD, bonjour à tous
Voilà un petit moment que je tourne en rond alors je me décide à revenir car
je ne m'en sors pas.
Merci pour le code donné.
Je l'ai copié dans "this workbook" (ça la colle d'ailleurs aussi dans la
feuille concernée), j'ai modifié la ligne :
"Set CellCible = Sheets("MSDS Review 2006").Range("A1")"
par
"Set CellCible = Sheets("MSDS Review 2006").Range("A20")"
car la première ligne dispo est la vingtième (j'ai bien fait ?)
ensuite quand je teste, j'ai une "erreur 1004 définie par l'application ou
par l'objet" : quand je clique sur déboggage, il y a la ligne suivante qui
est surlignée en jaune :
"Set CellCible = CellCible.End(xlDown).Offset(1)"
alors, 1/ c'est quoi j'ai une erreur "1004" définie par l'application ou
par l'objet (j'ai cherché sans trouver) et 2/ que dois-je faire ???
Merci par avance pour votre aide et @ bientôt de vous lire
Cordialement,
Pascale
PS : on est mieux sur ce forum que dans le métro ou personne ne nous ramasse
même quand on se casse une jambe !!
Pascale Vébéiste en herbe (;-))Pascale,
voici le code en entier. Je pars du principe que dans la feuille cible où
copier les valeurs, j'ai deux lignes de titres au moins. Je l'ai testé ça
fonctionne.
Par contre, si une ligne qi avait la valeur E est modifée avec F par
exemple, tu auras deux fois la même ligne dans la feuille cible.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
Set CellCible = Sheets("MSDS Review 2006").Range("A1")
If Not Application.Intersect(CellChange, Range(Target.Address)) Is Nothing
Then
If Range(Target.Address).Value = "E" Or Range(Target.Address).Value =
"F" Or Range(Target.Address).Value = "B" Then
Application.ScreenUpdating = False
Set CellCible = CellCible.End(xlDown).Offset(1)
Range(Target.Address).EntireRow.Select
Selection.Copy
Sheets("MSDS Review 2006").Activate
ActiveSheet.Paste Destination:ÎllCible
End If
End If
Sheets("List Of Products").Range(Target.Address).Activate
Application.ScreenUpdating = True
End SubJLGD ( et les autres !!) : me revoilà !
J'ai donc essayé de suivre et de comprendre ton raisonnement et voilà ce que
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range("I3:I527")
i = 0
If Not Application.Intersect(CellChange, Range(Target.Address)) Then
IsNothing
If CellChange = "E" Or CellChange = "F" Or CellChange = "B" Then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").Offset(i)
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End If
i = i + 1
End Sub
Le hic c'est que rien ne se passe !! même pas une erreur surlignée dans le
code quand j'essaie de mettre des E, des F ou des B...
C'est vrai que je débute et que j'ai sûrement zappé quelque chose
d'essentiel...
Merci de me dire ce que je peux faire (je vous rassure, j'ai des cours de
programmés mais j'ai quand même envie d'avancer en attendant !).
Bien cordialement,
Pascale
Vébéiste en herbe (;-))Bonjour Pascale,
voici un début de code vba non testé mais que tu pourras adapter :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim CellChange As Range
Set CellChange = Sheets("List Of Products").Range ("I3:I527")
i=0
'la ligne ci-dessous sert à tester le fait que la cellule que tu modifies
est bien celle que tu veux tester(définie en CellChange)
If Not Application.Intersect(CellChange, Range(Target.Address)) _
Is Nothing
if Cellchange="E" or Cellchange ="F" then
Set CellCible = Sheets("MSDS Review 2006").Range("A1").offset(i)
"ici code pour copier vers MSDS Review 2006"
end if
end if
'décale la zone cible où copier les infos, d'une ligne
i=i+1
End Sub
je te laisse le soin de compléter...
Bon courage
JLDBonjour à tous !
Je travaille sur Excel 2003.
Dans une feuille Excel (que j'appellerai ici "tableau"), j'ai un tableau de
9 colonnes (nom, référence, date…) sur 527 lignes.
L'entrée des données commence en ligne 3 (avant = en-têtes de colonnes).
Dans la neuvième colonne (colonne I comme Isidore), il convient de compléter
par une lettre : soit "E", soit "F", soit "B" (et pas autre chose !).
Je voudrais, quand les cellules de cette 9ème colonne sont complétées par
une de ces trois lettres, que la ligne complète (A3:I3 par exemple ou
A21:I21) soit copiée et coller dans la première ligne vide d'une autre
feuille (que j'appellerai ici "Recap").
J'ai ouvert un workbook dans VBA puisque il y a changement de feuille dans
l'exécution du code en prenant workbook / sheetchange et j'ai tapé ce qui
suit :
Vous noterez les ' que j'ai mis en début de ligne pour info ou pour mettre
en veille un truc qui ne fonctionnait pas)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si les cellules de la colonne I contiennent la lettre "E" ou la lettre "F"
'ou la lettre "B" copier la ligne (de la colonne "A" à la colonne "I" et
'la coller sur la première ligne vide de la colonne A de la feuille "MSDS
Review 2006"
'Sheets("List Of Products").Range ("I3:I527")
If cell = "E" Then
Range("A:I").Select.Copy
ElseIf cell = "F" Then
Range("A:I").Select.Copy
ElseIf cell = "B" Then
Range("A:I").Select.Copy
'Copy Sheets("List of Products").Range("A:I")
Sheets("MSDS Review 2006").Activate
premLiVide = Columns(1).Find("", [A65536], , , xlByRows, xlNext).Row
Paste.Selection
End If
End Sub
"Bien sûr" ça ne marche pas et je crains le pire car en plus je voudrais
protéger les différentes feuilles du classeur pour que l'utilisateur ne fasse
pas d'autre modifications que celles demandées (noms / date dans la feuille
"recap", lettre "E", "F" ou "B" dans la colonne "I" (9ème) de la feuille
"tableau". Il y a une troisième feuille qui sera libre.
Voilà ! Je remercie d'avance ceux ou celles d'entre vous qui pourront
m'aider (et… cerise sur le gâteau) qui pourront m'expliquer pourquoi ce que
je fais ne fonctionne pas.
Bien cordialement à tous
Pascale
Vébéiste en herbe (;-))