VBA pas à pas

Bonjour au forum,

Peut-on exécuter une macro en pas à pas, en visualisant la feuille (et non le code) ?

amicalement

Claude.

Bonjour,

A ma connaissance non. La seulle possibilité, bien intéressante d'ailleurs est de cadrer au mieux la fenêtre VBA et d'utiliser la touche F8 pour faire du pas à pas.

Amicalement

Dan

Bonjour Dan et merci,

Peut-tu m'aider sur ce code qui me fait souffrir !!!

Sub transfertETsupprime()
    'On Error Resume Next
     Application.ScreenUpdating = False
     Sheets("2007").Select
            Range("top2").Select
                        If Range("top2") = "arret" Then
                            GoTo FIN
                            Exit Sub
                        End If
      Do While Range("top2").Offset(0, -44) > 0
    ''Do While Range("top2") <> "" And Range("top2").Offset(0, -44) > 0
                                'Range(ActiveCell, ActiveCell.Offset(0, -78)).Copy Destination:=Range("a1")
                                Range(ActiveCell, ActiveCell.Offset(0, -78)).Copy
                                   Range("a1").Select
                                       Selection.PasteSpecial Paste:=xlValues
                                         Range("ligne").Copy
                 Sheets("feuil1").Select
                                         Range("top").Select
                                             Selection.PasteSpecial Paste:=xlValues
                                                 Range("top").Offset(1, 0).Name = "top"
                 Sheets("2007").Select
                          Range("top2").Select
                           Range("top2").Offset(1, 0).Name = "top2"
      Loop
                Sheets("2007").Select
                        Range("top2").Offset(1, 0).Select
                          Range("top2").Offset(1, 0).Name = "top2"
Call transfertETsupprime

                        Range("2007!ca9").Name = "top2"
                        Application.CutCopyMode = False
                Sheets("feuil1").Select
                        Range("j8") = "Nbre d'heures effectuées dans le mois " & Range("2007!w6") & " (4)"
                            Range("2007!x6") = Range("2007!w6")
                                Range("a1").Select

                Sheets("feuil1").Copy After:=Worksheets(Worksheets.Count)  ''nouvel onglet
                ActiveSheet.Name = Range("2007!w6")
FIN:
Exit Sub
Exit Sub
    'On Error GoTo 0
End Sub

quelque chose ne va pas dans le Goto Fin

çà boucle après le Call

amicalement

Claude.

Bonjour,

Ben normal car avec ton instruction --> Call transfertETsupprime , tu rappelles ta SUB continuellement. Regarde le titre de ta macro...

Ensuite :

If Range("top2") = "arret" Then 
GoTo FIN 
Exit Sub 
End If 

essaye :

If Range("top2") = "arret" Then Exit Sub

Le FIN et les deux instruction Exit sub ne servent pas il me semble.

A te relire

Dan

re,

non çà marche pas, j'ai trouvé une combine (peu élégante)," Goto boukle"

çà fonctionne, mais maintenant j'ai un autre problème expliqué sur le fichier joint.

https://www.excel-pratique.com/~files/doc/TABLEAU_DE_BORD_4.xls

merci de ton aide

Claude.

re,

j'oubliais ... Bien ta ficelle, pour voir le pas-à-pas.

Claude.

re,

Je viens de regarder ton fichier.

Si je comprends bien tu recopies les données de la feuille 2007 vers la feuille "modèle" s'il y a une date dans la cellule CA x ?

Autre chose, il me semble qu'il ya plein de données confidentielles là. Ne serait ce pas mieux que enlève ce fichier et mettre un avec des données bidons.

Je ne sais si c'est ton fichier mais je ne serais pas content de voir mes données 'tel et autre) personnelles sur un forum. d'autant que cela a l'air de venir du domaine médical.

A te relire

Dan

re,

oui, on recopie certaines valeurs de la feuille 2007 dans la feuille modèle si la colonne "Ai"

est > 0. les valeurs en "Ai" changent suivant le mois choisi, ensuite on copie la feuille

modele et on la renomme au nom du mois choisi.

Pour la confidentialité, je présume que c'est des infos bidons (regarde les noms !)

Le fichier n'est pas de moi, j'essaye d'aider Martine.

