[Excel | VBA] Condition sur nom de la feuille [Résolu]

Signaler
Messages postés
80
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
30 juillet 2008
-
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
-
Bonjour à toutes et à tous,

Mon code est presque terminé, cependant, je boque sur une partie.
Ce code permet de parcourir l'ordinateur pour ouvrir n'importe quel fichier xls.
Une fois le fichier ouvert, il recherche la feuille appelée "FICHE FR", et fait l'extraction à partir de cellules définies.

Ce que je souhaite faire, est que cela fasse l'extraction si la feuille du document s'appelle "FICHE FR" , mais aussi si elle s'appelle "FICHE GB" .
Il peut y avoir l'un autre l'autre nom , mais pas les deux à la fois dans le même classeur xls.

De plus, j'aimerais bien faire en sorte d'afficher une msgbox si le document sélectionné ne possède pas de feuille qui corresponde à l'un ou l'autre des noms.

Voici mon code actuel, celui ci fonctionne très bien pour le cas ou il ne peut y avoir qu'un seul nom de feuille  : FICHE FR

Sub Extraction()


 
   Dim ProchaineLigneVide As Integer
   Dim FileToOpen As Variant
   Dim mes1 As Variant
   Dim marecherche As String
   Dim No As String
  
    Select Case design_pays
        Case "FR"
            mes1 = "Importation annulée !"
           
        Case "GB"
            mes1 = "Importation cancelled !"
    End Select
   
On Local Error GoTo MyOpen
    FileToOpen = Application.GetOpenFilename("Tout les fichiers Excel (*.xl*;*.xls;*.xla;*.xml;*.xlm;*.xlc;*.xlw),")
    Module5.NoFIQ
    If FileToOpen Then
MyOpen:
        If Err.Number = 13 Then
            Err.Clear: On Local Error GoTo 0
            Workbooks.Open FileToOpen
        End If


    marecherche = ActiveWorkbook.Sheets("FICHE FR").Range("O10").Value
   
    With ThisWorkbook.Sheets("Liste Fournisseurs").Range("a:a")
    Set c = .find(marecherche, LookIn:=xlValues)
    End With
    If c Is Nothing Then
    Module1.affiche_fournisseur
    End If
          
    With ThisWorkbook.Sheets("recep")
    ProchaineLigneVide = .Range("A65536").End(xlUp).Row + 1
   
    .Range("A" & ProchaineLigneVide).Value = Workbooks("GestionFIQ.xls").Sheets("Présentation").Range("E100").Value
    .Range("B" & ProchaineLigneVide).Value = ActiveWorkbook.Sheets("FICHE FR").Range("D11").Value
    .Range("C" & ProchaineLigneVide).Value = ActiveWorkbook.Sheets("FICHE FR").Range("D10").Value
    .Range("D" & ProchaineLigneVide).Value = ActiveWorkbook.Sheets("FICHE FR").Range("O10").Value
    .Range("E" & ProchaineLigneVide).Value = ActiveWorkbook.Sheets("FICHE FR").Range("P2").Value
    .Range("F" & ProchaineLigneVide).Value = ActiveWorkbook.Sheets("FICHE FR").Range("B16").Value
    .Range("G" & ProchaineLigneVide).Value = Workbooks("gestionfiq.xls").Sheets("Liste Fournisseurs").Range("g1").Text
    .Range("H" & ProchaineLigneVide).Value = Workbooks("gestionfiq.xls").Sheets("Liste fournisseurs").Range("g2").Text
   
    End With
       
    No = Workbooks("GestionFIQ.xls").Sheets("présentation").Range("E100").Value
       
    MsgBox ("Nouvelle F.I.Q. N° " & No)
    ActiveWorkbook.Close
Exit Sub


    End If
    MsgBox mes1
End Sub

10 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
49
Salut,
Sinon tu fais une recherche dans le nom des feuilles du classeur.

En imaginant que dans un classeur il n'y ai QUE FR ou QUE GB

Sub Extraction()
Dim ProchaineLigneVide As Long
Dim FileToOpen As Variant
Dim mes1 As String
Dim marecherche As String
Dim No As String
Dim Ws As Worksheet

   Select Case design_pays
       Case "FR": mes1 = "Importation annulée !"
       Case "GB": mes1 = "Importation cancelled !"
   End Select

