[OOoBasic]

Résolu
Pruls -  
 pruls -
Bonjour à tous,

Il y a quelques temps, j'ai créé une macro pour excel.

Aujourd'hui, je veux passer sous OOo.

La partie du fichier excel passe sans probleme, mais la macro n'est pas reconnue.

Pouvez vous m'aider à traduire en OOoBasic la macro que j'avais écrit?

Merci d'avance.

Voici la macro:

'Logiciels libres mis en place par Pruls afin de savoir si un élément se trouve dans une page excel.
'Il serait intéressant de remplacer les recherches dans les onglets par des fonctions redonnant
'trouve ainsi que onglet, ligne et colonne si nécessaire.
'Vous pouvez envoyez des remarques à Prulsonline@gmail.com .

Sub Nom2()
'On va chercher "nom" (case B1 de l'onglet "Résultat")
Nom = Worksheets("Résultat").Cells(1, 2).Value

'dans différents onglets déja existants.
' ("Mandats","Prospect","VENDUES","Acheteurs","Annonces","Estimation","Arch Vend","Vendeurs","Tous Prospects").
' POUR AJOUTER L'ONGLET "nouvel_onglet" DANS LE DOMAINE DE RECHERCHE:
' 1)COPIER LE TEXTE ENTRE LES DEUX LIGNES DE *********
' 2)COLLER AVANT LA LIGNE DE #############
' 3)REMPLACER LE NOM DE L'ONGLET PAR "nouvel_onglet"
' 4)AJOUTER "nouvel_onglet" DANS LA LISTE CI-DESSUS
' 5)ENREGISTRER

'dans une Zone délimitée par les cases (1,1) et (nblmax,nbcmax)
nblmax = 600
nbcmax = 7

'initialisation de trouve et de PbZone
trouve = False
PbZone = False
'*******************************************************************************************************************************

'recherche dans "Vendeurs"
If Not trouve Then

'initialisation de c
c = 1

While c < nbcmax + 1 And Not trouve

'initialisation de l
l = 1

While l < nblmax + 1 And Not trouve
'test si reconnu
If Nom = Worksheets("Vendeurs").Cells(l, c).Value Then
trouve = True
ligne = l
colonne = c
onglet = "Vendeurs"
End If

l = l + 1
Wend 'fin l
If Worksheets("Vendeurs").Cells(nblmax + 1, c).Value <> "" Then
PbZone = True
End If
c = c + 1

Wend 'fin c
End If

'fin recherche dans "Vendeurs"

'*******************************************************************************************************************************
'recherche dans "Acheteurs"
If Not trouve Then

'initialisation de c
c = 1

While c < nbcmax + 1 And Not trouve

'initialisation de l
l = 1

While l < nblmax + 1 And Not trouve
'test si reconnu
If Nom = Worksheets("Acheteurs").Cells(l, c).Value Then
trouve = True
ligne = l
colonne = c
onglet = "Acheteurs"
End If

l = l + 1
Wend 'fin l

If Worksheets("Acheteurs").Cells(nblmax + 1, c).Value <> "" Then
PbZone = True
End If

c = c + 1

Wend 'fin c
End If
'fin recherche dans "Acheteurs"

'*******************************************************************************************************************************

'recherche dans "Estimation"
If Not trouve Then

'initialisation de c
c = 1

While c < nbcmax + 1 And Not trouve

'initialisation de l
l = 1

While l < nblmax + 1 And Not trouve
'test si reconnu
If Nom = Worksheets("Estimation").Cells(l, c).Value Then
trouve = True
ligne = l
colonne = c
onglet = "Estimation"
End If

l = l + 1
Wend 'fin l

If Worksheets("Estimation").Cells(nblmax + 1, c).Value <> "" Then
PbZone = True
End If

c = c + 1

Wend 'fin c
End If
'fin recherche dans "Estimation"

'*******************************************************************************************************************************

'recherche dans "Annonces"
If Not trouve Then

'initialisation de c
c = 1

While c < nbcmax + 1 And Not trouve

'initialisation de l
l = 1

While l < nblmax + 1 And Not trouve
'test si reconnu
If Nom = Worksheets("Annonces").Cells(l, c).Value Then
trouve = True
ligne = l
colonne = c
onglet = "Annonces"
End If

l = l + 1
Wend 'fin l

If Worksheets("Annonces").Cells(nblmax + 1, c).Value <> "" Then
PbZone = True
End If
c = c + 1

