Par avance, je vous remercie pour l'aide que vous allez m'apporter car elle me serait très précieuse. Je rencontre 2 problèmes un peu délicats, et malgré mes recherches, je ne trouve pas la solution. Je précise que je suis assez novice sur Excel.
Problème 1 : Un document Excel avec plusieurs feuilles. Sur la feuille A, une cellule d'un tableau, et sur la feuille B, une cellule que j'aimerai remplir automatiquement avec ce qui est marqué dans A ! Comment-faire ?
Problème 2, plus coriace je pense : J'ai plusieurs feuilles, A B et C. J'aimerai que quand une certaine cellule de A est remplie (choix déroulant d'une cellule sur "oui" par exemple, ça je sais faire ), la feuille C soit dédoublée dans le classeur. Qu'en gros le remplissage d'une cellule créé une feuille nouvelle dans le classeur qui soit en réalité la copie d'une feuille existante.
Re : Lier deux cellules de différents feuilles / générer des feuilles gràace à une ce
Bonsoir,
Regarde le fichier joint, et dis-nous si ça te convient.....
Un exemple de lien vers une cellule d'une autre feuille en E9
Si tu sélectionnes "oui" en A2, la feuille Feuil3 est dupliquée et mise à la fin du classeur....
Re : Lier deux cellules de différents feuilles / générer des feuilles gràace à une ce
GENIAL ! Ca marche et c'est exactement ce que je veux faire.
Comment puis-je manipuler cela ? Si j'ai bien compris, c'est une macro ? Comment marche-t-elle afin que je puisse l'adapter à mon document ?
Re : Lier deux cellules de différents feuilles / générer des feuilles gràace à une ce
Bonsoir,
Voila une explication détaillée de la macro....n'hésite pas à demander si tu n'arrives pas à "l'adapter".
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
[COLOR="Green"]' Workbook_Change correspond à l'évènement "changement du contenu d'une cellule" (pour la feuille dans laquelle le code est placé)
' L'argument de la fonction est l'adresse de la cellule qui a été modifiée (nommé Target ici, et de type Range)[/COLOR]
If Target = Range("A2") Then
[COLOR="Green"]'La je vérifie que c'est bien la cellule A2 qui a été modifiée.
'Sans ce test, à chaque fois que l'on change le contenu d'une cellule, si on a "oui" en A2, la Feuil3 serait dupliquée[/COLOR]
If Target.Value = "oui" Then
[COLOR="Green"]'On vérifie que ce soit bien "oui" dans la cellule Target (qui est donc nécessairement A2 d'après le test précédent)
'On aurait pu mettre > If Range("A2").Value = "oui" Then < qui aurait peut-être été plus explicite....[/COLOR]
Sheets("Feuil3").Copy After:=Sheets(ThisWorkbook.Worksheets.Count)
[COLOR="Green"]'Enfin si les 2 tests précédents sont vérifiés, on copie la Feuil3, et on la colle en dernière position
'ThisWorkbook.Worksheets.Count correspond au nombre de feuilles du classeur....il faut lire à l'envers en fait....
'Compter (count).Les Feuilles (worksheets).du classeur (workbook)
'ThisWorkbook correspond au classeur qui contient la macro (à ne pas confondre avec ActiveWorkbook = classeur actif)[/COLOR]
End If
End If
End Sub
Re : Lier deux cellules de différents feuilles / générer des feuilles gràace à une ce
Bonsoir,
Bien sûr que c'est possible
En partant du principe que la feuille nouvellement crée est la feuille active, il "suffit" (facile à dire n'est-ce pas....) de rajouter la ligne suivante
Code:
ActiveSheet.Name = Sheets("Feuil2").Range("B6")
(avant le 1er End If)....Pour donner comme nom ce qui est en B6 de Feuil2 bien sûr
Sur le même principe, si le nom de la feuille que tu veux copier est en B3 de Feuil2, alors tu peux écrire
Re : Lier deux cellules de différents feuilles / générer des feuilles gràace à une ce
waaa Génial ! Merci énormément !
Même si... je me suis mal exprimé, c'est de ma faute !
C'est tout à fait ce que je veux faire, sauf qu'en fait le nom a donner a la nouvelle feuille n'est jamais le même (il y a plusieurs ligne dans mon tableau créateur de nouvelle feuille). En gros tous les noms possibles sont dans une seule colonne, et le nom est choisi (et la nouvelle feuille créée) en fonction de la ligne validée par "oui". Tu vois ce que je veux dire ?
Re : Lier deux cellules de différents feuilles / générer des feuilles gràace à une ce
Bonsoir,
Désolé, j'ai raté ton dernier message.....j'espère qu'il n'est pas trop tard!
Voici un code qui fonctionne à peu près....je vais détailler les quelques bugs après....si une tierce personne passe par ici, une solution serait fortement appréciée
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Application.Intersect(Range("B3:B20"), Target) Is Nothing) Then
If Target.Value = "oui" Then
Sheets("Feuil3").Copy After:=Sheets(ThisWorkbook.Worksheets.Count)
ActiveSheet.Name = Target.Offset(0, -1).Value
End If
End If
End Sub
Quelques explications : Application.Intersect donne l'intersection de 2 plages....vérifier qu'elle est non vide (Not(..... Is Nothing)) revient ici à vérifier que Target (revoir les messages précédents) est entre B3 et B20....à adapter selon tes données.
ActiveSheet.Name = Target.Offset(0, -1).Value : Je donne comme nom à la feuille active (qui est donc la feuille nouvellement créée) le contenu (Value) de la cellule qui se trouve en "Offset(0,-1)" de Target, soit sur la même ligne (le 0), et dans la colonne précédente (le -1)...pareil, n'ayant pas ton fichier, je te laisse adapter selon tes besoins!
Voici le bug (que je ne sais pas résoudre....)
Si on modifie plusieurs cellules, dont au moins une entre B3 et B20 (en sélectionnant non pas une cellule mais une plage par exemple), on a une "Incompatibilité de type" sur le Target.Value
Il y a éventuellement la possibilité suivante :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Application.Intersect(Range("B3:B20"), Target) Is Nothing) Then
On Error Goto ErreurPlage
If Target.Value = "oui" Then
On Error GoTo 0
Sheets("Feuil3").Copy After:=Sheets(ThisWorkbook.Worksheets.Count)
ActiveSheet.Name = Target.Offset(0, -1).Value
End If
End If
ErreurPlage:
End Sub
Mais je trouve que ce n'est pas du jeu Non, sérieusement je voulais savoir s'il y avait un moyen plus joli?
Allez, j'arrête ici mon roman, Imperium n'hésite pas à revenir en cas de besoin!
Bonne soirée à tous
Re : Lier deux cellules de différents feuilles / générer des feuilles gràace à une ce
Bonsoir
Pierre-Henry
Comme cela ?
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Application.Intersect(Range("B3:B20"), Target) Is Nothing) [COLOR=Blue][B]And Target.Count = 1 [/B][/COLOR]Then
If Target.Value = "oui" Then
Sheets("Feuil3").Copy After:=Sheets(ThisWorkbook.Worksheets.Count)
ActiveSheet.Name = Target.Offset(0, -1).Value
End If
End If
End Sub
Re : Lier deux cellules de différents feuilles / générer des feuilles gràace à une ce
Bonjour à tous,
J'espère que le fait que je poste une troisième fois d'affilée ne pose aucun problème.
Mais en fait, je vais me permettre d'abuser encore de votre gentillesse et de votre précieuse aide.
Me voilà donc avec ma feuille automatiquement créée (sous la condition que la cellule en feuille 1 soit sur "oui"), et qui porte le nom entré dans l'une des cellule de la feuille 1 (et ce nom dépend de la ligne sur laquelle le "oui" a été entré ).
Ce que je voudrai, c'est que sur cette nouvelle feuille créée, il y ait une cellule qui soit remplie avec le nom de cette nouvelle feuille (ou avec le nom qui se trouve dans l'une des cellules de la feuille 1 qui est le même).
Est-ce possible ? Et si oui quel est le script a entrer ?