Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Executer une macro en boucle

steuf999

XLDnaute Nouveau
Bonjour à tous,

J'essaie de me débrouiller en VBA mais force est de constater que je bloque à plusieurs niveaux...
Je sollicite donc votre aide

J'ai réussi à écrire une macro (Sub IncremSimple) qui fonctionne parfaitement si je suis placée sur la bonne cellule dans mon tableau
Code:
Sub IncremSimple()

Dim Reponse As Integer
Dim Matricule As String
Dim LigneMatricule As Integer
Dim debutConge As Integer
Dim finConge As Integer
Dim Lig As Long



Reponse = MsgBox("Etes vous bien positionner sur le matricule du salairé concerné ?", vbQuestion + vbYesNo, "Titre de la fenêtre")

'MsgBox Reponse

Matricule = ActiveCell.Value
LigneMatricule = ActiveCell.Row
 
 'MsgBox Matricule
 
  'If Reponse = 6 Then 'SI Reponse = OUI ALORS
      
debutConge = Range("H" & LigneMatricule).Select 'copie la date de début des congés dans la fiche du salarié
       
        'MsgBox debutConge
 
        Selection.Copy
            Sheets(Matricule).Select
           
                'Recherche de la première ligne vide de la fiche salarié
                Lig = 34 'première ligne à vérifier
                Do While Not IsEmpty(Range("A" & Lig))
                Lig = Lig + 1
                Loop
                'MsgBox "La première ligne vide de la colonne est A est la ligne" & Lig
                'Selectionne la cellule ou va s'effectuer la copie
                Range("A" & Lig).Select
                        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                        :=False, Transpose:=False
                        Application.CutCopyMode = False
                        Selection.NumberFormat = "m/d/yyyy"
                                       
        
    
        Sheets("ABSENCES").Select
  
finConge = Range("I" & LigneMatricule).Select 'copie la date de fin des congés dans la fiche du salarié
                ' MsgBox finConge
   
          Selection.Copy
            Sheets(Matricule).Select
                Lig = 34 'première ligne à vérifier
                Do While Not IsEmpty(Range("B" & Lig))
                Lig = Lig + 1
                Loop
                'MsgBox "La première ligne vide de la colonne est B est la ligne" & Lig
                'Selectionne la cellule ou va s'effectuer la copie
                Range("B" & Lig).Select
                        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                        :=False, Transpose:=False
                        Application.CutCopyMode = False
                        Selection.NumberFormat = "m/d/yyyy"
                        
Sheets("ABSENCES").Select

End Sub

Je souhaiterais lancer cette Sub en boucle autant de fois qu'il y a de lignes dans mon tableau.

Pour compter le nombre de lignes de mon tableau j'ai utilisé le code suivant qui marche parfaitement également:
Code:
Nbligne = Range("A11", Range("A65535").End(xlUp)).Rows.Count
MsgBox Nbligne

Là ou ça ne marche plus, c'est quand j'essaie de lancer cette boucle... je ne sais pas quelle syntaxe employer : For Next, While Wend, etc....
Je ne sais pas si c'es ma sub IncremSimple qui fait bugger la boucle ou bien si c'est ma syntaxe.... que me conseilleriez-vous ??

Merci pour votre aide !
 

st007

XLDnaute Barbatruc
Re : Executer une macro en boucle

Bonsoir,
Bien que n'étant pas le meilleur placé, je t'offre mon point de vue ( çà permet de remonter ton post et peut être intéresser un pro )

Et si j'ai bien compris ce que tu cherches à faire ...
Code:
Sub copie()
Dim i&
Derligne = Sheets("ABSENCES").Range("A34").End(xlup).Row
Application.ScreenUpdating = False
with Sheets("ABSENCES")
For i = 34 To Derligne
    Range(Cells(i, 8), Cells(i, 9)).Cut Destination:=Sheets(Matricule).Range("A34").End(xlup).Row+1
Next i

Application.ScreenUpdating = True
End Sub
ou pas ....
 

steuf999

XLDnaute Nouveau
Re : Executer une macro en boucle

Bonsoir,

Merci pour ton aide mais en fait ma première Sub Incremsimple incrémente à partir d'un onglet de synthèse des onglets individuels.
Le Range A34 correspond donc à ces onglets différents de la feuilles ABSENCES.
C'est la sub IncremSimple lancée à partir de la feuille ABSENCES que je veux répéter pour toutes les lignes remplies à partir du Range "A11" de la feuille ABSENCES.
Dans ton code, je ne connais pas Application.ScreenUpdating .... je ne vois pas comment cela implique une boucle de ma sub Incremsimple.

Merci en tous cas ! j'espère avoir d'autres retours
 

st007

XLDnaute Barbatruc
Re : Executer une macro en boucle

re,
Je comprenais
copier de la feuille absence les colonnes H et I
pour les coller en feuille matricule en colonne A à la suite soit à partir de la ligne 39

vois ce que tu peux en tirer .
 

Pièces jointes

  • downloads exemple.xlsm
    18.7 KB · Affichages: 42
  • downloads exemple.xlsm
    18.7 KB · Affichages: 36

st007

XLDnaute Barbatruc
Re : Executer une macro en boucle

Bonjour,

la trame de la macro reste valable, mais en début, définit le nom de l'onglet de destination
dim ws as worksheets
set ws=.range[A14]
....
sheets(ws).range("A"&derligne).....
depuis mon telephone, donc à l'aveugle mais prends cette idée
 

steuf999

XLDnaute Nouveau
Re : Executer une macro en boucle [RESOLU]


Bonjour , Merci pour ton aide !
J'ai réussi avec le code suivant
Code:
Sub IncremBoucle()
Dim i As Integer
Dim Nbligne As Integer

Nbligne = Range("A11", Range("A65535").End(xlUp)).Rows.Count
'MsgBox Nbligne

For i = 1 To Nbligne

Call IncremSimple

Next
End Sub
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…