On Local Error GoTo MyOpen
   FileToOpen = Application.GetOpenFilename("Tout les fichiers Excel (*.xl*;*.xls;*.xla;*.xml;*.xlm;*.xlc;*.xlw),")
   Call Module5.NoFIQ
   If FileToOpen Then
MyOpen:
       If Err.Number = 13 Then
           Err.Clear: On Local Error GoTo 0
           Call Workbooks.Open(FileToOpen)
       End If
       
       'on passe en revue toutes les feuille du classeur
       'et on regarde si il y en a une appelée FICHE FR ou FICHE GB
       For Each Ws In ActiveWorkbook.Worksheets           If UCase$(Ws.Name) "FICHE FR" Or UCase$(Ws.Name) "FICHE GB" Then
               Exit For
           End If
       Next
       
   
       marecherche = Ws.Range("O10").Value
   
       With ThisWorkbook.Sheets("Liste Fournisseurs").Range("a:a")
           Set c = .Find(marecherche, LookIn:=xlValues)
       End With
       If c Is Nothing Then Call Module1.affiche_fournisseur
           With ThisWorkbook.Sheets("recep")
               ProchaineLigneVide = .Range("A65536").End(xlUp).Row + 1
     
               .Range("A" & ProchaineLigneVide).Value = Workbooks("GestionFIQ.xls").Sheets("Présentation").Range("E100").Value
               .Range("B" & ProchaineLigneVide).Value = Ws.Range("D11").Value
               .Range("C" & ProchaineLigneVide).Value = Ws.Range("D10").Value
               .Range("D" & ProchaineLigneVide).Value = Ws.Range("O10").Value
               .Range("E" & ProchaineLigneVide).Value = Ws.Range("P2").Value
               .Range("F" & ProchaineLigneVide).Value = Ws.Range("B16").Value
               .Range("G" & ProchaineLigneVide).Value = Workbooks("gestionfiq.xls").Sheets("Liste Fournisseurs").Range("g1").Text
               .Range("H" & ProchaineLigneVide).Value = Workbooks("gestionfiq.xls").Sheets("Liste fournisseurs").Range("g2").Text
           End With
       
           No = Workbooks("GestionFIQ.xls").Sheets("présentation").Range("E100").Value
       
           Call MsgBox("Nouvelle F.I.Q. N " & No)
           Set Ws = Nothing
           Call ActiveWorkbook.Close

       Exit Sub
   End If
   Call MsgBox(mes1)
End Sub<hr />, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i€n
Pensez: Réponse acceptée
Messages postés
1229
Date d'inscription
vendredi 16 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2009
1
Salut;

Sub Extraction()
   Dim ProchaineLigneVide As Integer
   Dim FileToOpen As Variant
   Dim mes1 As Variant
   Dim marecherche As String
   Dim No As String
  
    Select Case design_pays --> Variable public? C'est un choix de l'utilisateur? Si oui tu peux t'en servir pour la suite.
        Case "FR"
            mes1 = "Importation annulée !"
           
        Case "GB"
            mes1 = "Importation cancelled !"
    End Select
   
On Local Error GoTo MyOpen
    FileToOpen = Application.GetOpenFilename("Tout les fichiers Excel (*.xl*;*.xls;*.xla;*.xml;*.xlm;*.xlc;*.xlw),")
    Module5.NoFIQ
    If FileToOpen Then
