Copie cellule sur feuille en fonction valeur sur ligne [Résolu]

Messages postés
94
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
3 avril 2011
- - Dernière réponse : Jacky1002
Messages postés
94
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
3 avril 2011
- 11 mai 2010 à 09:12
bonjour,

je suis confronter à un pb
je veu copier certaines valeurs d'une ligne vers une feuille ou une autre en fonction de la valeur d'une cellule de la ligne

par exemple :

si sur la feuil1, en B12 jai la valeur XXX je veu copier les cellule A12 D12 et E12 respectivement dans les cases A1 A2 A3 de la feuil2. en revanche si en B12 feuil1 j'ai ZZZ alors je veu les copier dans les meme cellule mais de la feuil3.
(bien évidemment on se fiche des valeurs de A12 D12 et E12. Seul la valeur de B12 importe)

on m'a deja donné un code pour copier uniquement B12 :
(dans le code ce nest pas B12 que lon copie mais cest pour le principe)

Public Function Trier_Donnees()
Dim Str As String

Sheets("Feuil1").Select
Range("A1").Select

Str = ActiveCell.Value
If Str = "" Then
Str = "0"
End If

If Str = "12" Then
Sheets("Feuil2").Select
Range("C1").Select
ActiveCell.FormulaR1C1 = Str
End If

If Str = "15" Then
Sheets("Feuil3").Select
Range("B1").Select
ActiveCell.FormulaR1C1 = Str
End If

End Function

Please Help
Merci de vos réponses
Jacky
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
8
3
Merci
Avec ce qui suit tout les typse de références sont possibles.

Au fait cela correspond à quoi les valeurs 12 et 15 ?


Public Function Trier_Donnees()
    Dim Str As String, MaFeuille As Worksheet
    
    Str = Sheets("Feuil1").Range("B12").Value
    
    Select Case Str
        Case "" 'Si B12 est vide
            Exit Function 'pas la peine d'aller plus loin
        Case "12"
            Set MaFeuille = Sheets("Feuil2")
        Case "15"
            Set MaFeuille = Sheets("Feuil3")
    End Select
    With MaFeuille
        'la method qui suit permet de transférer les données d'une plage non contiguë sur une plage 
        '  contiguë ainsi que de les tranposer.
        Sheets("Feuil1").Range("A12,D12:E12").Copy
        .Range("A1:A3").PasteSpecial xlPasteValues, , , True
    End With
End Function


A+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de bigfish_le vrai
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
8
0
Merci
Le code que l'on t'a donné n'est vraiment pas terrible !
Voici une version améliorée:

Public Function Trier_Donnees()
    Dim Str As Integer
    
    If IsNumeric(Sheets("Feuil1").Range("B12").Value) = True Then
        Str = CInt(Sheets("Feuil1").Range("B12").Value)
    Else
       MsgBox "La valeur en B12 Doit être une valeur Numerique !", vbExclamation
       Exit Function
    End If
    
    If Str = 0 Then Exit Function
    
    If CIntStr = 12 Then
       Sheets("Feuil2").Range("C1").Value = Str
    End If
    
    If Str = "15" Then
       Sheets("Feuil3").Range("B1").Value = Str
    End If
End Function


Note qu'en VBA la Méthode "Select" ne sert pratiquement à rien... elle est surtout source de lenteur d'erreur et d'épilepsie
Maintenant la réponse à ton problème:

Public Function Trier_Donnees()
    Dim Str As Integer, MaFeuille As Worksheet
    
    'si la valeur en B12 peut être interprétée comme une valeur numérique
    If IsNumeric(Sheets("Feuil1").Range("B12").Value) = True Then
        Str = CInt(Sheets("Feuil1").Range("B12").Value)
    Else
       MsgBox "La valeur en B12 Doit être une valeur Numerique !", vbExclamation
       Exit Function
    End If
    
    Select Case Str
        Case 0 'Si B12 est vide la conversion CINT() donnera la valeur 0 à la variable Str
            Exit Function 'pas la peine d'aller plus loin
        Case 12
            Set MaFeuille = Sheets("Feuil2")
        Case 15
            Set MaFeuille = Sheets("Feuil3")
    End Select
    With MaFeuille
        'la method qui suit permet de transférer les données d'une plage non contiguë sur une plage 
        '  contiguë ainsi que de les tranposer.
        Sheets("Feuil1").Range("A12,D12:E12").Copy
        .Range("A1:A3").PasteSpecial xlPasteValues, , , True
    End With
