Problème de code/macro

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

luke3300

XLDnaute Impliqué
Bonjour à tout le forum,

voilà, il y a quelques temps, vous m'avez aidé pour créer un fichier et dans celui-ci, il y a un code que voici:

Sub totaux()
Dim tablo As Variant
Dim i As Long, j As Byte, k As Long, s As Byte
Dim PremLig As Long, DerLig As Long, DerLig2 As Long

For s = 1 To 4
With Sheets(s)
PremLig = .Columns("A:A").Find(What:="Sce", LookAt:=xlWhole).Row + 1
DerLig = .Columns("A:F").Find(What:="Remplaçants", LookAt:=xlWhole).Row - 1
DerLig2 = .Columns("A:A").Find(What:="Total", LookAt:=xlWhole).Row - 2

tablo = .Range(.Cells(PremLig, 1), .Cells(DerLig, 32))

For i = DerLig + 2 To DerLig2 Step 2
For j = 5 To 31
If .Cells(i, j) <> "" Then
For k = 1 To UBound(tablo)
If tablo(k, 1) = .Cells(i, j) Then
tablo(k, UBound(tablo, 2)) = tablo(k, UBound(tablo, 2)) + .Cells(i + 1, j)
End If
Next k
End If
Next j
Next i

For i = 1 To UBound(tablo)
Sheets("Totaux").Cells(i + 2, s + 10) = tablo(i, UBound(tablo, 2))
Next i

Erase tablo
End With
Next s

Ce code fonctionne parfaitement sous excel 2003 mais quand je l'utilise sur excel 2007, il m'affiche un déboggage pour cette ligne:

PremLig = .Columns("A:A").Find(What:="Sce", LookAt:=xlWhole).Row + 1

Evidement ça bloque le bon déroulement du code.
Quelqu'un pourrait-il éclairer ma lanterne à ce sujet? Je précise que rien n'a été changé dans ce fichier qui je rappelle fonctionne à merveille sous excel 2003.

Un grand merci d'avance pour votre aide précieuse et surtout bonne journée à tous.
 
Re : Problème de code/macro

Bonjour tout le monde, bonjour soenda,

voici en pièce jointe une capture de ce qu'il m'affiche.
Et lorsque j'ouvre le débogueur, c'est cette ligne qui est en jaune et qui visiblement pose problème:

PremLig = .Columns("A:A").Find(What:="Sce", LookAt:=xlWhole).Row + 1

Merci d'avance pour votre aide et bonne journée.
 

Pièces jointes

  • 26-09-2009 7-21-21.jpg
    26-09-2009 7-21-21.jpg
    24.5 KB · Affichages: 48
Re : Problème de code/macro

Re,

ben voilà, en creusant un peu dans le fichier, je me suis aperçu que j'avais ajouté un onglet en 1ere position et que c'est ça qui posait problème dans le code. J'ai mis l'onglet ajouté à la fin et là ... ça fonctionne.

Maintenant, ma question serait la suivante: Comment modifier le code pour qu'il fonctionne à partir du 2ème onglet et pas à partir du 1er ?

Pour info, j'ai testé de modifier ce code en mettant 2 To 5 ou 2 To 4 ou encore 1 To 5 dans cette partie: "For s = 1 To 4". Mais ça ne fonctionne pas, les données qu'il récupère sont décalées dans les celulles de destination.

Merci pour votre aide et bon W-E
 
Re : Problème de code/macro

Bonjour le fil, luke3300

luke3300 à dit:
Comment modifier le code pour qu'il fonctionne à partir du 2ème onglet
Par exemple:
Code:
For s = [B][COLOR="Blue"]2[/COLOR][/B] To [B][COLOR="#0000ff"]5[/COLOR][/B]
With Sheets([B][COLOR="#0000ff"]iif(s = 5, 1, s)[/COLOR][/B])
 . . .
NB : Il est péférable de travailler avec le nom interne des feuilles, plutôt qu'avec les noms d'onglets . . .

A plus
 
Dernière édition:
Re : Problème de code/macro

Re,

merci d'avance pour ta patience soenda.

La modification ne marche pas alors je vais te mettre le fichier à disposition pour que tu puisses y voir plus clair. En fait tout est expliqué dedans. Je t'envoie le lien en privé car il y a des données perso dedans.

Bon après-midi.
 
Re : Problème de code/macro

Re,

Le test suivant Dans la Sub totaux donne le N° d'onglet et son nom (voir PJ)
En Bleu le code test
En vert les mises en commentaire
Code:
Sub totaux()
Dim tablo As Variant
Dim i As Long, j As Byte, k As Long, s As Byte
Dim PremLig As Long, DerLig As Long, DerLig2 As Long