Mais tout çà ne résout pas le problème de contrôle, <si nom d'onglet existe déjà, erreur,message et suppression onglet doublon ???

à te lire

Claude.

re,

S'il n'y pas de date en colonne CA (top2) et que tu as une valeur en colonne AI, tu copies la ligne ou pas.

A te relire

Dan

re,

au début, Martine voulait les colonnes Ca et Ai <>"" à copier.

maintenant elle ignore le contenu de CA, seules les cellules colonne Ai >0 sont prises en

compte.

merci Dan de nous aider

Claude.

re,

Essaye ce code :

Sub transfertETsupprime()
' Macro par Dan pour Dubois - Martine le 13/02/08 - Excel pratique
Dim lig As Integer
Dim cel as range
Dim ws as string
Application.ScreenUpdating = False
lig = 10
ws = Sheets("2007").Name
Sheets(ws).Select
    For Each cel In Range("AI9", Range("AI65536").End(xlUp))
     With Sheets("modele")
        .Cells(lig, 1) = Sheets(ws).Cells(cel.Row, 1)
        .Cells(lig, 2) = Sheets(ws).Cells(cel.Row, 2)
        .Cells(lig, 3) = Sheets(ws).Cells(cel.Row, 5)
        .Cells(lig, 4) = Sheets(ws).Cells(cel.Row, 15) & "-" & Sheets(ws).Cells(cel.Row, 16) & "-" & Sheets(ws).Cells(cel.Row, 17)
        .Cells(lig, 5) = Sheets(ws).Cells(cel.Row, 14)
        .Cells(lig, 6) = Sheets(ws).Cells(cel.Row, 6)
        .Cells(lig, 7) = Sheets(ws).Cells(cel.Row, 18)
        .Cells(lig, 8) = Sheets(ws).Cells(cel.Row, 19)
        .Cells(lig, 9) = Sheets(ws).Cells(cel.Row, 20)
                .Cells(lig, 10) = Sheets(ws).Cells(cel.Row, 35)
        .Cells(lig, 11) = Sheets(ws).Cells(cel.Row, 38)
        .Cells(lig, 12) = Sheets(ws).Cells(cel.Row, 39)
        .Cells(lig, 13) = Sheets(ws).Cells(cel.Row, 61)
        .Cells(lig, 14) = Sheets(ws).Cells(cel.Row, 62)
        .Cells(lig, 15) = Sheets(ws).Cells(cel.Row, 65)
        .Cells(lig, 16) = Sheets(ws).Cells(cel.Row, 39)
        .Cells(lig, 17) = Sheets(ws).Cells(cel.Row, 79)
End With
lig = lig + 1
Next
Sheets("modele").Copy After:=Worksheets(Worksheets.Count)  ''nouvel onglet
ActiveSheet.Name = Range("2007!w6")
Call purge
Sheets("2007").Select
End Sub
Sub purge()
Sheets("modele").Select
Range("A10", Range("R65536")).ClearContents
End Sub

Amicalement

Dan

re,

Je crois qu'on sait mal compris, je me suis sans doute mal expliqué !

dans ton code, il n'y a pas de condition,çà prend tout, meme les vide en ai .

de plus le problème du contrôle n'est pas réglé !

si par erreur on tape 2 fois le même mois, ça génère une erreur puisque l'on ne peut pas

