Vba : Feuilles de calcul interférant sur le bon déroulement d'une macro

cibleo

XLDnaute Impliqué
Bonsoir à tous,

Il y a quelques semaines, j'ai développé avec l'aide du forum, un outil de recherche effectuant un report de données en fonction d'un mot-clé saisi dans une Inputbox.
Après quelques tests, il semblerait que le bon déroulement de la macro soit affecté par la présence de certaines feuilles de calcul de mon fichier.

Je rentre dans le détail, mon classeur contient :

12 feuilles nommées "Encais Janv08" jusqu'à Décembre.
12 feuilles nommées "Caisse Janv08" jusqu'à Décembre.
et 1 feuille nommée "Recherche" dans laquelle j'exécute cette macro (Bouton "Rechercher un mot").

Le programme liste la colonne D des feuilles "Encais" pour trouver les lignes concernées par le mot-clé saisi et reporte ces lignes en effectuant leurs totaux en fin de colonne E, F et G.

Or dans la configuration actuelle de mon classeur, il s'avère que l'affichage de ces totaux est désordonné, ils viennent se figer au milieu de mes lignes reportées, faussant le résultat escompté. (Voir essai avec le mot "CPAM")

Par contre, lorsque je supprime toutes les feuilles de calcul "Caisse" et les feuilles "Encais" encore vierge de toutes données (celles de Juin à Décembre 08), le programme fonctionne parfaitement. (Répartition de mes lignes de données en ordre chronologique et affichage de leurs totaux en fin de colonnes respectives.

Pouvez-vous intervenir pour corriger ce petit bug.

Je vous joins le fichier dans le lien ci-dessous.

Cijoint.fr - Service gratuit de dépôt de fichiers

Merci de votre aide

Cibleo
 

Lii

XLDnaute Impliqué
Re : Vba : Feuilles de calcul interférant sur le bon déroulement d'une macro

Bonsoir,
A première vue, tu as un "Next WS" mal placé.
Tel qu'il est, ta variable Derli correspond, à la fin, à la dernière ligne de la dernière feuille !
Teste :
Code:
With WS
      Derli = .Range("D65536").End(xlUp).Row
      If Left(.Name, 6) = "Encais" Then
        i = Len(TextBox1.Value)
        For Each Cellule In .Range("D2:D" & Derli)
          For j = 1 To 50
            If UCase(Mid(Cellule, j, i)) = UCase(TextBox1.Value) Then
              trouve = True
                Derli = Range("A65536").End(xlUp).Row + 1
                For col = 1 To 7
                  Cells(Derli, col).Value = WS.Cells(Cellule.Row, col + 1).Value
                Next
                Total(1) = Total(1) + Cells(Derli, 5).Value
                Total(2) = Total(2) + Cells(Derli, 6).Value
                Total(3) = Total(3) + Cells(Derli, 7).Value
                x = x + 1
            End If
          Next j
        Next Cellule
      End If
     End With
  For col = 5 To 7
    If Total(col - 4) <> 0 Then Cells(Derli + 2, col).Value = Total(col - 4)
  Next
  With Cells(Derli + 2, 3)
    .Value = "Total "
    .HorizontalAlignment = xlRight
    .VerticalAlignment = xlCenter
  End With
 [B][COLOR="Red"] Next WS[/COLOR][/B]
  If trouve = False Then MsgBox "Pas de trace !"
  Unload Me
 

TooFatBoy

XLDnaute Barbatruc
Re : Vba : Feuilles de calcul interférant sur le bon déroulement d'une macro

Je sais que ça ne répond pas à ta question :( mais tu dois pouvoir simplifier le code en remplaçant la boucle For...Next associée au If par un LIKE.

Code:
  For Each WS In ThisWorkbook.Worksheets
    With WS
      Derli = .Range("D65536").End(xlUp).Row
      If Left(.Name, 6) = "Encais" Then
[B][COLOR="SeaGreen"]'        i = Len(TextBox1.Value)[/COLOR][/B]
        For Each Cellule In .Range("D2:D" & Derli)
[COLOR="SeaGreen"][B]'          For j = 1 To 50
'            If UCase(Mid(Cellule, j, i)) = UCase(TextBox1.Value) Then[/B][/COLOR]
[COLOR="Red"][B]            If UCase(Cellule) Like UCase("*" & TextBox1.Value & "*") Then[/B][/COLOR]
                trouve = True
                Derli = Derli + 1
                For col = 1 To 7
                  Cells(Derli, col).Value = WS.Cells(Cellule.Row, col + 1).Value
                Next
                Total(1) = Total(1) + Cells(Derli, 5).Value
                Total(2) = Total(2) + Cells(Derli, 6).Value
                Total(3) = Total(3) + Cells(Derli, 7).Value
                x = x + 1
            End If
[COLOR="seagreen"][B]'          Next j[/B][/COLOR]
        Next Cellule
      End If
     End With
  Next WS
 
Dernière édition:

cibleo

XLDnaute Impliqué
Re : Vba : Feuilles de calcul interférant sur le bon déroulement d'une macro

Bonsoir le forum,
Bonsoir Lii,

Oups, le problème ne s'arrange pas ! Bien au contraire, des lignes supplémentaires "total" viennent s'insérer entre mes lignes reportées.

De plus, l'alignement dans certaines cellules de la colonne C est modifié !

Est ce que cela fonctionne chez toi ?

Merci Lii.

Cibleo
 

TooFatBoy

XLDnaute Barbatruc
Re : Vba : Feuilles de calcul interférant sur le bon déroulement d'une macro

Le fait d'utiliser une seule et même variable "Derli" pour désigner deux choses différentes est, à mon avis, source de problèmes.

Il vaudrait mieux utiliser par exemple "DerLigEcr" pour connaître la dernière ligne pour l'écriture dans la feuille "Recherche", et "DerLigLec" pour connaître la dernière ligne à lire dans les différentes feuille "Encais...".
 

cibleo

XLDnaute Impliqué
Re : Vba : Feuilles de calcul interférant sur le bon déroulement d'une macro

Bonsoir Marcel32,

Merci pour ton entrée dans ce fil.

Tu sais, je suis néophyte en VBA.

Si la solution se trouve dans tes indications, je serais heureux que quelqu'un poursuivre sur ton idée.

Cibleo
 
C

Compte Supprimé 979

Guest
Re : Vba : Feuilles de calcul interférant sur le bon déroulement d'une macro

Bonjour tout le monde,

Marcel32, à raison, le fait d'utiliser une variable pour 2 choses différentes est le problème ..

Donc 2 variables : "DerLiS" pour la dernière ligne de chaque feuille
"DerLiR" pour la dernière ligne de la feuille "Recherche"

Ci-joint ton fichier "bien" modifié, comme la recherche du mot dans la cellule ;)

A+
 

Pièces jointes

  • Cibleo_Encaissement et Caisse 08.zip
    84.9 KB · Affichages: 43
Dernière modification par un modérateur:

TooFatBoy

XLDnaute Barbatruc
Re : Vba : Feuilles de calcul interférant sur le bon déroulement d'une macro

Code:
Private Sub CommandButton1_Click()
[COLOR="Red"][B]Dim DerLigEcr As Double[/B][/COLOR]
[COLOR="Blue"][B]Dim DerLigLec As Double[/B][/COLOR]

    Sheets("Recherche").[H1].Value = TextBox1.Value
    If TextBox1.Value = "" Then Exit Sub
    Application.ScreenUpdating = False

    x = 1
    [COLOR="red"][B]DerLigEcr[/B][/COLOR] = Range("A65536").End(xlUp).Row
    For Each WS In ThisWorkbook.Worksheets
        With WS
            If Left(.Name, 6) = "Encais" Then
[COLOR="SeaGreen"][B]'                i = Len(TextBox1.Value)[/B][/COLOR]
                [COLOR="blue"][B]DerLigLec[/B][/COLOR] = .Range("D65536").End(xlUp).Row
                For Each Cellule In .Range("D2:D" & [COLOR="blue"][B]DerLigLec[/B][/COLOR])
[COLOR="seagreen"][B]'                    For j = 1 To 50
'                    If UCase(Mid(Cellule, j, i)) = UCase(TextBox1.Value) Then[/B][/COLOR]
                    If UCase(Cellule) Like UCase("*" & TextBox1.Value & "*") Then
                        trouve = True
                        [COLOR="red"][B]DerLigEcr[/B][/COLOR] = [COLOR="red"][B]DerLigEcr[/B][/COLOR] + 1
                        For col = 1 To 7
                            Cells([COLOR="red"][B]DerLigEcr[/B][/COLOR], col).Value = WS.Cells(Cellule.Row, col + 1).Value
                        Next
                        Total(1) = Total(1) + Cells([COLOR="red"][B]DerLigEcr[/B][/COLOR], 5).Value
                        Total(2) = Total(2) + Cells([COLOR="red"][B]DerLigEcr[/B][/COLOR], 6).Value
                        Total(3) = Total(3) + Cells([COLOR="red"][B]DerLigEcr[/B][/COLOR], 7).Value
                        x = x + 1
                    End If
[COLOR="seagreen"][B]'                    Next j[/B][/COLOR]
                Next Cellule
            End If
        End With
    Next WS

    For col = 5 To 7
    If Total(col - 4) <> 0 Then Cells([COLOR="red"][B]DerLigEcr[/B][/COLOR] + 2, col).Value = Total(col - 4)
  Next
  With Cells([COLOR="red"][B]DerLigEcr[/B][/COLOR] + 2, 3)
    .Value = "Total "
    .HorizontalAlignment = xlRight
    .VerticalAlignment = xlCenter
  End With
  If trouve = False Then MsgBox "Pas de trace !"
  Unload Me
  Dim madate As String
madate = Format(Date, "dddd dd mmmm yyyy")
  With ActiveSheet.PageSetup
      .LeftHeader = ""
      .CenterHeader = "&""Verdana,Normal""&16Mot-clé : " & TextBox1
      .RightHeader = ""
      .LeftFooter = "&""Verdana,Normal""Encaissement 2008"
      .CenterFooter = _
        "&""Verdana,Normal""Edité le & " & madate & "&"" à ,Normal""&  &""Verdana,Normal""à&"" à ,Normal""  &T"
      .RightFooter = "&""Verdana,Normal""Page &P"
  End With
  Call Traitement
  Application.ScreenUpdating = True
End Sub

Mes modifications :
En vert ce qui ne sert plus,
en rouge ce qui concerne la ligne d'écriture dans la feuille "Recherche",
en bleu ce qui concerne la dernière ligne de lecture des différentes feuilles "Encais...".


[edit]
Salut Bruno, on dirait bien que je suis encore une fois en retard... ;)
[/edit]
 