[B][COLOR="Blue"]Dim ch as string

For s = 1 To 4
    ch = ch & "Onglet " & s & " : " & Sheets(s).Name & vbCr
Next

MsgBox ch
End[/COLOR][/B]		[B][COLOR="#2e8b57"]' Termine le prog ici[/COLOR][/B]

. . .
[B][COLOR="SeaGreen"]' Next s en commentaire[/COLOR][/B]

End Sub
La boucle "For s = 1 To 4" semble fournir le résultat escompté.
"Décès" est bien le nom de l'onglet 2 => Voir la PJ.

NB : Le code fourni le nom des onglets d'après leur position.
Si les onglets sont déplacés manuellement (ce qui est facile), la liste sera différente.

D'ou le conseil "Utiliser de préférence le nom interne des feuilles"

A plus
 

Pièces jointes

  • Liste des Onglets_1à4.JPG
    Liste des Onglets_1à4.JPG
    17.4 KB · Affichages: 39
Re : Problème de code/macro

Bonjour tout le monde,

encore merci pour ton aide soenda.

J'ai cependant 3 questions:

1. n'y-a-t'il pas moyen de modifier le code pour qu'il prenne en compte le nom de l'onglet à la place du n°?

2. que dois-je changer au code pour qu'il prenne en compte + de colonnes pour effectuer la synthèse des données? Actuellement, il prend en compte de la 5ème colonne à la 31ème mais j'aimerais en ajouter une 20aine et le fait de modifier cette partie du code "For j = 5 To 31" en "For j = 5 To 51" après avoir ajouté des colonnes ne marche pas.

3. j'aimerais faire la même chose avec les lignes qu'avec les colonnes, comment puis-je m'y prendre?

Merci beaucoup d'avance et bon après-midi.

PS: si d'autres membres veulent jeter un oeil sur le fichier, je peux leur envoyer en MP, il suffit de le demander.
 
Dernière édition:
Re : Problème de code/macro

Bonsoir le fil, luke3300

Pour la question 1,
vois l'exemple suivant (pour un classeur contenant les feuilles : Feuil1 à Feuil3).
Code:
Sub test()
    Dim V As Variant
    
    V = Array("Feuil1", "Feuil3", "Feuil2")
    
    For i = 0 To 2
        Sheets(V(i)).Select
        MsgBox Sheets(V(i)).Name
    Next
    
End Sub
Pour le reste, je crois que tu devrais poster le classeur, avec le code et des données bidons

A plus
 
Re : Problème de code/macro

Bonjour à tous,

En effet soenda, il serait plus simple de mettre le classeur 🙂 alors voilà ... j'me suis aidé du guide téléphonique pour ajouter des noms afin qu'il soit le plus complet possible pour les tests.

Donc voilà, il est disponible là:

RapidShare: 1-CLICK Web hosting - Easy Filehosting

Un tout grand merci d'avance pour votre aide et bonne soirée
 
Re : Problème de code/macro

Bonjour le fil, Luke

Modifie ton code comme suit
Code:
[B][COLOR=green]'     . . .[/COLOR][/B]
Dim V As Variant
 
[B][COLOR=blue]For Each V In Array("[COLOR=darkgreen]Décès[/COLOR]", "[COLOR=darkgreen]Standard[/COLOR]", "[COLOR=darkgreen]Non-Standard[/COLOR]", "[COLOR=darkgreen]Totaux[/COLOR]")[/COLOR][/B]
  With Sheets([B][COLOR=blue]V[/COLOR][/B])
[B][COLOR=green]'     . . .[/COLOR][/B]
  End With
[COLOR=blue][B]Next[/B][/COLOR]
 
End Sub
Les onglets seront traités dans l'ordre de leur position dans l'Array : 1-Décès, 2-Standard, etc. (à modifier au besoin).

A plus
 
Re : Problème de code/macro

Rebonjour tout le monde,

voilà soenda, j'ai ajouté ce que tu ma indiqué au code mais avec moi ça ne donne rien ... peut-être devais-je remplacer une partie du code par le tiens???
Moi je pensais remplacer cette partie:

********
Dim tablo As Variant
Dim i As Long, j As Byte, k As Long, s As Byte
Dim PremLig As Long, DerLig As Long, DerLig2 As Long


For s = 1 To 4
With Sheets(s)
********


Par ton code:

********
Dim V As Variant

For Each V In Array("Décès", "Standard", "Non-Standard", "Totaux")
With Sheets(V)
' . . .
End With
Next
********

Est-ce exact?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
662
Réponses
5
Affichages
847
Réponses
4
Affichages
692
Réponses
8
Affichages
357
Réponses
10
Affichages
634
Réponses
8
Affichages
753
Retour