vba > activesheet qui va sur une autre sheet !!!

clichy

XLDnaute Junior
bonsoir à tous,

j'ai un problème de macro sur un fichier de gestion de planning dont je suis assez fier. il fonctionne bien à 99,5%

en effet, une des actions du fichier permet de créer un élément qui n'est pas dans la liste présélectionnée. jusque là, pas de problème.
cependant la donnée que je veux inscrire dans le mois de janvier (par exemple) se met d'office dans le mois de décembre alors que je n'utilise que des notions de activesheet etc... j'ai beau lire et relire ma macro, je ne voit pas ou le bas blesse.

je sollicite donc votre aide à ce sujet.

ce qui se passe c'est que je ne peux mettre ce fichier ici, il a grossi et fait 6mo et que tout est tellement imbriqué que je ne peux extraire sans faillir un onglet ou autre.
pour ceux qui voudrait m'aider malgré cette démarche de recevoir par mail direct via wetransfert, le fichier, je vous serez très très reconnaissant

merci d'avance
 

clichy

XLDnaute Junior
Re : vba > activesheet qui va sur une autre sheet !!!

en effet

essayons

il s'agit de userfom qui s'ouvre dans un autre etc... mais voici le code du bouton valide

Code:
Private Sub BTN_VALID_Click()

ActiveSheet.Unprotect

'Dim x
'x = Time            ' je vaux savoir le temps d'execution de la macro

'je m'affranchi des erreurs
On Error GoTo ErrorHandler
    
Application.ScreenUpdating = False 'Masquer les action à l'écran et accélère le code

Application.Calculation = xlManual  ' je passe en calcul manuel pour gain de temps

 
'-------------------
    
    Dim val_select As Boolean    ' je crée une variable pour voir si j'ai une selection dans ma listbox
    Dim nb_select, i As Integer  ' je crée une variable qui va stocker le nb de selec dans la listbox
    
    val_select = False           ' je mets la select à 0
    nb_select = Me.LST_RECH.ListCount
    
    
    Call VISITE                 ' j'appelle la valeur de la selec type de journée
    Call Binome


'1
If ActiveCell = "" Then         'je verifie que le cellule est vide
 
'-------------
    'on va vérfier si la txt box avec un nom créé car un mag n'existe pas est vide, si vide > on continue
'2
ActiveSheet.Select
    If Txt_us1_NewMag.Value = "" Then
        
        
VALIDE1:
        '-------------
        'Vérifie si un élément est sélectionné
        'le 1er item (élément) est indexé à zéro, raison pour laquelle la boucle for démarre à zéro
        For i = 0 To nb_select - 1
'3
        If Me.LST_RECH.Selected(i) = True Then
                    val_select = True
                    Exit For
'3
        End If
        Next
        '-------------
         ' si aucun item n'a été sélectionné, il est inutile d'aller plus loin !
'4
            If val_select = False Then
        ActiveCell.Value = VISITE & " - " & Binome
'4
            Else
                    
                            Dim val_mag1 As String              'je nomme la 1°colonne
                            LST_RECH.BoundColumn = 2
                            val_mag1 = LST_RECH.Value
                            Dim val_mag2 As String              'je nomme la 2°colonne
                            LST_RECH.BoundColumn = 4
                            val_mag2 = LST_RECH.Value
                            'Dim binome As String                ' je détermine si le cpv est en binome
                            'If CHX_BINOMECPV.Value = True Then binome = " - bi²"
                            
                            
                ActiveCell.Value = val_mag1 & " - " & val_mag2 & " - " & VISITE & " - " & Binome
'4
            End If
'2
    Else 'si txtbbox de mag créé non vide alors
            ActiveSheet.Select
            ActiveCell.Value = Txt_us1_NewMag.Value & " - " & VISITE & " - " & Binome
'2
    End If
'1
Else
'5
                If MsgBox("Attention, vous allez effacer les données de la cellule", vbYesNo + vbExclamation, _
                                            "Demande de confirmation") = vbYes Then
                    GoTo VALIDE1
'5
                End If

'1
End If

ActiveSheet.Protect                         ' je protege la feuille pour eviter les marques manuelles
Application.Calculation = xlAutomatic       ' je remets le calcul auto
ActiveCell.Offset(0, 1).Select              ' je me positionne sur la cellule à côté de celle sélectionnée
   
Sheets("data mag").Visible = False
  
Unload Me
'MsgBox ("temps macro = " & Format(Time - x, "hh:mm:ss"))
Exit Sub

ErrorHandler:

Unload Me

MsgBox "Une erreur a empêché le bon fonctionnement de cette application", vbCritical, "Annulation"
ActiveSheet.Protect                         ' je protege la feuille pour eviter les marques manuelles
Application.Calculation = xlAutomatic       ' je remets le calcul auto
ActiveCell.Offset(0, 1).Select              ' je me positionne sur la cellule à côté de celle sélectionnée

End Sub
je vous remercie
 

Paf

XLDnaute Barbatruc
Re : vba > activesheet qui va sur une autre sheet !!!

Re

Pas évident !

à part si dans les appels

Call VISITE
Call Binome


un changement de feuille intervient.


Plutôt que d'utiliser ActiveSheet..., utilisez Worksheets("NomdelaFeuille") etWorksheets("NomdelaFeuille").range("A12") plutôt que ActiveCell.

