Problème de positionnement dans une macro

Michou9

XLDnaute Occasionnel
Bonjour le Forum

J'ai une macro qui me permet de rentrer une date à partir d'un UserForm avec un calendrier
Cette macro fonctionne très bien, mais j'ai un problème de positionnement

Je veux que cette macro rentre donc la date dans la colonne B sur la ligne active
Puis fasse d'autres entrées de texte sur la même ligne dans des colonnes precises

Voir mon tableau ci-joint

Si je lance la macro avec cette UserForm toute seule, la date s'inscrira bien sur la cellule active
Mais si je lance ma macro (Ctrl D), plus rien ne va !

Merci pour votre aide

A+
 

Pièces jointes

  • Saisie d'une date avec un calendrier.xlsm
    17.8 KB · Affichages: 49

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème de positionnement dans une macro

Bonjour Michou, bonjour le forum,

Comme je n'ai pas le contrôle Calendrier sur ma machine je ne peux pas tester mais tu devrais avoir quelque chose du type :
Code:
Cells(ActiveCell.Row, 3).Value = Date
Cells(ActiveCell.Row, 5).Value = Date1
Cells(ActiveCell.Row, 7).Value = Date2
 

Michou9

XLDnaute Occasionnel
Re : Problème de positionnement dans une macro

Bonjour Robert et merci

Malheureusement ce n'est pas cela
Évidement si tu n'a pas pu essayer mon fichier
Cela me parait difficile de pouvoir m'aider

Mais je ne comprends pas, je n'ai pas installer de contrôle supplémentaire sur mon micro
et ce calendrier fonctionne très bien chez moi ??

A+
 

Si...

XLDnaute Barbatruc
Re : Problème de positionnement dans une macro

salut

pour info : Calendar n'est pas disponible avec 2010 (j'ai testé en le remplaçant par le contrôle MonthView que j'ai installé).
[bon pour le grand bétisier]*
Les problèmes avec la proposition de Robert peuvent venir de ce que la cellule active n'est pas en colonne C,
[/:eek:]

Dans ce cas voir
Code:
Private Sub UserForm_Initialize()
   If ActiveCell.Column <> 3 Then End
   If ActiveCell <> "" Then Calendar.Value = IIf(ActiveCell = "", Date, ActiveCell)
End Sub
Private Sub Calendar_Click()
 ActiveCell = Calendar
 ActiveCell(1, 3) = "Data1"
 ActiveCell(1, 5) = "Data2"
 Unload Me
End Sub
ou d'ailleurs, mais il faudrait plus d'explications.

* ce serait bien si on pouvait disposer, dans le formatage du texte, de la possibilité de barrer !
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème de positionnement dans une macro

Bonjour Michou, bonjour le forum,

je n'ai certes pas le contrôle sur ma machine mais je sais lire les codes ! Et voilà ce que tu écris :

Code:
Sub Date_Jour()
' Insertion de la date du jour
UserForm5.Show
Cancel = True
ActiveCell.Offset(0, 3).Range("A1").Select
ActiveCell.FormulaR1C1 = "Data1"
ActiveCell.Offset(0, 5).Range("A1").Select
ActiveCell.FormulaR1C1 = "Data2"
ActiveCell.Offset(0, 7).Range("A1").Select
End Sub
Ça ouvre l'UserForm5, Cancel = True ne sert à rien je ne sais pas pourquoi tu as cette ligne ?
Code:
ActiveCell.Offset(0, 3).Range("A1").Select
ActiveCell.FormulaR1C1 = "Data1"
peut s'écrire tout simplement :
Code:
ActiveCell.Offset(0,3).Value = "Data1"
Il faut toujours éviter les Select inutiles qui ne font que ralentir l'exécution du code...