MyOpen:
        If Err.Number = 13 Then
            Err.Clear: On Local Error GoTo 0
            Workbooks.Open FileToOpen
        End If

    marecherche = ActiveWorkbook.Sheets("FICHE FR").Range("O10").Value
    marecherche = ActiveWorkbook.Sheets("FICHE "& design_pays ).Range("O10").Value '-->Rapport à ma remaque plus haut

    With ThisWorkbook.Sheets("Liste Fournisseurs").Range("a:a")
    Set c = .find(marecherche, LookIn:=xlValues)
    End With
    If c Is Nothing Then
    Module1.affiche_fournisseur
    End If
          
    With ThisWorkbook.Sheets("recep")
    ProchaineLigneVide = .Range("A65536").End(xlUp).Row + 1
   
    .Range("A" & ProchaineLigneVide).Value = Workbooks("GestionFIQ.xls").Sheets("Présentation").Range("E100").Value
    .Range("B" & ProchaineLigneVide).Value = ActiveWorkbook.Sheets("FICHE "& design_pays ).Range("D11").Value
    .Range("C" & ProchaineLigneVide).Value = ActiveWorkbook.Sheets("FICHE "& design_pays ).Range("D10").Value
    .Range("D" & ProchaineLigneVide).Value = ActiveWorkbook.Sheets("FICHE "& design_pays ).Range("O10").Value
    .Range("E" & ProchaineLigneVide).Value = ActiveWorkbook.Sheets("FICHE "& design_pays ).Range("P2").Value
    .Range("F" & ProchaineLigneVide).Value = ActiveWorkbook.Sheets("FICHE "& design_pays ).Range("B16").Value
    .Range("G" & ProchaineLigneVide).Value = Workbooks("gestionfiq.xls").Sheets("Liste Fournisseurs").Range("g1").Text
    .Range("H" & ProchaineLigneVide).Value = Workbooks("gestionfiq.xls").Sheets("Liste fournisseurs").Range("g2").Text
   
    End With
       
    No = Workbooks("GestionFIQ.xls").Sheets("présentation").Range("E100").Value
       
    MsgBox ("Nouvelle F.I.Q. N° " & No)
    ActiveWorkbook.Close
Exit Sub

    End If
    MsgBox mes1
End Sub

C'est une idée....
S.L.B.

<hr />*********************************************************************************
<>
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
49
Salut,
Tu peux peu etre te servir de ta variable design_pays pour la concaténer avec le nom de la feuille

'Ex:
ActiveWorkbook.Sheets("FICHE FR")
'devient
ActiveWorkbook.Sheets("FICHE " & design_pays)

Sub Extraction()
Dim ProchaineLigneVide As Long
Dim FileToOpen As Variant
Dim mes1 As String
Dim marecherche As String
Dim No As String
 
   Select Case design_pays
       Case "FR": mes1 = "Importation annulée !"
       Case "GB": mes1 = "Importation cancelled !"
   End Select
 
On Local Error GoTo MyOpen
   FileToOpen = Application.GetOpenFilename("Tout les fichiers Excel (*.xl*;*.xls;*.xla;*.xml;*.xlm;*.xlc;*.xlw),")
   Call Module5.NoFIQ
   If FileToOpen Then