C'est plus clair à la lecture du code et pas de risque de mélange...

Par ailleurs ActiveSheet.Select ne sert à rien. Puisque c'est la feuille active, pas besoin de la sélectionner.

Désolé

Bonne suite
 

clichy

XLDnaute Junior
Re : vba > activesheet qui va sur une autre sheet !!!

merci

activesheet.select c'etait pour ma recherche de solution, en effet, ca sert a rien
je peux effectivement essayer de mettre sheets("nom de la feuille") par contre pour activecell, on peut cliquer partout et c'est, je pense, compliqué de lui donner un nom

merci pour la réponse et pour prendre le temps de regarder
 

clichy

XLDnaute Junior
Re : vba > activesheet qui va sur une autre sheet !!!

lo

problème semble t il résolu

merci à "camarchepas" qui a pris le temps de se pencher sur mon problème
merci à paf qui a mis dans le mille avec son "idée"

en effet il me fallait revenir sur le bon onglet apres avoir ouvert les différents userform, juste avant d'ecrire le résultat dans le bon onglet

voici le code corrigé:
Code:
Private Sub BTN_VALID_Click()


[COLOR=#ff0000]'je donne un nom à l'onglet ou je suis
Dim ActS As String
ActS = lbl_Sheet.Caption[/COLOR]

Sheets(ActS).Unprotect
'Dim x
'x = Time            ' je vaux savoir le temps d'execution de la macro

'je m'affranchi des erreurs
On Error GoTo ErrorHandler
    
Application.ScreenUpdating = False 'Masquer les action à l'écran et accélère le code

Application.Calculation = xlManual  ' je passe en calcul manuel pour gain de temps

 
'-------------------
    
    Dim val_select As Boolean    ' je crée une variable pour voir si j'ai une selection dans ma listbox
    Dim nb_select, i As Integer  ' je crée une variable qui va stocker le nb de selec dans la listbox
    
    val_select = False           ' je mets la select à 0
    nb_select = Me.LST_RECH.ListCount
    
    
    Call VISITE                 ' j'appelle la valeur de la selec type de journée
    Call Binome


'1
If ActiveCell = "" Then         'je verifie que le cellule est vide
 
'-------------
    'on va vérfier si la txt box avec un nom créé car un mag n'existe pas est vide, si vide > on continue
'2
    If Txt_us1_NewMag.Value = "" Then
       [COLOR=#ff0000]Sheets(ActS).Select[/COLOR]
        
VALIDE1:
        '-------------
        'Vérifie si un élément est sélectionné
        'le 1er item (élément) est indexé à zéro, raison pour laquelle la boucle for démarre à zéro
        For i = 0 To nb_select - 1
'3
        If Me.LST_RECH.Selected(i) = True Then
                    val_select = True
                    Exit For
'3
        End If
        Next
        '-------------
         ' si aucun item n'a été sélectionné, il est inutile d'aller plus loin !
'4
            If val_select = False Then
             [COLOR=#ff0000]Sheets(ActS).Select[/COLOR]
        ActiveCell.Value = VISITE & " - " & Binome
'4
            Else
                    
                            Dim val_mag1 As String              'je nomme la 1°colonne
                            LST_RECH.BoundColumn = 2
                            val_mag1 = LST_RECH.Value
                            Dim val_mag2 As String              'je nomme la 2°colonne
                            LST_RECH.BoundColumn = 4
                            val_mag2 = LST_RECH.Value
                            'Dim binome As String                ' je détermine si le cpv est en binome
                            'If CHX_BINOMECPV.Value = True Then binome = " - bi²"
                            
                [COLOR=#ff0000]Sheets(ActS).Select[/COLOR]
                ActiveCell.Value = val_mag1 & " - " & val_mag2 & " - " & VISITE & " - " & Binome
'4
            End If
'2
    Else 'si txtbbox de mag créé non vide alors
             [COLOR=#ff0000]Sheets(ActS).Select[/COLOR]
            ActiveCell.Value = Txt_us1_NewMag.Value & " - " & VISITE & " - " & Binome
                
'2
    End If
'1
Else
'5
                If MsgBox("Attention, vous allez effacer les données de la cellule", vbYesNo + vbExclamation, _
                                            "Demande de confirmation") = vbYes Then
                    GoTo VALIDE1
'5
                End If

'1
End If

Sheets(ActS).Protect                         ' je protege la feuille pour eviter les marques manuelles
Application.Calculation = xlAutomatic       ' je remets le calcul auto
ActiveCell.Offset(0, 1).Select              ' je me positionne sur la cellule à côté de celle sélectionnée
   
Sheets("data mag").Visible = False
  
Unload Me
'MsgBox ("temps macro = " & Format(Time - x, "hh:mm:ss"))
Exit Sub

ErrorHandler:

Unload Me

MsgBox "Une erreur a empêché le bon fonctionnement de cette application", vbCritical, "Annulation"
Sheets(ActS).Protect                         ' je protege la feuille pour eviter les marques manuelles
Application.Calculation = xlAutomatic       ' je remets le calcul auto
ActiveCell.Offset(0, 1).Select              ' je me positionne sur la cellule à côté de celle sélectionnée

End Sub

merci a tous
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 336
Messages
2 087 388
Membres
103 534
dernier inscrit
Kalamymustapha