CountA d'une autre feuille

Bonjour,

J'aurais besoin de support pour une fonction dans une macro.

Je veux calculer le nombre de cellule non-vide sur une plage d'un autre onglet à l'aide d'une macro

L'onglet ou je veux faire le calcul de non-vide: T_Apec, range A2 à A999

La destination du calcul de nombre de cellule non-vide est dans l'onglet: Champs_et_doublons

La cellule de destination est D8

Voici la macro.

Sub MAJ_Valeur()

'valeur analyte

Worksheets("Champs_et_doublons").Range("D8").Activate

ActiveCell.Value = Worksheets("T_APEC").WorksheetFunction.CountA(Range("A2:a999"))

End Sub

_______________

Est-ce possible de mettre une condition en début de macro qui excécute la macro uniquement si l'onglet T_APEC existe.

Merci de votre support

Bonjour,

Un test :

Sub MAJ_Valeur()
'valeur analyte
For i = 1 To Worksheets.Count
    If Worksheets(i).Name = "T_APEC" Then
    Worksheets("Champs_et_doublons").Range("D8").Activate
    ActiveCell.Value = Worksheets("T_APEC").WorksheetFunction.CountA(Range("A2:A999"))
    End If
Next i
End Sub

Cdlt,

Allo Ergotamine.

Ca bug pour:

 ActiveCell.Value = Worksheets("T_APEC").WorksheetFunction.CountA(Range("A2:A999"))

Bonsoir La_baie_1976, Ergotamine, le forum,

une variante....à tester....

Function WsExist(Nom$) As Boolean
   On Error Resume Next
   WsExist = Worksheets(Nom).Index
End Function

Sub test()
   If Not WsExist("T_Apec") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
    With Sheets("Champs_et_doublons")
     .Range("D8") = Application.WorksheetFunction.CountA(Sheets("T_Apec").Range("A2:a999"))
    End With
End Sub
1classeur1.xlsm (29.97 Ko)

Cordialement,

Merci beaucoup Xorsankukai.

Il ne me reste qu'à le faire pour 26 tables et relations :)

Merci de votre support :)

Bonjour à tous,

Votre code était éronné de base sur la formule :

Sub MAJ_Valeur()
'valeur analyte
For i = 1 To Worksheets.Count
    If Worksheets(i).Name = "T_APEC" Then
    Worksheets("Champs_et_doublons").Range("D8").Value = WorksheetFunction.CountA(Worksheets("T_APEC").Range("A2:A999"))
    End If
Next i
End Sub

Cdlt,

Bonjour à tous,

ce n'est pas une fonction que tu veux, mais un sub.
Une fonction retourne une valeur dans une variable. Comme a= SIN(123)

Sub MAJ_Valeur()
    'valeur analyte
    On Error GoTo fin
    Worksheets("Champs_et_doublons").Range("D8").Value = Application.WorksheetFunction.CountA(Worksheets("T_APEC").Range("A2:a999"))
    On Error GoTo 0
    Exit Sub
fin:
    MsgBox "Feuille T_APEC absente"
End Sub

Activer D8 n'est pas nécessaire, ça ralenti pour rien.
eric

Bonjour.

Voici le code que j'ai fais avec votre aide.

Quand la feuille est absente il sort complètement de la macro alors que je voudrais seulement qu'il passe à la prochaine étape.

Function WsExist(Nom$) As Boolean
   On Error Resume Next
   WsExist = Worksheets(Nom).Index
End Function

Sub MAJ_NB()
'*********************
'Mise a jour Analyte
'*************************
   If Not WsExist("Analytes") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
    With Sheets("Champs_et_doublons")
     .Range("d8") = Application.WorksheetFunction.CountA(Sheets("Analytes").Range("A2:a9999"))
    End With

'*********************
'Mise a jour nb APEC
'*************************
   If Not WsExist("Apec") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
    With Sheets("Champs_et_doublons")
     .Range("d9") = Application.WorksheetFunction.CountA(Sheets("Apec").Range("A2:a999"))
    End With

   If Not WsExist("T_Apec") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
    With Sheets("Champs_et_doublons")
     .Range("F9") = Application.WorksheetFunction.CountA(Sheets("T_Apec").Range("A2:a999"))
    End With

'*********************************************************************************************************
'MAJ ContaminatedSiteAreasByMedia
'********************************************

 If Not WsExist("ContaminatedSiteAreasByMedia") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
    With Sheets("Champs_et_doublons")
     .Range("D10") = Application.WorksheetFunction.CountA(Sheets("ContaminatedSiteAreasByMedia").Range("A2:a999"))
    End With

  If Not WsExist("T_media_fail") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
    With Sheets("Champs_et_doublons")
     .Range("F10") = Application.WorksheetFunction.CountA(Sheets("T_media_fail").Range("A2:a999"))
    End With

'*********************************************************************************************************
'MAJ Contamination
'***************************
If Not WsExist("Contamination") Then MsgBox "Cette feuille n'existe pas !": 'Exit Sub
    With Sheets("Champs_et_doublons")
     .Range("D11") = Application.WorksheetFunction.CountA(Sheets("Contamination").Range("A2:a999"))
    End With

   If Not WsExist("T_contamination") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
    With Sheets("Champs_et_doublons")
     .Range("F11") = Application.WorksheetFunction.CountA(Sheets("T_contamination").Range("A2:a999"))
    End With
'*********************************************************************************************************
'MAJ decision unit
'***************************
If Not WsExist("DecisionUnits") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
    With Sheets("Champs_et_doublons")
     .Range("d12") = Application.WorksheetFunction.CountA(Sheets("DecisionUnits").Range("A2:a999"))
    End With

   If Not WsExist("T_Decision_unit") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
    With Sheets("Champs_et_doublons")
     .Range("f12") = Application.WorksheetFunction.CountA(Sheets("T_Decision_unit").Range("A2:a999"))
    End With

J'en ai pour 3x comme ca :)

Donc si la feuille n'existe pas il faudrait passer à la prochaine validation.

Merci de votre support

Re,

Merci pour ton retour,

Voici une solution (parmis d'autres)....

Function WsExist(Nom$) As Boolean
   On Error Resume Next
   WsExist = Worksheets(Nom).Index
End Function

Sub test()
    With Sheets("Champs_et_doublons")
     On Error Resume Next
     .Range("D8") = IIf(WsExist("Analytes"), Application.WorksheetFunction.CountA(Sheets("Analytes").Range("A2:a999")), "")
     .Range("D9") = IIf(WsExist("T_Apec"), Application.WorksheetFunction.CountA(Sheets("T_Apec").Range("A2:a999")), "")
     .Range("D10") = IIf(WsExist("ContaminatedSiteAreasByMedia"), Application.WorksheetFunction.CountA(Sheets("ContaminatedSiteAreasByMedia").Range("A2:a999")), "")
     .Range("D11") = IIf(WsExist("test"), Application.WorksheetFunction.CountA(Sheets("test").Range("A2:a999")), "")
     'ETC......
    End With
End Sub

Si tu postais un fichier, tu aurais certainement une solution plus adaptée....

2classeur1.xlsm (34.08 Ko)

Cordialement,

Rechercher des sujets similaires à "counta feuille"