Copie cellule sur feuille en fonction valeur sur ligne

Résolu
Jacky1002 Messages postés 94 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 3 avril 2011 - 10 mai 2010 à 09:40
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

7 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
10 mai 2010 à 12:43
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+
3
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
10 mai 2010 à 11:03
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+
0
Jacky1002 Messages postés 94 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 3 avril 2011
10 mai 2010 à 11:32
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
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
10 mai 2010 à 11:37
Avant de répondre à la 2ieme question, donne un exemple de code fournisseur réaliste à defaut d'être réel

A+
0

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

Posez votre question
Jacky1002 Messages postés 94 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 3 avril 2011
10 mai 2010 à 11:58
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
0
Jacky1002 Messages postés 94 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 3 avril 2011
10 mai 2010 à 17:50
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 :$
@+
0
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
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
0
Rejoignez-nous