Conditions : Si la cellule B2 contient le texte "XX"

Résolu
Julia_74 Messages postés 20 Date d'inscription mardi 30 septembre 2014 Statut Membre Dernière intervention 5 mars 2015 - 30 sept. 2014 à 14:56
Julia_74 Messages postés 20 Date d'inscription mardi 30 septembre 2014 Statut Membre Dernière intervention 5 mars 2015 - 19 nov. 2014 à 11:45
Bonjour à tous,

Biologiste de formation, je débute totalement dans le milieu. Je dois créer un fichier assez complexe sur Excel, et je coince sur une étape.

J'ai une feuille A pour le projet A et une feuille B pour le projet B, avec un nombre de données conséquent.

La feuille C me sert à regrouper les données soit du projet A, soit du projet B (mêmes tableaux, mêmes graphiques, seules les données chiffrées changent). Je parviens à créer un bouton de commande qui me transferre les données de la feuille A sur la feuille C, idem pour la feuille B.

Ce que je voudrais, c'est que sur la feuille C, j'ai en position B2 une liste déroulante (projetA ou projetB) et que selon le contenu de cette case B2, les données transférées à ma feuille C soient celles correspondantes.

J'ai donc besoin d'une condition "Si B2 contient projetA on me copie les données de la feuille A, si B2 contient projetB on me copie les données de la feuille B" mais je ne parvient pas à placer la condition correctement, ma liste déroulante est pourtant bien créée.

J'espère que mes explications ne sont pas trop brouillons.

Merci d'avance,

Amicalement

Julia