Wend 'fin c
End If
'fin recherche dans "Annonces"

'*******************************************************************************************************************************

'recherche dans "Prospect"
If Not trouve Then

'initialisation de c
c = 1

While c < nbcmax + 1 And Not trouve

'initialisation de l
l = 1

While l < nblmax + 1 And Not trouve
'test si reconnu
If Nom = Worksheets("Prospect").Cells(l, c).Value Then
trouve = True
ligne = l
colonne = c
onglet = "Prospect"
End If

l = l + 1
Wend 'fin l

If Worksheets("Prospect").Cells(nblmax + 1, c).Value <> "" Then
PbZone = True
End If

c = c + 1

Wend 'fin c
End If
'fin recherche dans "Prospect"

'*******************************************************************************************************************************

'recherche dans "Tous Prospects"
If Not trouve Then

'initialisation de c
c = 1

While c < nbcmax + 1 And Not trouve

'initialisation de l
l = 1

While l < nblmax + 1 And Not trouve
'test si reconnu
If Nom = Worksheets("Tous Prospects").Cells(l, c).Value Then
trouve = True
ligne = l
colonne = c
onglet = "Tous Prospects"
End If

l = l + 1
Wend 'fin l

If Worksheets("Tous Prospects").Cells(nblmax + 1, c).Value <> "" Then
PbZone = True
End If

c = c + 1

Wend 'fin c
End If
'fin recherche dans "Tous Prospects"

'*******************************************************************************************************************************
'recherche dans "Arch Vend"
If Not trouve Then

'initialisation de c
c = 1

While c < nbcmax + 1 And Not trouve

'initialisation de l
l = 1

While l < nblmax + 1 And Not trouve
'test si reconnu
If Nom = Worksheets("Arch Vend").Cells(l, c).Value Then
trouve = True
ligne = l
colonne = c
onglet = "Arch Vend"
End If

l = l + 1
Wend 'fin l

If Worksheets("Arch Vend").Cells(nblmax + 1, c).Value <> "" Then
PbZone = True
End If

c = c + 1

Wend 'fin c
End If
'fin recherche dans "Arch Vend"

'********************************************************************************************************************************************

'recherche dans "Mandats"
If Not trouve Then

'initialisation de c
c = 1

While c < nbcmax + 1 And Not trouve

'initialisation de l
l = 1

While l < nblmax + 1 And Not trouve
'test si reconnu
If Nom = Worksheets("Mandats").Cells(l, c).Value Then
trouve = True
ligne = l
colonne = c
onglet = "Mandats"
End If

l = l + 1
Wend 'fin l

If Worksheets("Mandats").Cells(nblmax + 1, c).Value <> "" Then
PbZone = True
End If

c = c + 1

Wend 'fin c
End If
'fin recherche dans "Mandats"

'*******************************************************************************************************************************
'recherche dans "VENDUES"
If Not trouve Then

'initialisation de c
c = 1

While c < nbcmax + 1 And Not trouve

'initialisation de l
l = 1

While l < nblmax + 1 And Not trouve
'test si reconnu
If Nom = Worksheets("VENDUES").Cells(l, c).Value Then
trouve = True
ligne = l
colonne = c
onglet = "VENDUES"
End If

l = l + 1
Wend 'fin l

If Worksheets("VENDUES").Cells(nblmax + 1, c).Value <> "" Then
PbZone = True
End If

c = c + 1

Wend 'fin c
End If
'fin recherche dans "VENDUES"

'*******************************************************************************************************************************

'###############################################################################################################################

'Affichage du résultat dans le cadre de l'onglet "Résultat"

If trouve Then
Worksheets("Résultat").Cells(2, 2) = "trouvé"
Worksheets("Résultat").Cells(3, 2) = "ligne"
Worksheets("Résultat").Cells(3, 3) = ligne
Worksheets("Résultat").Cells(4, 2) = "colonne"
Worksheets("Résultat").Cells(4, 3) = colonne
Worksheets("Résultat").Cells(5, 2) = "onglet"
Worksheets("Résultat").Cells(5, 3) = onglet

' Affichage de la ligne trouvée