MyOpen:
       If Err.Number = 13 Then
           Err.Clear: On Local Error GoTo 0
           Workbooks.Open FileToOpen
       End If

       marecherche = ActiveWorkbook.Sheets("FICHE FR").Range("O10").Value
 
       With ThisWorkbook.Sheets("Liste Fournisseurs").Range("a:a")
           Set c = .Find(marecherche, LookIn:=xlValues)
       End With
       If c Is Nothing Then Call Module1.affiche_fournisseur
         
       With ThisWorkbook.Sheets("recep")
           ProchaineLigneVide = .Range("A65536").End(xlUp).Row + 1
   
           .Range("A" & ProchaineLigneVide).Value = Workbooks("GestionFIQ.xls").Sheets("Présentation").Range("E100").Value
           .Range("B" & ProchaineLigneVide).Value = ActiveWorkbook.Sheets("FICHE FR").Range("D11").Value
           .Range("C" & ProchaineLigneVide).Value = ActiveWorkbook.Sheets("FICHE FR").Range("D10").Value
           .Range("D" & ProchaineLigneVide).Value = ActiveWorkbook.Sheets("FICHE FR").Range("O10").Value
           .Range("E" & ProchaineLigneVide).Value = ActiveWorkbook.Sheets("FICHE FR").Range("P2").Value
           .Range("F" & ProchaineLigneVide).Value = ActiveWorkbook.Sheets("FICHE FR").Range("B16").Value
           .Range("G" & ProchaineLigneVide).Value = Workbooks("gestionfiq.xls").Sheets("Liste Fournisseurs").Range("g1").Text
           .Range("H" & ProchaineLigneVide).Value = Workbooks("gestionfiq.xls").Sheets("Liste fournisseurs").Range("g2").Text
       End With
     
       No = Workbooks("GestionFIQ.xls").Sheets("présentation").Range("E100").Value
     
       Call MsgBox("Nouvelle F.I.Q. N

NOTE:
Ta variable ProchaineLigneVide DOIT etre de type Long et non Integer (65535 ne tiens pas dans un Integer)

pourquoi mes1 est il de type Variant alors qu'il devrait être de type String

@+: Ju£i€n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
49
Re,
Bah voilà le temps de rédiger le message et PAN!!! je me suis fait grillé!!!

@+: Ju£i€n
Pensez: Réponse acceptée
Messages postés
80
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
30 juillet 2008

Merci à vous deux d'avoir pris le temps de répondre.
Cependant, il y a un léger soucis, j'avais déjà pensé à faire :

ActiveWorkbook.Sheets("FICHE FR")
'devient
ActiveWorkbook.Sheets("FICHE " & design_pays)

mais le problème est :

Un francais utilise le programme, donc il laisse la langue par défaut ( FR ), mais il peut etre amené à importer une "fiche fr" ou une "fiche gb".

De même que si quelque d'anglophone utilise le programme, il met la langue en anglais, mais sera amené à importer soit des fiche fr soit fiche gb.

D'ou mon problème, je ne vois pas torp comment gérer ca   : \
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
5
Question : Dans ton premier post, je lis :
"Ce que je souhaite faire, est que cela fasse l'extraction si la feuille du document s'appelle "FICHE FR" , mais aussi si elle s'appelle "FICHE GB" .
Il peut y avoir l'un autre l'autre nom , mais pas les deux à la fois dans le même classeur xls."

Je n'ai pas eu le courage de lire tout ton code mais, si c'est juste le nom qui change, étant donné qu'il ne peut y avoir qu'un seul et unique nom dans ton fichier, c'est donc la même feuille (à moins que la structure du fichier ne change aussi ?).
S'il s'agit de la même feuille, tu dois pouvoir utiliser son index à la place du nom.
Si tu utilises ActiveWorkbook.Sheets(3) (en admettant que la feuille soit la 3ème de ton fichier, toi seule le sait), dans la version anglaise, le .name sera FICHE GB et FICHE FR dans la version française, tu n'as même pas besoin de t'en occuper.

Après, à toi de voir si c'est utilisable dans ton cas.

Molenn
Messages postés
80
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
30 juillet 2008

La feuille à partir de laquelle l'extraction est faite fait parti d'un classeur ou il n'y a qu'une seule feuille.

Cependant, je suis obligé de paramètrer des noms de feuille parce que si l'utilisateur ouvre n'importe quel autre fichier xls, l'extraction va se faire sur des données sans aucun rapport.

Donc en final , je suis bien obligé de faire avec Fiche FR et Fiche GB
Messages postés
80
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
30 juillet 2008

La feuille à partir de laquelle l'extraction est faite fait parti d'un classeur ou il n'y a qu'une seule feuille.

Cependant, je suis obligé de paramètrer des noms de feuille parce que si l'utilisateur ouvre n'importe quel autre fichier xls, l'extraction va se faire sur des données sans aucun rapport.

Donc en final , je suis bien obligé de faire avec Fiche FR et Fiche GB
Messages postés
80
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
30 juillet 2008

Merveilleux tout ca.

Je ne connaissais pas comme fonction , maintenant , je vais la mémoriser.

Encore merci pour l'aide que vous m'avez apportée, et pour le temps que vous avez passé à lire, chercher, et à répondre.

Bonne journée à vous,

Cordialement,

AiDuK
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

sinon tu peux simplement activer la feuille et gerer l'erreur dans le cas ou elle n'existe pas :

dim NomFeuille(2) As String, i As Long
NomFeuille(1) = "FICHE FR"
NomFeuille(2) = "FICHE GB"

For i = 1 to 2
  err.clear
  on error resume next
   ActiveWorkbook.Worksheets(NomFeuille(i)).Activate
   if err = 0 then Exit For
   if i=2 then
      MsgBox "Importation annulée !/Importation cancelled !"
      err.clear
      Exit Sub
   End If
Next i

etc.

A+