7 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 30/09/2014 à 15:05
Bonjour,
1) je déplace ta discussion vers VBA
2) on voudrait bien voir le code que tu as tenté, s'il te plait (c'est une règle, ici)
3) à tout hasard (puisque l'on ne sait pas ce que tu as tenté) : la fonction Instr (ton aide VBA à ouvrir sur ce mot) te permet aisément de vérifier si une chaîne de caractères contient ou non une sous-chaîne spécifiée.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
1
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
30 sept. 2014 à 15:06
Bonjour,

Excel.. utilises le VBA ( j'ai déplacé ta discussion dans la bonne section du forum).

Pour ce qui est de :
J'ai donc besoin d'une condition "Si B2 contient projetA on me copie les données de la feuille A, si B2 contient projetB on me copie les données de la feuille B" mais je ne parvient pas à placer la condition correctement, ma liste déroulante est pourtant bien créée.
Sans nous montrer ton code.. il nous sera difficile de te répondre et de te dire ce qui ne va pas dans ton code....


Au mieux.. je peux te dire que ton code pourrait ressembler à ça:
Sub test()

Dim desti As String
Dim feuilSource As Worksheet
Dim feuilCible As Worksheet
Set feuilCible = Sheets(3)

'--------------------------------------------
' On regarde ce que vaut B2:
'--------------------------------------------
desti = Sheets(3).Range("B2").Value
Select Case desti
    Case "projetA"
        Set feuilSource = Sheets(1)
    Case "projetB"
        Set feuilSource = Sheets(2)
    Case Else
       'ca vaut autre chose...
        Exit Sub
End Select

'--------------------------------------------
' ICI le code pour récuperer les valeurs..
'--------------------------------------------


End Sub




1
Julia_74 Messages postés 20 Date d'inscription mardi 30 septembre 2014 Statut Membre Dernière intervention 5 mars 2015
Modifié par jordane45 le 30/09/2014 à 16:01
Bonjour, toutes mes excuses pour l'erreur de localisation de mon post...

Voici mon code actuel :
Sub copier()
'sélection des conditions
Sheets("3").Activate
If Range("B2").Value Like "*PROJETA*" Then
'Activation de la feuille A
Sheets("A").Activate
'Copie
Sheets("A").Select
Range("BilanFA").Select
selection.Copy
Sheets("3").Select
Range("Destination").Select
ActiveSheet.Paste
selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False

Either If Range("B2").Value Like "*PROJETB*" Then ....

End If
End Sub



Comme je l'ai dit je débute (hier matin) donc pas de moqueries :).

Je suis impréssionée par la rapidité de vos réponses en tout cas et vous en remercie

Julia

EDIT : Ajout des balises de code:
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
0
Julia_74 Messages postés 20 Date d'inscription mardi 30 septembre 2014 Statut Membre Dernière intervention 5 mars 2015
30 sept. 2014 à 15:56
Jordane, merci pour l'exemple de code, j'éssaie en adaptant le mien
0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
Modifié par jordane45 le 30/09/2014 à 16:18
Ce qui ne va pas dans ton code précédent... c'est le EITHER...; ça n'existe pas en VBA.
Il faut utiliser ELSE

Par contre, (c'est une question d'habitude que tu vas vite apprendre ^^ ) essayes de découper ton programme en FONCTIONS et à ne pas dupliquer les mêmes lignes de code inutilement... surtout si ce n'est que pour y changer deux ou trois variables...

Ton code.. légèrement revu pourrait donner quelque chose du genre :


Sub copier()
'sélection des conditions
Dim Fsource As Worksheet
Dim Fdesti As Worksheet
Dim rngDesti As Range
Dim rngToCop As Range

      Set Fdesti = Sheets(3)
    Set rngDesti = Range("Destination")
    
    'On défini les Variables en fonction de B2
    If Fdesti.Range("B2").Value Like "*PROJETA*" Then
        Set Fsource = Sheets("A")
        Set rngToCop = Range("BilanFA")
    ElseIf Range("B2").Value Like "*PROJETB*" Then
        Set Fsource = Sheets("B")
        Set rngToCop = Range("BilanFB")
    End If
    
    'Lancement de la copie
    Copi = CopieFromSheet(Fsource, Fdesti, rngToCop, rngDesti)

End Sub

Function CopieFromSheet(ShSource As Worksheet, ShDesi As Worksheet, rngTocopy As Range, rngDesi As Range)
    'Activation de la feuille
    ShDesi.Activate
    'Copie
    ShDesi.Select
    rngTocopy.Select
    Selection.Copy
    ShSource.Select
    rngDesi.Select
    ActiveSheet.Paste
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
            Application.CutCopyMode = False
End Function



Bien sûr.. à corriger/modifier selon tes besoins.... là.. je l'ai écris de tête sans le tester.


PS: pour poster du code.. utilises la coloration syntaxique STP.
Explications disponibles ici :
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Julia_74 Messages postés 20 Date d'inscription mardi 30 septembre 2014 Statut Membre Dernière intervention 5 mars 2015
Modifié par Julia_74 le 30/09/2014 à 16:21
Jordane,

Merci pour ton temps (et pour l'aide)
Je retravailles le code pour l'adapter à mes données, et je reviens vers ce post si j'ai d'autres questions ou simplement pour signaler que ça fonctionne ou non (au passage, j'aurai lu les explications pour la coloration syntaxique c'est promis)

Merci encore,

Julia
0
Julia_74 Messages postés 20 Date d'inscription mardi 30 septembre 2014 Statut Membre Dernière intervention 5 mars 2015
Modifié par Julia_74 le 1/10/2014 à 09:25
Bonjour, après écriture et modification , j'obtiens le message "la méthode sélect de la classe range a échoué et malgré mes recherches je ne vois pas d'où le problème vient...

(J'ai cliqué sur l'icône code comme expliqué dans le document pour la colo syntaxique, alors j'espère que ça a bien fonctionné)

Merci encore à tous

Sub action()
'conditions
Dim Fsource As Worksheet
Dim Fdesti As Worksheet
Dim rngDesti As Range
Dim rngToCopy As Range

Set Fdesti = Sheets("Synthese")
Set rngDesti = Range("Destination")

'b2
If Fdesti.Range("B2").Value Like "*FA*" Then
Set Fsource = Sheets("FA")
Set rngToCopy = Range("BilanFA")
ElseIf Range("B2").Value Like "*EFA*" Then
Set Fsource = Sheets("EFA")
Set rngToCopy = Range("BilanEFA")
End If

'copie
Copi = CopieFromSheet(Fsource, Fdesti, rngToCopy, rngDesti)

End Sub

Function CopieFromSheet(ShSource As Worksheet, ShDesi As Worksheet, rngToCopy As Range, rngDesti As Range)
'Activation de la feuille
ShDesi.Activate
'Copie
ShDesi.Select
rngToCopy.Select
Selection.Copy
ShSource.Select
rngDesti.Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Function
0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
1 oct. 2014 à 09:22
j'obtiens le message "la méthode sélect de la classe range a échoué
Sur quelle ligne de code te mets il cette erreur ?
0
Julia_74 Messages postés 20 Date d'inscription mardi 30 septembre 2014 Statut Membre Dernière intervention 5 mars 2015
Modifié par Julia_74 le 1/10/2014 à 09:26
J'ai souligné la ligne de code ci_dessus :)
0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
1 oct. 2014 à 09:37
... tu sais que :
If Fdesti.Range("B2").Value Like "*FA*" Then


Sera vrai... que ton texte soit : aaFAaa ... ou aaEFAaa .... et donc que tu n'iras jamais dans le ELSIF ....
.. DOnc.. il se peut que ton code... ne se trouve pas dans la Feuille qu'il devrait ....
et forcéement;.. la plage ("BilanEFA") à Selectionner... n'existe pas ...dans la feuille : "FA"
0
Julia_74 Messages postés 20 Date d'inscription mardi 30 septembre 2014 Statut Membre Dernière intervention 5 mars 2015
19 nov. 2014 à 11:45
oublié : RÉPONSE CORRECTE , merci :)
0
Rejoignez-nous