Worksheets("Résultat").Cells(10, 2) = Worksheets(onglet).Cells(ligne, 2).Value
Worksheets("Résultat").Cells(10, 3) = Worksheets(onglet).Cells(ligne, 3).Value
Worksheets("Résultat").Cells(10, 4) = Worksheets(onglet).Cells(ligne, 4).Value
Worksheets("Résultat").Cells(10, 5) = Worksheets(onglet).Cells(ligne, 5).Value
Worksheets("Résultat").Cells(10, 6) = Worksheets(onglet).Cells(ligne, 6).Value
Worksheets("Résultat").Cells(10, 7) = Worksheets(onglet).Cells(ligne, 7).Value

Else

For lgn = 2 To 5
For col = 2 To 3
Worksheets("Résultat").Cells(lgn, col) = ""
Next
Next

For col = 2 To 6
Worksheets("Résultat").Cells(10, col) = ""
Next

Worksheets("Résultat").Cells(10, 3) = "introuvable"

If PbZone = True Then
Worksheets("Résultat").Cells(13, 3) = "ATTENTION: Zone DE RECHERCHE TROP PETITE ! ! !"
End If

End If

End Sub

Sub RAZ3()
For lgn = 1 To 5
For col = 2 To 3
Worksheets("Résultat").Cells(lgn, col) = ""
Next
Next

For col = 2 To 7
Worksheets("Résultat").Cells(10, col) = ""
Next

End Sub
Configuration: Windows XP
Firefox 1.5.0.9

