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
 

bylka213

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

Ben justement c'est ca que je ne comprend pas je n'ai pas cette ligne là dans les fichiers dézippés dans le code de MFCmotcle je né pas "If Left(.Name, 6) = "Encais" Then"
 
C

Compte Supprimé 979

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

Re,

Je comprends mieux, le code principal est dans l'USF "Rechercher"

Clique droit sur l'USF -> Code et tu trouveras le code en question ;)

Code de l'USF
Code:
Option Explicit
Dim x As Long, col As Byte, DerLiS As Long, DerLiR As Long
Dim li As Long, i As Byte, j As Byte
Dim Total(3) As Double
Dim Cellule As Range
Dim WS As Worksheet
Dim trouve As Boolean
Private Sub UserForm_Initialize()
  ' Définir le nom de la feuille de RECHERCHE
  Set ShtR = Sheets("Recherche")
  DerLiR = ShtR.Range("A65536").End(xlUp).Row
  ShtR.Range("A2:G" & DerLiR + 2).ClearContents
  With ShtR.Range("C2:C" & DerLiR + 2)
    .HorizontalAlignment = xlGeneral
    .VerticalAlignment = xlCenter
  End With
End Sub
Private Sub CommandButton1_Click()
  Dim VSearch As String
  ShtR.[H1].Value = TextBox1.Value
  If TextBox1.Value = "" Then Exit Sub
  Application.ScreenUpdating = False
  x = 1
  VSearch = Me.TextBox1.Value
  For Each WS In ThisWorkbook.Worksheets
    With WS
      DerLiS = .Range("D65536").End(xlUp).Row
      If Left(.Name, 6) = "Encais" Then
        i = Len(TextBox1.Value)
        For Each Cellule In .Range("D2:D" & DerLiS)
          If InStr(1, Cellule, VSearch, vbTextCompare) > 0 Then
              trouve = True
                DerLiR = ShtR.Range("A65536").End(xlUp).Row + 1
                For col = 1 To 7
                  ShtR.Cells(DerLiR, col).Value = WS.Cells(Cellule.Row, col + 1).Value
                Next
                Total(1) = Total(1) + ShtR.Cells(DerLiR, 5).Value
                Total(2) = Total(2) + ShtR.Cells(DerLiR, 6).Value
                Total(3) = Total(3) + ShtR.Cells(DerLiR, 7).Value
                x = x + 1
            End If
        Next Cellule
      End If
     End With
  Next WS
  For col = 5 To 7
    ShtR.Cells(DerLiR + 2, col).FormulaLocal = "=SOMME(" & ShtR.Cells(2, col).Address & ":" & ShtR.Cells(DerLiR + 1, col).Address & ")"
  Next
  With ShtR.Cells(DerLiR + 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

A+
 

bylka213

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

Merci,



Code:
Option Explicit
Dim x As Long, col As Byte, DerLiS As Long, DerLiR As Long
Dim li As Long, i As Byte, j As Byte
Dim Total(3) As Double
Dim Cellule As Range
Dim WS As Worksheet
Dim trouve As Boolean
Private Sub UserForm_Initialize()
  ' Définir le nom de la feuille de RECHERCHE
  Set ShtR = Sheets("Recherche")
  DerLiR = ShtR.Range("A65536").End(xlUp).Row
  ShtR.Range("A2:G" & DerLiR + 2).ClearContents
  With ShtR.Range("C2:C" & DerLiR + 2)
    .HorizontalAlignment = xlGeneral
    .VerticalAlignment = xlCenter
  End With
End Sub
Private Sub CommandButton1_Click()
  Dim VSearch As String
  ShtR.[H1].Value = TextBox1.Value
  If TextBox1.Value = "" Then Exit Sub
  Application.ScreenUpdating = False
  x = 1
  VSearch = Me.TextBox1.Value
  For Each WS In ThisWorkbook.Worksheets
    With WS
      DerLiS = .Range("D65536").End(xlUp).Row
      If Left(.Name, 6) = "Encais" Then
        i = Len(TextBox1.Value)
        For Each Cellule In .Range("D2:D" & DerLiS)
          If InStr(1, Cellule, VSearch, vbTextCompare) > 0 Then
              trouve = True
                DerLiR = ShtR.Range("A65536").End(xlUp).Row + 1
                For col = 1 To 7
                  ShtR.Cells(DerLiR, col).Value = WS.Cells(Cellule.Row, col + 1).Value
                Next
                Total(1) = Total(1) + ShtR.Cells(DerLiR, 5).Value
                Total(2) = Total(2) + ShtR.Cells(DerLiR, 6).Value
                Total(3) = Total(3) + ShtR.Cells(DerLiR, 7).Value
                x = x + 1
            End If
        Next Cellule
      End If
     End With
  Next WS
  For col = 5 To 7
    ShtR.Cells(DerLiR + 2, col).FormulaLocal = "=SOMME(" & ShtR.Cells(2, col).Address & ":" & ShtR.Cells(DerLiR + 1, col).Address & ")"
  Next
  With ShtR.Cells(DerLiR + 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


Si j'ai trois feuilles je fais comment là déjà j'ai un problème parce que meme si je remplace If Left(.Name, 6) = "Encais" Then par If Left(.Name, 6) = "SIR DE" Then le nom d'une de mes feuilles cela me met "pas de trace" dans un premier temps je ne modifie meme pas le fait que je veuille chercher que dans un colonne je reprends le meme principe que cibleo, je cherche dans toutes les cellules (A1:Z)

:confused::confused::confused:
 
C

Compte Supprimé 979

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

Re,

un premier temps je ne modifie meme pas le fait que je veuille chercher que dans un colonne je reprends le meme principe que cibleo, je cherche dans toutes les cellules (A1:Z)
Non désolé avec le code que tu as mis, tu recherches seulement dans la colonne "D"

Il faut changer :
Code:
For Each Cellule In .Range("[COLOR=red][B]D2:D[/B][/COLOR]" & DerLiS)
par
Code:
For Each Cellule In .Range("[COLOR=blue][B]A2:Z[/B][/COLOR]" & DerLiS)

A+
 

bylka213

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

Merci,

Je ne sais pas l'aspect ne va pas avec ce que je veux on dirait et croyez vous que cela soit possible que je cré un derniere colonne dans laquel on aurait un lien sur un fichier texte dasn lequel toutes les information de la lignes seraient reprises et mise en forme afin d'avoir une meilleur lisibilité?
 

bylka213

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

l'idée n'est pas terrible?

je le croyais parce que j'ai environ 15 colonnes dont certaines cellules sont peu remplies mais d'autres tellement surchargées que la taille des cellules atteint sa limite. Alors je me disais en créant une dernière colonne dans laquelle un lien se fait dès qu'il y a du contenu dans les cellules de la ligne, ce lien ouvrirait un word par exemple ou un wordpad pas besoin que la mise en forme soit évoluée.
Ce word aurait cette tête là:
HTML:
ID:
Catégorie:
...
...
Description:xxxxxxxxxxxxxxxxxxxxxxxx
                xxxxxxxxxxxxxxxxxxxxxxxx
                xxxxxxxxxxxxxxxxxxxxxxxx
                xxxxxxxxxxxxxxxxxxxxxxxx
commentaires:x xxxxxxxxxxxxxxxxxxxx
                xxxxxxxxxxxxxxxxxxxxxxxx
                xxxxxxxxxxxxxxxxxxxxxxxx
                xxxxxxxxxxxxxxxxxxxxxxxx
...

L'idée n' est pas terrible en soit je le conçoit parce qu'un fichier Excel est lisible quand il n'est pas surchargé.
Je me disais que pour l'extraction des données comme chaque ligne peut interrésser une personne mais pas une autre, ce serait plus aisé.

Vous croyez que c'est possible ceci?

Merci
:)
 
Dernière édition:

bylka213

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

Pour en revenir à l'outil de recherche développé pour CIBLEO.
Je voulais savoir s'il était possible de faire une restitution plus simple dasn la feuille recherche?

Parceque CIBLEO parlait de "TOTAL" et moi je n'ai pas besoin de cette option je voudrais juste restituer la ligne entiere quand le mot est present dans la colonne F par exemple.

Le problème avec l'outil de CIBLEO c'est que l'on a pas toutes les colonnes qui sont restituées.

Merci
 

bylka213

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

Oui Ok Marcel,

Je vais faire ça, je vais déjà essayer d'etre au plus clair avec ce que je veux. Parce que Bruno m'a fait hésiter sur la réelle utilité de l'option que je veux mettre en place et l'outil de recherche peut etre remplacé dasn chaque feuille par un filtre automatique sur chaque colonne qui l'interesse je pense.

De toute façon come tu as dit je vais faire un fichier dans lequel je vais mettre une vision de ce que j'ai aujourd'hui et qur une autre feuille ce que je veux demain (façon de parler :D).

En tous cas merci de l'interet que vous portez à mes problèmes.

à bientôt.
 
C

Compte Supprimé 979

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

Salut Bylka213, Marcel32

Je vais faire ça, je vais déjà essayer d'etre au plus clair avec ce que je veux. Parce que Bruno m'a fait hésiter sur la réelle utilité de l'option que je veux mettre en place et l'outil de recherche peut etre remplacé dasn chaque feuille par un filtre automatique sur chaque colonne qui l'interesse je pense.
Désolé, si je t'ai fait douté ;)

De toute façon come tu as dit je vais faire un fichier dans lequel je vais mettre une vision de ce que j'ai aujourd'hui et qur une autre feuille ce que je veux demain (façon de parler :D).
Très bien, comme te l'as dis Marcel32, c'est plus simple pour nous par la suite.

De plus, il serait plus que bien de créer un nouveau post pour ta demande, STP.

D'avance merci.
 

bylka213

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

OKOK Bruno,

Si créer un nouveau post peut m'apporter plus de réponses je le ferai. Et ne t'inquiètes pas si tu m'a fait douté c'est qu'au fond je n'étais pas sur de mon idée, et ton avis de personne expérimenté compte beaucoup pour moi.

Au plaisir ;)
 