nommer 2 onglets avec le même nom. ( c'est çà mon problème)

Sinon je note ton autre façon de faire pour récupérer des cellules dans un autre onglet.

Ne pourrait-on pas en début de macro tester s'il existe déjà un onglet nommé au choix

du mois ?

amicalement

Claude.

re,

Désolé j'avais supprimé cela pendant mes tests.

Juste après For Each cel In Range("AI9", Range("AI65536").End(xlUp)) mets If cel.Value > 0 Then

juste après lig = lig + 1 mets End If

Pour le mois, en début de macro on pourrait dire que si le mois est déjà dans le fichier, on le signale et on sort de la macro.

Autre solution, est ce dire que l'on va supprimer la feuille et la refaire complètement

A te relire

Dan

re,

pour le If c'est bon.

reste le code en début de macro pour sortir si mois existe déjà.

sinon j'ai trouvé une solution bâtarde : quand je choisi un mois,je le supprime de la liste

déroulante .

Sub supprimeMois()
            Range("ce9").Select  ''''liste déroulante
         Do While ActiveCell <> Range("w6")
                ActiveCell.Offset(1, 0).Select
         Loop
            Selection.Delete Shift:=xlUp
End Sub

mais je préférerais la macro en tête !

Bon on verras çà demain

amicalement

Claude.

Salut le forum

Plusieurs facon de faire

Function FeuilleExiste(wk As Workbook, stFeuille) As Boolean
 On Error Resume Next
 FeuilleExiste = Not (wk.Sheets(stFeuille) Is Nothing)
End Function

Sub MonTestDelaFonctionExiste()
  If FeuilleExiste(ThisWorkbook, "feuil1") Then
    MsgBox "la feuille existe"
   Else
    MsgBox "N'existe pas "
  End If
End Sub
'fonction qui permet de tester si une feuille existe

Function FeuilleExiste(Nom$­) As Boolean 'Ti
  On Error Resume Next
  FeuilleExiste = Sheets(Nom).Name <> ""
End Function

'test feuille nommée "Feuil3"
Sub test()
  MsgBox FeuilleExiste("Feuil3")
End Sub

Mytå

Bonjour au forum,

Dan, ton code est vraiment SUPER et + simple que le mien, je l'ai donc adopté !

J'ai essayé le code test de Mytå, mais çà marche pas ! ou faut t-il le placé ?

je l'ai mis dans le module de la macro principale.

mon ThisWorkbook est vide.

Function FeuilleExiste(wk As Workbook, stFeuille) As Boolean
 On Error Resume Next
 FeuilleExiste = Not (wk.Sheets(stFeuille) Is Nothing)
End Function

Sub MonTestDelaFonctionExiste()
  If FeuilleExiste(ThisWorkbook, Range("2007!x6")) Then
    MsgBox "la feuille existe"
    Exit Sub
   Else
    MsgBox "N'existe pas "
    ''Call transfert
  End If
End Sub
Sub transfert()
' Macro par Dan pour Dubois - Martine le 13/02/08 - Excel pratique

j'ai peut-être mal écrit la ligne du If ?

Une petite mise au point et ce sera bon.

Merci Dan et Mytå

amicalement

Claude.

re,

Bon tu mets toutes les macros dans un seul module pour avoir ceci :

1. Public nom as string

2. Function FeuilleExiste(wk As Workbook, stFeuille) As Boolean --> macro de Myta

3. Macro de Myta adaptée

Sub MonTestDelaFonctionExiste()
  If FeuilleExiste(ThisWorkbook, nom) Then
    MsgBox "la feuille existe"
    Exit Sub
   Else
    ActiveSheet.Name = nom
  End If
End Sub

4. Modifie le code de ma macro comme suit :

juste entre --> Sheets("modele").Copy After:=Worksheets(Worksheets.Count) et call purge mets les deux instructions suivantes :

nom = Range("2007!w6")
Call MonTestDelaFonctionExiste

5. Sub purge()

Amicalement

Dan

Re,

voila ce que j'ai fait suivant tes instructions.

Public nom As String
Function FeuilleExiste(wk As Workbook, stFeuille) As Boolean ''--> macro de Myta
MonTestDelaFonctionExiste
End Function

Sub MonTestDelaFonctionExiste()
  If FeuilleExiste(ThisWorkbook, nom) Then
    MsgBox "la feuille existe"
    Exit Sub
   Else
    ActiveSheet.Name = nom
  End If
End Sub

çà plante au If

me serai-je planté moi aussi ?

à te lire

Claude.

re,

Pourquoi changes tu la macro Function FeuilleExiste(wk As Workbook, stFeuille) As Boolean ???

A te relire

Dan

re,

bon, j'ai modifié (rien à l'intérieur de la fonction )

çà marche pour un nouveau mois, mais si je sélectionne un mois déjà existant, çà plante

après le Else !

je me demande pourquoi ne pas mettre le contrôle avant de faire le transfert des données,

Sub transfert() '''''ta macro

par exemple : mettre en Dim nom = Range("2007!x4")

Call MonTestDelaFonctionExiste

si le test est bon, la macro se lance,sinon message et exit Sub

car actuellement le contrôle se fait après que l'onglet est crée

mais là çà me dépasse !

Claude.

Rechercher des sujets similaires à "vba pas"