12 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    j'aurai aimé avoir ton fichier excel pour tester
    voilà en gros ce que ça donne
    ' Déclaration des variables 
    
    dim monClasseur as Object
    dim lesFeuilles as Object
    
    dim fMandats        as Object
    dim fProspect       as Object
    dim fVENDUES        as Object
    dim fAcheteurs      as Object
    dim fAnnonces       as Object
    dim fEstimation     as Object
    dim fArch_Vend      as Object
    dim fVendeurs       as Object
    dim fTous_Prospects as Object
    dim fResultat       as Object
    
    dim trouve as Boolean, PbZone  as Boolean
    dim nblmax as Integer, nbcmax  as Integer
    dim c      as Integer, l       as integer
    dim ligne  as integer, colonne as Integer
    dim onglet as String
    dim Nom, lgn, col
    
    monClasseur = thisComponent
    lesFeuilles = monClasseur.Sheets
    
    fMandats        = lesFeuilles.getByName("Mandats")
    fProspect       = lesFeuilles.getByName("Prospect") 
    fVENDUES        = lesFeuilles.getByName("VENDUES ") 
    fAcheteurs      = lesFeuilles.getByName("Acheteurs ") 
    fAnnonces       = lesFeuilles.getByName("Annonces") 
    fEstimation     = lesFeuilles.getByName("Estimation") 
    fArch_Vend      = lesFeuilles.getByName("Arch_Vend") 
    fVendeurs       = lesFeuilles.getByName("Vendeurs") 
    fTous_Prospects = lesFeuilles.getByName("Tous_Prospects")
    fResultat       = lesFeuilles.getByName("Résultat")
    
    '**********************************************
    
    Sub Nom2()
    
    'On va chercher "nom" (case B1 de l'onglet "Résultat")
    'Nom = Worksheets("Résultat").Cells(1, 2).Value
    Nom = fResultat.getCellByPosition(1,0)
    
    'dans différents onglets déja existants.
    ' ("Mandats","Prospect","VENDUES","Acheteurs","Annonces","Estimation","Arch Vend","Vendeurs","Tous Prospects").
    ' POUR AJOUTER L'ONGLET "nouvel_onglet" DANS LE DOMAINE DE RECHERCHE:
    ' 1)COPIER LE TEXTE ENTRE LES DEUX LIGNES DE *********
    ' 2)COLLER AVANT LA LIGNE DE #############
    ' 3)REMPLACER LE NOM DE L'ONGLET PAR "nouvel_onglet"
    ' 4)AJOUTER "nouvel_onglet" DANS LA LISTE CI-DESSUS
    ' 5)ENREGISTRER
    
    'dans une Zone délimitée par les cases (1,1) et (nblmax,nbcmax)
    nblmax = 600
    nbcmax = 7
    
    'initialisation de trouve et de PbZone
    trouve = False
    PbZone = False
    '**********************************************************
    
    'recherche dans "Vendeurs"
    If Not trouve Then
    'initialisation de c
      c = 1
    
      While c < nbcmax + 1 And Not trouve
      'initialisation de l
        l = 1
        While l < nblmax + 1 And Not trouve
        'test si reconnu
          If Nom = fVendeurs.getCellByPOsiton(c-1,0) Then 
            trouve = True
            ligne = l
            colonne = c
            onglet = "Vendeurs"
          End If
          l = l + 1
        Wend 'fin l
    
        If fVendeurs.getCellByPositon(c-1,nblmax) <> "" Then 
          PbZone = True
        End If
        c = c + 1
      Wend 'fin c
    End If
    
    'fin recherche dans "Vendeurs"
    
    '*********************************************************************
    'recherche dans "Acheteurs"
    If Not trouve Then
    'initialisation de c
      c = 1
    
      While c < nbcmax + 1 And Not trouve
        'initialisation de l
        l = 1
        While l < nblmax + 1 And Not trouve
          'test si reconnu
          If Nom = fAcheteurs.getCellByPosition(c-1,0) Then
            trouve = True
            ligne = l
            colonne = c
            onglet = "Acheteurs"
          End If
          l = l + 1
        Wend 'fin l
    
        If Worksheets("Acheteurs").getCellByPostion(c-1,nblmax) <> "" Then 
          PbZone = True
        End If
        c = c + 1
      Wend 'fin c
    End If
    'fin recherche dans "Acheteurs"
    
    '********************************************************************
    
    'recherche dans "Estimation"
    If Not trouve Then
      'initialisation de c
      c = 1
    
      While c < nbcmax + 1 And Not trouve
        'initialisation de l
        l = 1
        While l < nblmax + 1 And Not trouve
          'test si reconnu
          If Nom = fEstimation.getCellByPostion(c-1,0) Then 
            trouve = True
            ligne = l
            colonne = c
            onglet = "Estimation"
          End If
          l = l + 1
        Wend 'fin l
    
        If fEstimation.getCellByPostion(c-1,nblmax) <> "" Then 
          PbZone = True
        End If
        c = c + 1
      Wend 'fin c
    End If
    'fin recherche dans "Estimation"
    
    '********************************************************************
    
    'recherche dans "Annonces"
    If Not trouve Then
      'initialisation de c
      c = 1
    
      While c < nbcmax + 1 And Not trouve
        'initialisation de l
        l = 1
        While l < nblmax + 1 And Not trouve
          'test si reconnu
          If Nom = fAnnonces.getCellByPostion(c-1,0) Then 
            trouve = True
            ligne = l
            colonne = c
            onglet = "Annonces"
          End If
          l = l + 1
        Wend 'fin l
    
        If fAnnonces.getCellByPostion(c-1,nblmax) <> "" Then 
          PbZone = True
        End If
        c = c + 1
      Wend 'fin c
    End If
    'fin recherche dans "Annonces"
    
    '*******************************************************************
    
    'recherche dans "Prospect"
    If Not trouve Then
      'initialisation de c
      c = 1
    
      While c < nbcmax + 1 And Not trouve
        'initialisation de l
        l = 1
        While l < nblmax + 1 And Not trouve
          'test si reconnu
          If Nom = fProspect.getCellByPostion(c-1,0) Then 
            trouve = True
            ligne = l
            colonne = c
            onglet = "Prospect"
          End If
          l = l + 1
        Wend 'fin l
    
        If fProspect.getCellByPostion(c-1,nblmax) <> "" Then 
          PbZone = True
        End If
        c = c + 1
      Wend 'fin c
    End If
    'fin recherche dans "Prospect"
    
    '******************************************************************
    
    'recherche dans "Tous Prospects"
    If Not trouve Then
      'initialisation de c
      c = 1
    
      While c < nbcmax + 1 And Not trouve
        'initialisation de l
        l = 1
        While l < nblmax + 1 And Not trouve
          'test si reconnu
          If Nom = fTous_Prospects.getCellByPostion(c-1,0) Then 
            trouve = True
            ligne = l
            colonne = c
            onglet = "Tous Prospects"
          End If
          l = l + 1
        Wend 'fin l
    
        If fTous_Prospects.getCellByPostion(c-1,nblmax) <> "" Then 
          PbZone = True
        End If
        c = c + 1
      Wend 'fin c
    End If
    'fin recherche dans "Tous Prospects"
    
    
    '**********************************************************************
    'recherche dans "Arch Vend"
    If Not trouve Then
      'initialisation de c
      c = 1
    
      While c < nbcmax + 1 And Not trouve
        'initialisation de l
        l = 1
        While l < nblmax + 1 And Not trouve
          'test si reconnu
          If Nom = fArch_Vend.getCellByPostion(c-1,0) Then 
            trouve = True
            ligne = l
            colonne = c
            onglet = "Arch Vend"
          End If
          l = l + 1
        Wend 'fin l
    
        If fArch_Vend.getCellByPostion(c-1,nblmax) <> "" Then 
          PbZone = True
        End If
        c = c + 1
      Wend 'fin c
    End If
    'fin recherche dans "Arch Vend"
    
    '**********************************************************************
    
    
    'recherche dans "Mandats"
    If Not trouve Then
      'initialisation de c
      c = 1
    
      While c < nbcmax + 1 And Not trouve
        'initialisation de l
        l = 1
        While l < nblmax + 1 And Not trouve
          'test si reconnu
          If Nom = fMandats.getCellByPostion(c-1,0) Then 
            trouve = True
            ligne = l
            colonne = c
            onglet = "Mandats"
          End If
          l = l + 1
        Wend 'fin l
    
        If fMandats.getCellByPostion(c-1,nblmax) <> "" Then 
          PbZone = True
        End If
        c = c + 1
      Wend 'fin c
    End If
    'fin recherche dans "Mandats"
    
    '***********************************************************************
    'recherche dans "VENDUES"
    If Not trouve Then
      'initialisation de c
      c = 1
    
      While c < nbcmax + 1 And Not trouve
        'initialisation de l
        l = 1
        While l < nblmax + 1 And Not trouve
          'test si reconnu
          If Nom = fVENDUES.getCellByPostion(c-1,0) Then 
            trouve = True
            ligne = l
            colonne = c
            onglet = "VENDUES"
          End If
          l = l + 1
        Wend 'fin l
    
        If fVENDUES.getCellByPostion(c-1,nblmax) <> "" Then 
          PbZone = True
        End If
        c = c + 1
      Wend 'fin c
    End If
    'fin recherche dans "VENDUES"
    
    '***********************************************************************
    
    
    '#######################################################################
    
    'Affichage du résultat dans le cadre de l'onglet "Résultat"
    
    If trouve Then
      With fResultat       
        .getCellByPostion(1,1) = "trouvé"
        .getCellByPostion(1,2) = "ligne"
        .getCellByPostion(2,2) = ligne
        .getCellByPostion(1,3) = "colonne"
        .getCellByPostion(2,3) = colonne
        .getCellByPostion(1,4) = "onglet"
        .getCellByPostion(2,4) = onglet
    
        ' Affichage de la ligne trouvée
    
        .getCellByPostion(1,9) = lesFeuilles.getByName(onglet).getCellByPostion(1,ligne-1).Value
        .getCellByPostion(2,9) = lesFeuilles.getByName(onglet).getCellByPostion(2,ligne-1).Value
        .getCellByPostion(3,9) = lesFeuilles.getByName(onglet).getCellByPostion(3,ligne-1).Value
        .getCellByPostion(4,9) = lesFeuilles.getByName(onglet).getCellByPostion(4,ligne-1).Value
        .getCellByPostion(5,9) = lesFeuilles.getByName(onglet).getCellByPostion(5,ligne-1).Value
        .getCellByPostion(6,9) = lesFeuilles.getByName(onglet).getCellByPostion(6,ligne-1).Value
    
    Else
    
        For lgn = 2 To 5
          For col = 2 To 3
            .getCellByPostion(col-1,lgn-1) = ""
          Next
        Next
    
        For col = 2 To 6
          .getCellByPostion(col-1,9) = ""
        Next
    
        .getCellByPostion(2,9) = "introuvable"
    
        If PbZone = True Then
          .getCellByPostion(2,12) = "ATTENTION: Zone DE RECHERCHE TROP PETITE ! ! !"
        End If
      End With
    End If
    
    
    End Sub
    
    
    
    Sub RAZ3()
      With fResultat
        For lgn = 1 To 5
          For col = 2 To 3
            .Cells(col-1,lgn-1) = ""
          Next
        Next
    
        For col = 2 To 7
          .Cells(col-1,9) = ""
        Next
      End With
    
    End Sub
    
    0
    1. Pruls
       
      Merci pour ton aide!

      J'ai essayé, mais il me demande un sub. J'ai donc intégré la déclaration des variables dans Nom2.

      Il me dit alors que j'ai un probleme de boucle if then else dans la partie d'affichage du résultat.

      J'ai beau regarder, je vois pas le problème...


      Je ne peux pas transmettre le classeur excel, il s'agit d'un carnet d'adresse professionnel.


      En revanche, je peux le décrire et expliquer un peu mieux le but de la macro:

      Le carnet d'adresse comprend plusieurs onglets dans lesquels différentes rubriques (en colonne) permettent de trier les contacts.

      L'idée de la macro est de pouvoir retrouver la localisation d'un champs.
      Par exemple, je dispose d'un numéro de téléphone, mais je ne me souviens plus si il est déja enregistré dans le carnet d'adresse.
      En utilisant la macro, associé à des boutons ( 1 pour Nom2, 1 pour RAZ), je peux répondre à cette question.

      Merci d'avance!
      0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Je ne peux pas transmettre le classeur excel, il s'agit d'un carnet d'adresse professionnel.

    Je ne te demande pas le classeur.
    En revanche fait une copie de ton classeur, ensuite supprime les données et au lieux mes des choses bidon, donc j'aurai un classeur avec des données bidon

    Sous OooBasic il y a un sub Main

    donc ou tu mets tout le code dans Sub Main
    ou t'appel ta procédure dans Sub Main

    Mais comme je t'ai dit j'ai besoin de ton classeur, avec des données bidons pour tester d'abord ta macro excel

    En suite en OooBasic je n'aurai pas de problèmes.

    A toi.
    0
  3. Pruls
     
    J'ai fait une feuille bidon et simplifiée.

    Mais j'aurais besoin d'un mail.
    0
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    utilise https://www.cjoint.com/
    0
    1. Pruls
       
      0
      1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > Pruls
         
        Je vais regarder ce soir.

        Super ce site:
        Ici tu trouves encore plus envoyer de gros fichiers pieces jointes par mail
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Pruls
     
    up?
    0
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      je ne t'ai pas oublié mais je n'ai pas eu le temps.
      je vais essayer demain sinon, c'est promis pour fin week end.
      0
      1. Pruls > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
         
        Ok! J'avais eu peur :p.
        0
  7. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    j'ai testé chez moi et ça fonctionne.
    voici le fichier https://www.cjoint.com/?bgnRmRCeOP

    J'ai fait seulement pour la feuille Vendeurs, à toi d'ajouter pour les autres, le code c'est le même, seulement le nom de la feuille va changer

    Voici le code, j'ai mis en commentarie les variables que je n'utilise pas.
    Je te conseille d'ajouter les feuilles une par une et de tester le code, ça va t'eviter les casse têtes (d'ailleurs c'est pour ça que je me suis simplifié la tâche en travaillant sur une seule feuille).

    J'ai enlever pbZone qui d'après moi ne sers à rien, je ne peux pas avoir une zone plus petite de recherche ou plus grande puisque j'ai declaré les limites avec nblmax et nbcmax
    Voici le code
    ' Déclaration des variables 
    
    dim monClasseur as Object
    dim lesFeuilles as Object
    
    'dim fMandats        as Object
    'dim fProspect       as Object
    'dim fVENDUES        as Object
    'dim fAcheteurs      as Object
    'dim fAnnonces       as Object
    'dim fEstimation     as Object
    'dim fArch_Vend      as Object
    dim fVendeurs       as Object
    'dim fTous_Prospects as Object
    dim fResultat       as Object
    
    dim trouve as Boolean
    dim c      as Integer, l       as integer
    dim ligne  as Integer, colonne as Integer
    dim lgn    as Integer, col     as Integer
    dim onglet as String, Nom      as String
    
    Const nblmax = 600
    Const nbcmax = 7
    
    sub declaration()
    
    'Procédure pour déclaration
    'ça evite d'écrire deux fois la même chose
    	monClasseur = thisComponent
    	lesFeuilles = monClasseur.Sheets
    
    'fMandats        = lesFeuilles.getByName("Mandats")
    'fProspect       = lesFeuilles.getByName("Prospect") 
    'fVENDUES        = lesFeuilles.getByName("VENDUES ") 
    'fAcheteurs      = lesFeuilles.getByName("Acheteurs") 
    'fAnnonces       = lesFeuilles.getByName("Annonces") 
    'fEstimation     = lesFeuilles.getByName("Estimation") 
    'fArch_Vend      = lesFeuilles.getByName("Arch_Vend") 
    	fVendeurs       = lesFeuilles.getByName("Vendeurs") 
    'fTous_Prospects = lesFeuilles.getByName("Tous_Prospects")
    	fResultat       = lesFeuilles.getByName("Résultat")
    end sub
    '**********************************************
    
    Sub Nom2()
    
    declaration
    
    'On va chercher "nom" (case B1 de l'onglet "Résultat")
    'Nom = Worksheets("Résultat").Cells(1, 2).Value
    Nom = fResultat.getCellByPosition(1,0).String
    
    
    trouve = False
    
    '***********************************************************************
    'recherche dans "Vendeurs"
    If Not trouve Then
    'initialisation de c
    'dans ooobasic 
    'lignes et colonnes : la numérotation commence à zéro
    ' coordonées cellules : (colonne,ligne) ou plutôt (X,Y) 
      c = 2
    
      While c < nbcmax + 3 And Not trouve
      'initialisation de l
        l = 2
        While l < nblmax + 2 And Not trouve
        'test si reconnu
          If Nom = fVendeurs.getCellByPosition(c,l).String Then
            trouve = True
            ligne = l
            colonne = c
            onglet = "Vendeurs"
          End If
          l = l + 1
        Wend 'fin l
        c = c + 1
      Wend 'fin c
    End If
    
    '#######################################################################
    
    'Affichage du résultat dans le cadre de l'onglet "Résultat"
    
    If trouve Then
      With fResultat       
        .getCellByPosition(1,1).string = "trouvé"
        .getCellByPosition(1,2).string = "ligne"
        .getCellByPosition(2,2).string = ligne
        .getCellByPosition(1,3).string = "colonne"
        .getCellByPosition(2,3).string = colonne
        .getCellByPosition(1,4).string = "onglet"
        .getCellByPosition(2,4).string = onglet
    
        ' Affichage de la ligne trouvée
        with lesFeuilles.getByName(onglet)
          fResultat.getCellByPosition(1,9).String = .getCellByPosition(1,ligne).String
          fResultat.getCellByPosition(2,9).String = .getCellByPosition(2,ligne).String
          fResultat.getCellByPosition(3,9).String = .getCellByPosition(3,ligne).String
          fResultat.getCellByPosition(4,9).String = .getCellByPosition(4,ligne).String
          fResultat.getCellByPosition(5,9).String = .getCellByPosition(5,ligne).String
          fResultat.getCellByPosition(6,9).String = .getCellByPosition(6,ligne).String
        End With
       End With
    Else
    	RAZ3
        fResultat.getCellByPosition(1,1).string = "introuvable"
    End If
    
    
    End Sub
    
    
    
    Sub RAZ3()
    declaration
        For lgn = 1 To 4
          For col = 1 To 2
            fResultat.getCellByPosition(col,lgn).string = ""
          Next
        Next
        
        For col = 1 To 6
        	fResultat.getCellByPosition(col,9).string = ""
        Next
    
    End Sub
    0
    1. Pruls
       
      Cette macro a pour but d'être utilisée par des perseonne qui ne savent pas programmer.

      L'utilisation d'une zone de recherche est là pour gagner du temps. En effet, il n'est pas nécessaire de faire la recherche dasn toute la feuille quand seulement les 100 premières lignes sont utilisées.

      Or, le carnet d'adresse s'agrandit au fil du temps, à tel point qu'il risque de déborder de la zone prédéfinie.

      PbZone est donc là pour déceler le fait que ca déborde et qu'il fut modifier le paramétrage de la zone de recherche.


      J'ai mis la macro que tu as écrite entre sub et end.

      Lorsque je clique sur le bouton "recherche", je n'ai aucun résultat alors qu'l devrait y en avoir un. :/

      J'ai vu que le format de la feuille variait. N'est il pas plus simple de tout mettre en format texte, sachant qu'aucun calcul ne sera effectué?

      J'ai pas le temps de me plonger dans le code ooobasic, mais avec tout ce que tu as fait, je devrais m'en sortir!

      ( Je voudrais pas abuser mais, si tu as des liens vers des listings de commandes, ca serait génial! )

      Merci beaucoup!
      0
  8. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    'Procédure pour déclaration

    j'ai voulu dire initialisation des variables
    tu peux appeller la procédure initialisation mais dans ce cas il faut aussi modifier dans les procédures appelantes
    0
  9. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    d'accord pour ça
    Or, le carnet d'adresse s'agrandit au fil du temps, à tel point qu'il risque de déborder de la zone prédéfinie.

    PbZone est donc là pour déceler le fait que ca déborde et qu'il fut modifier le paramétrage de la zone de recherche.


    En ce cas il faut mettre la condition autrement, puisque comment tu as écrit le code s'il n'est pas rempli il ne va pas chercher toute la zone en revanche s'il deborde alors il ne fait rien puisqu'il y a une zone prédéfini

    il ne faut pas mettre tout entre End et Sub (il sont déjà écrit (il y a 2 procédures

    Mais pourquoi ne téléchage tu le fichier que je t'ai donné.
    A part pbZone (je vais corriger ça) il fonctionne, donc je ne vois pas où est le problème (je l'ai testé et chez moi fonctionne)

    Télécharge le fichier et regarde comment le code est positionné

    tu dois avoir 3 zones (voici la structure)

    ' les variables
    définition des variables
    .
    .
    .
    
    ' 1er Sub
    Sub Nom2()
    .
    .
    .
    .
    .
    End Sub
    
    
    ' 2ème Sub
    
    Sub RAZ3()
    .
    .
    End Sub

    0
    1. Pruls
       
      Ouais, je l'ai dl.

      Mais quand je clique sur le bouton recherche, j'ai pas de résultat, que le test soit censé m'en renvoyer un ou pas.


      Le test que j'avais écrit pour voir si la zone de recherche suffisait était fait pour que cette fameuse zone soit agrandie manuellement.

      Si il y a un élément qui se trouve dans la ligne contigue à la zone de recherche, je renvois un message d'erreur disant qu'il faut modifier la restriction de recherche, qu'elle trop stricte. Dans la feuille originale, il y a une case dédiée dans l'onglet résultat.

      Je n'ai pas décrit la forme du résultat, et c'est peut être ca qui fait qu'on se comprend pas:

      Il y a 3 cas:

      1) la recherche est fructueuse. Alors le résultat, à afficher dans le cadre dédié, est la ligne où la réponse à été trouvée.

      2) la recherche est infructueuse. Un message le disant doit s'afficher en dessous de la case de saisie.

      3) la zone de recherche semble trop restrictive par rapport au classeur: un message indiquant qu'il faut changer les valeurs délimitant la zone de recherche doit s'afficher, dans une case dédiée.


      Par rapport au code que j'ai écrit, il y a au moins deux trucs que j'aurais aimé savoir faire:

      Ecrire une fonction plutot qu'une procédure pour que l'ajout d'onglet soit plus simple pour un profane et que la zone de recherche se mette à jour toute seule.

      Pour optimiser le temps de recherche, il faudrait que la zone ne soit pas la même pour chaque onglet, mais qu'elle s'adapte à chacun...
      Ca suppose que le code puisse se modifier d'un fois sur l'autre, par un stockage des paramètres, sur la feuille résultat par exemple. Il faut alors faire attention à ce que le profane ne soit pas tenté de les modifier...

      Je vais essayer de me plonger la dedans le week end qui vient, là, je suis en partiel...

      Encore merci pour ton aide, précieuse!
      0
  10. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Pour le débordement de la zone tu peux mettre la condition autrement

    Tant Que la zone n'est pas vide Et nbLigne <=600
      fait la recherche 
      nbLigne = nbLigne + 1
    Fin Tant Que
    test=nbLigne
    
    If test > 600 Alors
      débordement
    End If
    0
  11. Pruls
     
    Pff, j'ai trouvé bien mieux pour mon problème:

    ctrl + f ou la fonction rechercher d'ooo.
    0
  12. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Je te rappelle ta question :-))

    Pouvez vous m'aider à traduire en OOoBasic la macro que j'avais écrit?

    Et voici ma question pour
    Pff, j'ai trouvé bien mieux pour mon problème:

    ctrl + f ou la fonction rechercher d'ooo.


    Tu as aussi Ctrl+F ou la fonction rechercher sous Excel. Alors pourquoi tu as créé cette macro sous Excel?!
    0
  13. pruls
     
    Tout simplement car je ne la connaissais pas dans son intégralité, et que aillant vu les macro en cours, ca me permettait de tester mes connaissances...

    Dans l'option rechercher, il est possible d'élargir la recherche à tout le classeur, ce que je ne savais pas, d'ou l'intéret de la macro :)

    Merci de t'être pencher sur le sujet.

    Si jamais tu sais si un projet de programme de traduction de macro en ooomacro et inversement existe, ca peut etre sacrément utile.

    Merci encore.
    0