Dernière édition:

cibleo

XLDnaute Impliqué
Re : Vba : Feuilles de calcul interférant sur le bon déroulement d'une macro

Re BrunoM45,

Dans la feuille de calcul "recherche", je clique sur le bouton "Rechercher un mot" et saisis le mot "Cpam".

Toutes les lignes comportant ce mot dans la colonne D des feuilles "Encaiss" sont alors reportées dans la feuille "recherche".

Avec l'affichage des totaux en bout de colonne E, F et G.
 
C

Compte Supprimé 979

Guest
Re : Vba : Feuilles de calcul interférant sur le bon déroulement d'une macro

RE,

Et alors, le fichier que j'ai mis à dispo ne fait pas ça :confused:

Car chez moi, c'est bien le cas, tu as un prob avec Excel !

A+
 

cibleo

XLDnaute Impliqué
Re : Vba : Feuilles de calcul interférant sur le bon déroulement d'une macro

Re BrunoM45

J'ai essayé ton fichier avec plusieurs mots "cpam" "Releya" "msa", et la boite de dialogue apparaît "Pas de trace".

Il n'y a aucun report dans la feuille "Recherche"

J'avoue ne pas comprendre Bruno !!! J'ai pourtant pas picolé avant le match de foot !!!
 
C

Compte Supprimé 979

