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
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
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
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).
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....
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 :$
@+
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