C

Compte Supprimé 979

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

Re,
Si créer un nouveau post peut m'apporter plus de réponses je le ferai
C'est possible en effet !
Moi le premier, il m'arrive parfois,
lorsque je vois un post avec un certain nombre de pages, je me dis que la discussion est bien avancée et que le problème ne doit pas être loin d'être rséolu.

Et ne t'inquiètes pas si tu m'a fait douté c'est qu'au fond je n'étais pas sur de mon idée
Effectivement, en général, ça ne trompe pas ....:)

et ton avis de personne expérimenté compte beaucoup pour moi
Personne expérimentée, faut'le dire vite, même très vite ...

Je pense que pour les "vieux" comme moi (déjà 3 ans sur le forum) on ne se débrouille pas trop mal :D

Dis donc, quand j'ai dis "vieux", tu pensais à quoi !? A mon age, faut pas pousser quand même .....
mouarf3.png


A+
 

bylka213

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

Ben quand même si tu es vieux ...d'ailleurs c'est quand ton anniversaire on pourrais se cotiser pour t'acheter un écran 30" tu dois plus très bien y voir à ton age....:D


oulala c pas moi qui ai dit cela c un méchant posteur qui est passé en courant j'ai pas pu lire son adresse IP...

Désolé j'espère que tu ne le prendra pas mal c'est de l'humour bien sur.
 

TooFatBoy

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

Moi je suis beaucoup plus vieux que Bruno, il me faudrait deux 30" s'il vous plait. :)

à envoyer à l'adresse suivante :
Mr Jacky67
3 rue J. Voirien
67010 Gépudssou


Merci
 

Discussions similaires

Réponses
7
Affichages
688

Statistiques des forums

Discussions
315 130
Messages
2 116 562
Membres
112 785
dernier inscrit
REFFAS Mokhtar