Comme toi tu veux la troisième colonne de la cellule active il faut, comme je te le proposais :
Code:
Cells(ActiveCell.row, 3).Value = "Data1"
ce qui signifie la cellule en ligne (ligne de la cellule active et colonne 3.

Ensuite, je ne comprend pas pourquoi tu n'écris pas tout dans le Click du calendrier :

Code:
Private Sub Calendar1_Click()
Cells(ActiveCell.Row, 3).Value = Me.Calendar1.Value
Cells(ActiveCell.row, 5).Value = "Data1"
Cells(ActiveCell.row, 7).Value = "Data2"
Unload Me
End Sub

ce qui donnerait au final :
Code:
Sub Date_Jour()
' Insertion de la date du jour
UserForm5.Show
End Sub

Code:
Private Sub Calendar1_Click()
Cells(ActiveCell.Row, 3).Value = Me.Calendar1.Value
Cells(ActiveCell.row, 5).Value = "Data1"
Cells(ActiveCell.row, 7).Value = "Data2"
Unload Me
End Sub
 

Michou9

XLDnaute Occasionnel
Re : Problème de positionnement dans une macro

Bonjour Si, Rebonjour Robert

Si :
Merci pour ton aide, je réponds à Robert et j’essaye ton code ensuite

Robert :
Ça ouvre l'UserForm5, Cancel = True ne sert à rien je ne sais pas pourquoi tu as cette ligne ?
C'est vrai, je l'avais constaté, mais cette macro n'est pas de moi, alors je l'ai laissé en me demandant bien pourquoi ce code était là ??

Une précision importante, je veux à la fin de cette macro me retrouver en colonne F
Exemple, si je suis sur ligne 13, je veux la macro terminée, que mon pointeur soit sur F13

Ton code fonctionne, j'étais arrivé à peu près à la même chose, mais de façon plus désordonné
Mais cela ne me convient pas de traiter la suite de ces opérations à l'intérieur de l'UserForm

Pour la raison principale :
Je veux faire plusieurs macro en me servant de ce même Userform, mais avec des données différentes et des placements différents


A+
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème de positionnement dans une macro

Bonjour le fil, bonjour le forum,

Attention ! Tu dis, je suis ton code mais est-ce que tu as aussi supprimé ces lignes de ton codes :
Code:
Cancel = True
ActiveCell.Offset(0, 3).Range("A1").Select
ActiveCell.FormulaR1C1 = "Data1"
ActiveCell.Offset(0, 5).Range("A1").Select
ActiveCell.FormulaR1C1 = "Data2"
ActiveCell.Offset(0, 7).Range("A1").Select

Ton code au complet tel que le le vois :
• Dans le composant UserForm5:
les deux codes :
Code:
Private Sub UserForm_Initialize()
If ActiveCell <> "" Then
    Me.Calendar1.Value = ActiveCell
Else
    Me.Calendar1.Value = Date
End If
End Sub
et
Code:
Private Sub Calendar1_Click()
Cells(ActiveCell.Row, 3).Value = Me.Calendar1.Value
Cells(ActiveCell.Row, 5).Value = "Data1"
Cells(ActiveCell.Row, 7).Value = "Data2"
Cells(ActiveCell.Row, 6).Select
Unload Me
End Sub

• dans le module standard Module1 :
Code:
Sub Date_Jour()
' Insertion de la date du jour
UserForm5.Show
End Sub

Comme ça, ça devrait marcher
 

Michou9

XLDnaute Occasionnel
Re : Problème de positionnement dans une macro

Re,

Oui je me suis rendu après coup de ma boulette :mad:
J'ai rectifié ma réponse, mais je vois que tu as lu cette réponse avant même ma correction

Je t'invite avant de continuer donc à relire ma réponse.

A+
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème de positionnement dans une macro

Bonjour le fil, bonjour le forum,

Dans ce cas :
• Dans le composant UserForm5:
les deux codes :
Code:
Private Sub UserForm_Initialize()
If ActiveCell <> "" Then
    Me.Calendar1.Value = ActiveCell
Else
    Me.Calendar1.Value = Date
End If
End Sub

et
Code:
Private Sub Calendar1_Click()
Cells(ActiveCell.Row, 3).Value = Me.Calendar1.Value
End Sub

• dans le module standard Module1 :
Code:
Sub Date_Jour()
' Insertion de la date du jour
UserForm5.Show
Cells(ActiveCell.Row, 5).Value = "Data1"
Cells(ActiveCell.Row, 7).Value = "Data2"
Cells(ActiveCell.Row, 6).Select
Unload Me
End Sub

 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème de positionnement dans une macro

Bonjour le fil, bonjour le forum,

Bien sûr ! Suis-je bête... On ne peut utiliser Me que si on set dans l'UserForm.
Remplace la ligne par :
Code:
Unload UserForm5
et le tour est joué...
 

Michou9

XLDnaute Occasionnel
Re : Problème de positionnement dans une macro

Re,

Non cela ne fonctionne pas, j'y avais pensé et je l'ai essayé
Mais dans ce cas, il n'y a aucune date qui s'inscrit

Par contre, je viens d'essayer de mettre Unload Me directement dans l'UserForm
et là çà l'air de coller

A+
 

Michou9

XLDnaute Occasionnel
Re : Problème de positionnement dans une macro

Re,

Oui je confirme en mettant "Unload Me" directement dans l'UserForm cela fonctionne bien

Mais il y a quelque chose qui me gêne un peu
C’est que les données s’inscrivent avant que la date soit entrée
Et si je souhaite inscrire à la suite une autre macro
Celle-ci va démarrer avant même que j’ai eu le temps de sélectionner la date.
Y a-t-il un moyen de bloquer l’avancement de la macro, tant que je n’ai pas cliqué la date dans l’UserForm

A+
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème de positionnement dans une macro

Bonsoir le fil, bonssoir le forum,

À ta place je mettrai un CommandButton / [OK] dans l'UserForm5 pour valider, et dans le code de ce bouton l'attribution de la date à la cellule :

Code:
Private Sub CommandButton1_Click()
Cells(ActiveCell.Row, 3).Value = Me.Calendar1.Value
End Sub

Car il est fort possible que l'Initialisation :
Code:
Private Sub UserForm_Initialize()
If ActiveCell <> "" Then
    Me.Calendar1.Value = ActiveCell
Else
    Me.Calendar1.Value = Date
End If
End Sub
lance automatiquement la procédure Click du Calendar1. Du coup tout s'enchaînerait avant que tu aies eu le temps de choisir une date... Malheureusement je ne peux pas tester mais jute émettre des hypothèses... Fait tourner ton code pas à pas à l'aide de la touche [F8] et regarde ce que ça dit...
 

Discussions similaires

Réponses
19
Affichages
707

Statistiques des forums

Discussions
312 502
Messages
2 089 047
Membres
104 011
dernier inscrit
dfr