Guest
Re : Vba : Feuilles de calcul interférant sur le bon déroulement d'une macro

Re,

Ca y aiiiiii, j'ai compriiiiiiiis

Il faut changer la ligne avec INSTR() par
Code:
If InStr(1, Cellule, VSearch, [COLOR=blue][B]vbTextCompare[/B][/COLOR]) > 0 Then
Sinon Excel ne recherche que les textes avec la même casse (majuscule)
Si tu tapes "CPAM" et non "cpam'" ça fonctionne !

Après modif, toute recherche fonctionnera ...

A+
 

cibleo

XLDnaute Impliqué
Re : Vba : Feuilles de calcul interférant sur le bon déroulement d'une macro

Re Bruno,

A première vue çà a l'air de coller, je revoie tout çà demain à tête reposée car j'avais un autre petit souci.

Si une de mes lignes comporte 2 fois le même mot,

Exemple : Remboursement cpam de l'Yonne + cpam dijon, le report de lignes se fera 2 fois !!!

J'aimerais bien l'éviter.

Merci à Marcel32 et à toi Bruno

Cibleo
 

Discussions similaires

Réponses
7
Affichages
668

Membres actuellement en ligne

Statistiques des forums

Discussions
314 948
Messages
2 114 649
Membres
112 206
dernier inscrit
salah zabi