End Function



A+
Commenter la réponse de bigfish_le vrai
Messages postés
94
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
3 avril 2011
0
Merci
merci beaucoup de ta réponse big fish

petit problème persistant :
ma valeur en B12 (pour l'exemple) n'est pas une valeur numérique mais du texte.

du coup quand je veux changer dans le programme les :"case 12" et "case 15" le débogueur plante sur la ligne : " .Range("A1:A3").PasteSpecial xlPasteValues, , , True" dernière ligne avant "end with"

y aurait-il une solution ou alors peut tu m'aider (oui encre ...^^)

en fait je veu faire un "éditeur de bon de commande" ma valeur en B12 serait le nom du fournisseur et les feuil2 et feuil3 seraient des bon de commande type (1 par fournisseur).

serait-il possible d'affecter un numéro de fournisseur automatiquement avec les fournisseur actuels. je m'explique quand je saisi le nom d'un fournisseur (par exemple en C12) son numéro s'afficherait automatiquement en B12. Mais il faudrait je pense une feuille qui répertorie les différents fournisseur avec leur numéro respectif (par exemple une feuille nommée "Fournisseur") mais il faudrait que l'on puisse ajouter des fournisseurs (je crée ce tableur mais à l'avenir ce n'est pas moi qui vais l'utiliser donc je voudrais que ce soit simple à utiliser).

d'avance merci
Jacky
Commenter la réponse de Jacky1002
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
8
0
Merci
Avant de répondre à la 2ieme question, donne un exemple de code fournisseur réaliste à defaut d'être réel

A+
Commenter la réponse de bigfish_le vrai
Messages postés
94
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
3 avril 2011
0
Merci
je sais pas cest un codage que je vais mettre en place
etant donné que le texte n'est pas prix en compte je pense faire qqch en numérique à 2 ou 3 chiffre 3 je pense pour avoir de la marge

en gros ca donnera 001 002 003 ou bien si cest possible en alphanumérique F001 F002 F003....

@tte
Commenter la réponse de Jacky1002
Messages postés
94
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
3 avril 2011
0
Merci
bon, cette fois ci ca marche avec de l'alphabétic mais ca ne copie plus dans les bonnes feuilles ca copie tout dans la "feuil1" une idée????

j'ai trifouiller en inversant des lignes mais ca plante ou ca ne change rien.

Les valeur 12 et 15 sont juste des valeurs pour l'exemple ca n'a rien de pertinent à tel point que qd je le teste j'utilise les valeur "test1" et "test2".

vois si tu peux faire qqch je ne suis pas assez callé pour ça :$
@+
Commenter la réponse de Jacky1002
Messages postés
94
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
3 avril 2011
0
Merci
En fait si :D

voilà ce que ca donne j'ai changé la fin supprimé le with et changer le .Range("A3:....) en MaFeuille.Range..... la ligne qui commencer par .range me paraissait bizarre mais bon ....

Sub Trier_Donnees()
Dim Str As String, MaFeuille As Worksheet
Str = Sheets("Feuil1").Range("B12").Value
Select Case Str
Case ""
Exit Sub
Case "test"
Set MaFeuille = Sheets("Feuil2")
Case "test1"
Set MaFeuille = Sheets("Feuil3")
End Select
Sheets("Feuil1").Range("A12,D12,E12").Copy
MaFeuille.Range("A1:A3").PasteSpecial xlPasteValues, , , True
End Sub



@tanto pour de nouvelle aventure
Jacky
Commenter la réponse de Jacky1002