Macro private ne fonctionne pas

nannor -  
joupir Messages postés 13 Statut Membre -
Bonjour,

Je desire faire une gestion du budget ave bien sur excel .
au début je faisais des macros avec l'enregistreur de macro. Puis je bidouillais pour améliorer raccourcir les codes . enfin rien de bien compliqué.
Les boutons de commande réalisés avec les modèles de commande de formulaire fonctionnaient parfaitement.
Puis j'ai vouloir en utilisant les macro private ce que cela donnait. Ca plante lorsque je veux transcrire une série de données du genre

range ("B1:U1").select
selection .Copy
Worksheets(mois).select
range ("B40").paste

la feuille mois est bien selectionnée mais ca ne veut pas coller les cellules.
voila si ceraians on une idées accessible à mon niveaus de developperur ce serait super.
merci pour vos réponses

9 réponses

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    La règle d'or en VBA c'est éviter autant que tu le peux les Select. Ils ne font que rallonger l'exécution du code et sont source de nombreux bugs.
    Un copier/coller se fait en une seule ligne en spécifiant les onglets respectifs, du style :
    Worksheets("Onglet Source").Range("MaPlageSource").Copy Worksheets("Onglet Destination").Range("MaPlageDestination")
    dans ton cas :
    Worksheets("??").Range("B1:U1").Copy Worksheets(mois).Range("B40")

    mois étant une variable définie au préalablement. Si tu veux désigner l'onglet "mois" il faut mettre les guillemets...
    0
  2. nannor
     
    mercci je vais voir cela ce soir et je donne résultat
    0
  3. nannor
     
    bonsoir, la modif effectuée plante lorsque je veux transcrire les données copiées sun une autre feuille du meme classeur. pourtant, lorsque l'esseur survient , c'et bien pointé sur la feuille de destination mais sans tenir compte de le ligne. Et, si j'aappuie sur la touche entrée, les données s'inscrivent bien dans l'orde.. Je me demande sije ne devraitpas reinstaller office. en gros classeur 15feuilles dont 12 pour les mois de l'année, une saisie des tickets, une pour les depenses des charges et une recapitulatif pour l'année.
    je vous joint mon code c'est un travail d'amateur, mais avec l'hiver ca fait passer le temps et travailler un peu la mémoire. Merci de votre attention.
    a noter que je n'ai as tennu a apporter la modif j'atends que le private fonctionne s'il m'est possible d'y arriver
    cordialement
    0
  4. joupir Messages postés 13 Statut Membre
     
    bonjour, j'ai oublié le code le voici
    Sub convcourses()

    'Définition des variables

    Dim jour As Integer 'formule incluse dans le feuille de caclcul ticket
    Dim nummois As Integer 'formule incluse dans le feuille de caclcul ticket
    Dim mois As String 'formule incluse dans le feuille de caclcul ticket
    Dim reponse As Byte

    ' conversion dedonnée formules en données valeurs sur la feuille 'ticket'
    Range("A35:S35").Select
    Selection.Copy
    Range("A40").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

    ' initialisation des variables
    mois = Range("T35")
    nummois = Range("V35")
    jour = Range("U35")
    jour = jour + 3 ' +3 pour faire coincider le jour avec le numéro de ligne

    'traitement des données ticket en vue de leur inscription dans le mois concerné
    Range("B40:S40").Select
    Selection.Copy
    Worksheets(mois).Select
    Range("B" & jour).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

    'Traitement des données d'un mois en vue de leur inscription sur la feuille recapitulative annuelle, suivant réponse au message
    Range("B35:S35").Select
    Selection.Copy
    Range("B40").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    reponse = MsgBox(" Enregistrer dans le bilan annuel ?", vbYesNo)

    ' si réponse est oui
    If reponse = vbYes Then
    Range("B40:S40").Select
    Selection.Copy
    Sheets("Annuel").Select
    Range("C13").Select
    ActiveSheet.Paste

    ' si la réponse est non,il sera possible de quitter excel ou de quitter le macro
    ElseIf reponse = vbNo Then
    reponse = MsgBox(" Quitter Excel ?", vbYesNo)
    If reponse = vbYes Then
    Dim w As Workbook
    For Each w In Application.Workbooks
    w.Save
    Next w
    Application.quit
    Application.DisplayAlerts = True
    ElseIf reponse = vbNo Then
    Exit Sub
    End If
    End If

    End Sub
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ThauTheme Messages postés 1564 Statut Membre 160
     
    Bonjour Nannor/Joupir, bonjour le forum,

    Peut-être comme ça :
    Sub convcourses()
    
    'Définition des variables
    Dim OT As Worksheet
    Dim OM As Worksheet
    Dim OA As Worksheet
    Dim jour As Integer 'formule incluse dans le feuille de caclcul ticket
    Dim nummois As Integer 'formule incluse dans le feuille de caclcul ticket
    Dim mois As String 'formule incluse dans le feuille de caclcul ticket
    Dim reponse1 As Integer
    Dim reponse2 As Integer
    Dim w As Workbook
    
    Set OT = Worksheets("ticket")
    Set OA = Worksheets("Annuel")
    ' conversion dedonnée formules en données valeurs sur la feuille 'ticket'
    OT.Range("A35:S35").Copy
    OT.Range("A40").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    
    ' initialisation des variables
    mois = OT.Range("T35")
    Set OM = Worksheets(mois)
    nummois = OT.Range("V35")
    jour = OT.Range("U35")
    jour = jour + 3 ' +3 pour faire coincider le jour avec le numéro de ligne
    
    'traitement des données ticket en vue de leur inscription dans le mois concerné
    OT.Range("B40:S40").Copy
    OM.Range("B" & jour).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    
    'Traitement des données d'un mois en vue de leur inscription sur la feuille recapitulative annuelle, suivant réponse au message
    OM.Range("B35:S35").Copy
    OM.Range("B40").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    reponse1 = MsgBox(" Enregistrer dans le bilan annuel ?", vbYesNo)
    ' si réponse est oui
    If reponse1 = vbYes Then
        OM.Range("B40:S40").Copy OA.Range("C13")
    ' si la réponse est non,il sera possible de quitter excel ou de quitter le macro
    ElseIf reponse1 = vbNo Then
        reponse2 = MsgBox(" Quitter Excel ?", vbYesNo)
        If reponse2 = vbYes Then
            For Each w In Application.Workbooks
                w.Save
            Next w
            Application.Quit
            Application.DisplayAlerts = True
        ElseIf reponse2 = vbNo Then
            Exit Sub
        End If
    End If
    End Sub

    0
  7. joupir Messages postés 13 Statut Membre
     
    bonjour à tous les forumeurs,

    merci a tous, Thau Theme un code super qui marche super bien . Et surtout qui confirme mon manque de connaissance en matiere de developement dans ce langage.
    Faut dire que j'ai developper en DBase 3 et Dbase 4 il y a plus de 25 ans mais plus rien à voir et puis c'est loin.
    Encore une fois merci je vais continuer, pour ajouter les charges fixes et ce sera terminé.
    Je vais devoir trouver un autre passe temps.
    Bonnes fetes de fin d'année a tous les lecteurs et lectrices.
    0
  8. joupir Messages postés 13 Statut Membre
     
    bonjour,

    une petite question a Thau Theme le code impec, par contre est il possible à chaque connection à une feuille differente la feuille de départ étant OT, elle reste visible durant le court laps de temps d'excution de la macro.
    J'aimerai si possible les visualiser. ne serait-ce que pour verifier qu'il n'y a pas eu de trucs dus à une mise a jour d'office ou windows.
    Merci par avance
    0
  9. ThauTheme Messages postés 1564 Statut Membre 160
     
    Bonjour Joupir, bonjour le forum,

    Rajoute :
    OT.Activate

    en dessous de la ligne : Set OT = Worksheets("ticket")
    0
  10. joupir Messages postés 13 Statut Membre
     
    Re bonjour
    merci , ca marche c'etait pourtant pas compliqué .

    Et à tout le forum Passez de bonnes fetes de fin d'année
    0