Case Is =?

ntan-évindi

XLDnaute Occasionnel
Bonsoir à toutes et à tous,

Quelqu'un peut-il me dire pourquoi dans un Select Case
- Case Is = 38 fonctionne correctement
- et Case Is = "39a" fait un bug.

Merci de vos avis.

Cordialement.
Ntang.
 

Banzai64

XLDnaute Accro
Re : Case Is =?

Bonsoir
Essai chez moi
Code:
Sub test()
  Select Case Cells(1, 1)
  Case Is = "39a"
    MsgBox "coucou"
  Case Is = 38
    MsgBox "Ici"
  ' [COLOR="Red"]Case Is = 45j[/COLOR]   -----> Erreur
  Case Is = j45
  ' J45 est considéré comme une variable
  End Select
End Sub

Pas d'erreur de fonctionnement sauf celle notée
 

ntan-évindi

XLDnaute Occasionnel
Re : Case Is =?

Bonsoir,

Peut être que mon problème vient de ma déclaration de variable?
Voir un morceau du code ci-après:
Dim Quanti As Integer
Quanti = (Range("D1").Value)

Select Case Quanti
'Cas correspondant à la semaine 35
Case Is = 35
Sheets("Prepa").Select
Range("D252:D550").Select
Selection.Copy
Sheets("Tableau").Select
Range("L3:L300").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

'Cas correspondant à la partie de la semaine 39 sur la fin du mois de septembre
Case Is = "39a"
Sheets("Prepa").Select
Range("D252:D550").Select
Selection.Copy
Sheets("Tableau").Select
Range("P3:p300").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Merci d'y jeter un coup d'oeil.

Bonne soirée.
Ntang
 

Staple1600

XLDnaute Barbatruc
Re : Case Is =?

Bonsoir ntan-évindi

Pour rendre ton message plus agréable à lire peux-tu , stp utiliser les balises BBCODE suivantes:

[noparse]
VB:
Le code VBA de ta macro
[/noparse]

AVANT:
Sub Hello()
Msgbox "Bonjour"
End Sub

APRES:
VB:
Sub Hello()
Msgbox "Bonjour"
End Sub

Merci pour le confort de nos yeux ;)
 

haonv

XLDnaute Occasionnel
Re : Case Is =?

Bonjour forum ,
Je ne connais pas grand chose en VBA , mais je pense que ton probleme vient bien de la déclaration de variable.
Dim Quanti As Integer
A remplacer par
Dim Quanti As string
ou si ça ne marche toujours pas :
Dim Quanti
Ensuite :
case "39a"

Edit: Il faut aussi :
Set Quanti = Range("D1")
L'écriture de cette macro peut etre aussi simplifié.Mais désolé je dois partir.

Amicalement
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Case Is =?

Bonjour ntan-évindi, haonv, le fil, le forum


  • EDITION: voici une version "allégée" de mon cru
VB:
Sub test_2()
'Déclarations
Dim psource As Range, pdesti As Range, Quanti As Range
    With Sheets("Prepa")
        Set psource = .Range("D252:D550")
        Set Quanti = .Range("D1")
    End With
    'recopie des données selon le critère
    'renseigné dans le Switch
Set pdesti = Sheets("Tableau").Range("L3")
psource.Copy Switch(Quanti = 35, pdesti, Quanti = 39, pdesti.Offset(, 4))
End Sub


  • Voici ton code ainsi rédigé fonctionne ;)
VB:
Sub test()
Dim psource As Range, pdesti As Range

Dim Quanti As Range
Set psource = Sheets("Prepa").Range("D252:D550")
Set pdesti = Sheets("Tableau").Range("L3")
Set Quanti = Sheets("Prepa").Range("D1")

Select Case Val(Quanti.Text)
    'Cas correspondant à la semaine 35
    Case Is = 35
    psource.Copy pdesti
    'Cas correspondant à la partie de la semaine 39
    'sur la fin du mois de septembre
    Case Is = "39"
    psource.Copy pdesti.Offset(, 4)
End Select
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Case Is =?

Re


Allez avant d'aller au taf, et comme chantait Herbert

Une petite dernière pour la route ;)

VB:
Sub test_3()
Dim psource As Range, pdesti As Range
With Sheets("Prepa")
    Set psource = .[D252:D550]: Set pdesti = Sheets("Tableau").[L3]
    psource.Copy Switch(.[D1] = 35, pdesti, .[D1] = 39, pdesti.Offset(, 4))
End With
End Sub

PS: Ton bug venait du fait que 39a n'est pas un Integer
 

ntan-évindi

XLDnaute Occasionnel
Re : Case Is =?

Bonsoir à toutes et à tous,

Et merci à Staple1600 pour les codes, en particulier le dernier qui me plairai bien... si j'y comprenait quelque chose, je l'avoue humblement.

Cependant j'ai absolument besoin des valeurs 39a ou 39b et il en sera de même pour 48a et 48b (je récupère des fichiers dont certaines semaines sont limitées ex:
Site XXXXXXXXXX Export Agents du01/10/2010 au 02/10/2010 - ce qui me donnera 39b)

J'ai tout essayé Integer, String, Variant, avec ou sans guillemets, rien n'y fait et je commence à croire que je me suis lancé dans quelque chose qui dépasse mes toutes petites compétences.

Si quelqu'un a une idée à me souffler...

D'avance merci.

Pour finir, c'est promis je ne mettrai plus de code sans les balises.

Cordialement.

Ntang
 

Staple1600

XLDnaute Barbatruc
Re : Case Is =?

Bonsoir ntan-évindi, le fil, le forum

Essaye alors d'utiliser l'opérateur Like
cf. macro d'exemple ci-dessous

VB:
Sub Test_Exemple_LIKE()
Dim varI As Integer, varII As String, Mss1 As String

varI = 35:varII = "39a"

If varII Like "##?" Then
varII = Left(varII, 2) * 1
End If

Mss1 = _
    "varI= " & varI & Space(3) & "varII = " & varII & vbLf & vbLf
Mss1 = _
    Mss1 & "Test : On calcule : " & vbLf & " varII - varI = " & _
    varII - varI & vbLf

MsgBox Mss1, vbInformation, "Macro exemple"

End Sub
 
Dernière édition:

ntan-évindi

XLDnaute Occasionnel
Re : Case Is =?

Merci JM,
Je vais aller voir ce qu'est exactement l'opérateur Like et après je te dis si j'ai pu adapter ton code à mon cas dont la variable - valeur de D1 évolue de semaine en semaine de la S35 à la S52 en passant par les deux cas intermédiaires de semaines à cheval sur un deux mois.
Mais en tout état de cause un grand grand merci. Depuis quelques jours que je me suis lancé dans ce travail, je n'ai jamais autant appris sur Excel et Vba.
A +
Ntang
 

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 942
Membres
103 989
dernier inscrit
jralonso