Macro range après sélect case

stefan373

XLDnaute Occasionnel
Bonjour le forum,

Voilà je voudrais envoyer par xlup end, dans la feuille1 la valeur du textebox1, mais dans la colonne qui sera inscrite dans le textbox2.
J'ai fait plusieurs tentatives, mais je ne trouve pas mon erreur. :confused:

A+ Stéfan
 

Pièces jointes

  • test_range.zip
    11.8 KB · Affichages: 19

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro range après sélect case

Bonjour le fil, bonjour le forum,

J'ai supprimé la macro Sauvegarder et je te propose ce code ci-dessous :
Code:
Private Sub CommandButton1_Click()
'La variable compteur servira à compter le nbre de tentatives.
Static compteur As Byte
Dim dl As Long
Dim col As Byte

'Gestion des différents prénoms du personnels
Select Case TextBox1.Value
    Case "stefan"
        compteur = 0
        col = 1
        '.Range("B65536").End(xlUp).Offset(1, 0) = Val(UserForm4.TextBox5)    'option Val tranforme du text en nombre
        '.Range("C65536" & num).End(xlUp).Offset(1, 0) = CDate(UserForm4.TextBox3)   'cdate & num transforme en nombre date
    Case "virginie"
        compteur = 0
        col = 2
    Case Else
        MsgBox "inconnu"
        compteur = compteur + 1
        TextBox1.Value = ""
        TextBox1.SetFocus
        If compteur = 2 Then
            MsgBox "Dernière tentative"
        End If
        'Si c'est la 3e fois que l'utilisateur entre un nom incorrect,le programme prend fin
        If compteur = 3 Then
            Unload Me
            'ActiveWorkbook.Save
            'ActiveWorkbook.Close
        End If
End Select
TextBox2.Value = col
With Sheets("Feuil1")
    On Error Resume Next
    dl = IIf(.Cells(1, col).Value = "", 1, .Cells(Application.Rows.Count, col).End(xlUp).Row + 1)
    If Err <> 0 Then Err = 0
    .Cells(dl, col).Value = Me.TextBox1.Value
    On Error GoTo 0
End With
End Sub
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Macro range après sélect case

Bonjour stefan373,

Je ne suis pas certain d'avoir tout compris. Un essai dans le fichier joint. Le code est dans le module de code du UserForm1.

On a utilisé une routine nommée Inscrire(Quoi, VersCol) pour inscrire la valeur sur la feuille Feuil1
avec Quoi = la valeur à inscrire et VersCol = la colonne de destination. La colonne peut être indiquée comme un nombre ou comme un string (Pour désigner la colonne AA, on peut utiliser VersCol=27 ou bien VersCol="AA")

Le code:
VB:
Private Sub CommandButton1_Click()
'La variable compteur servira à compter le nbre de tentatives.
Static compteur As Byte
'Gestion des différents prénoms du personnels
  Select Case TextBox1.Value
    Case "stefan"
      compteur = 0
      Inscrire TextBox1, TextBox2
    Case "virginie"
      compteur = 0
      Inscrire TextBox1, TextBox2
    Case Else
      MsgBox "inconnu"
      compteur = compteur + 1
      TextBox1.Value = ""
      TextBox1.SetFocus
      If compteur = 2 Then
        MsgBox "Dernière tentative"
      End If
      'Si c'est la 3e fois que l'utilisateur entre un nom incorrect,
      'le programme prend fin
      If compteur = 3 Then
        Unload Me
        'ActiveWorkbook.Save
        'ActiveWorkbook.Close
      End If
  End Select

End Sub

Private Sub Inscrire(Quoi, VersCol)
Dim Ligne

On Error GoTo Inscrire_Err_01
With Sheets("Feuil1")
  If IsNumeric(VersCol) Then
    Ligne = .Cells(.Rows.Count, VersCol).End(xlUp).Row
    If .Cells(Ligne, VersCol) <> "" Then Ligne = Ligne + 1
    .Cells(Ligne, VersCol) = Quoi
  Else
    Ligne = .Range(VersCol & .Rows.Count).End(xlUp).Row
    If .Range(VersCol & Ligne) <> "" Then Ligne = Ligne + 1
    .Range(VersCol & Ligne) = Quoi
  End If
  Exit Sub
End With
    
Inscrire_Err_01:
    MsgBox "Erreur: """ & VersCol & """ n'est sans doute pas une référence de colonne valide"
End Sub

Edit: Bonjour Robert (téléscopage :eek:), Softmama :)
 

Pièces jointes

  • Macro range après sélect case v1.xls
    55 KB · Affichages: 29
Dernière édition:

stefan373

XLDnaute Occasionnel
Re : Macro range après sélect case

Bonjour à tous,

Softmama, effectivement la déclaration de ma variable n'était pas bonne, mais cela est dû au fait de mes différentes tentatives pour trouver une solution. :eek: Merci pour votre réponse.

Robert et mapomme, vos deux codes fonctionnent et reflètent bien ce que je voulais faire c.a.d éviter de répéter le même code pour une vingtaine de personnes. :)

Mais je garderai la solution de Robert, car cela me permet de supprimer le textbox2. :)

Petite question Robert pourriez-vous m'expliquer cette ligne car je ne comprend pas tout. :confused: Merci.

Code:
dl = IIf(.Cells(1, col).Value = "", 1, .Cells(Application.Rows.Count, col).End(xlUp).Row + 1)

Merci à vous tous. :)

A+ Stéfan
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro range après sélect case

Bonjour le fil, bonjour le forum,

C'est une manière abrégée d'écrire :
Code:
If .Cells(1, Col).Value = "" Then
     dl = 1
Else
     dl = .Cells(Application.Rows.Count, col).End(xlUp).Row + 1
Endif
IIf correspond un peu à la condition de la fonction SI. Soit IIf(Condition, action si condition vrai, action si condition fause).
ici la condition est : la valeur de la cellule en ligne 1, colonne col est vide
si la condition est vrai dl = 1
si la condition n'est pas vrai dl est la prèmière ligne vide de la colonne col.
j'aurais pu écrire :
Code:
dl = .Cells(Application.Rows.Count, col).End(xlUp).Row + 1
la seule diférence est que dans ce cas la ligne 1 reste toujours inutilisée...
 

Discussions similaires

Réponses
9
Affichages
357

Statistiques des forums

Discussions
312 527
Messages
2 089 355
Membres
104 136
dernier inscrit
redzzo