Pb Code

Résolu
Louloude74 Messages postés 62 Statut Membre -  
Louloude74 Messages postés 62 Statut Membre -
Bonjour à tous,

Si j'avais des cheveux je serai en train de tous me les arracher. Il y a un truc que je ne comprend pas. Il y a ce bout de code

If Application.WorksheetFunction.CountIf(ActiveWorkbook.Sheets("Catégorie").Range(Cells(2, Colonne), Cells(LigneDes + 1, Colonne)), ActiveWorkbook.Sheets("Saisie").Range("Description").Value) = 0 Then

qui fonctionne très bien lorsque je suis sur la bonne feuille ici "Catégorie". Par contre dès que je lance la macro depuis une autre feuille j'ai un message d'erreur et je dois manuellement sélectionner la feuille "Catégorie" puis relancer la macro pour que ça fonctionne. Ce que je ne comprend pas c'est que ça fonctionne très bien avec une autre macro où j'utilise le même bout de code.

Si une âme charitable a une explication, je suis preneur.

Par avance merci de votre aide.

A voir également:

1 réponse

f894009 Messages postés 17413 Statut Membre 1 715
 
Bonjour,

En effet marche pas dans cette ecriture, mais ok comme ceci

Sub test()
    Dim t As Range
    
    colonne = 1
    lignedes = 7
    With Worksheets("Categorie")
        Set t = .Range(.Cells(2, colonne), .Cells(lignedes + 1, colonne))   'mise en memoire
    End With
    If Application.CountIf(t, Worksheets("Saisie").Range("Description").Value) = 0 Then
        MsgBox "Pas trouve"
    Else
        MsgBox "Trouve au moins une fois"
    End If
End Sub
1
Louloude74 Messages postés 62 Statut Membre 1
 
Bonjour,

Ca marche extraordinairement bien. Je suis super content.

Vraiment merci beaucoup. Mes cheveux commencent à pousser à nouveaux ;)

Un énorme MERCI.

Bonne journée et à très bientôt. (et oui j'aurai bientôt de nouvelles questions).

Cdt, Ludwig
0
Louloude74 Messages postés 62 Statut Membre 1
 
Bonjour à toi,

Je reviens à la charge. JE suis confronter au même problème que précédemment et j'ai adapté ta solution à ce code mais le problème persiste. Il faut que je sois sur la feuille 3Catégorie" pour que cela fonction mais si je lance la macro depuis une autre feuille, c'est débogage.
Dans ce code je souhaite renommer une plage de cellule en fonction d'une valeur. Le but est de pouvoir utiliser ce nom de cellule ou de page de cellule dans une liste déroulante en cascade. Comme ceci la plage s'ajustera automatiquement en fonction des saisies.

Encore merci et à très vite.

Sub NommerPlageDescription()

Dim Plage As Range
Dim Cellule As Range
Dim Ligne As Integer
Dim Colonne As Integer
Dim ColonneFin As Integer

ColonneFin = Sheets("Catégorie").Cells(1, Cells.Columns.Count).End(xlToLeft).Column
Colonne = 2

While Colonne <= ColonneFin

Ligne = Worksheets("Catégorie").Cells(65536, Colonne).End(xlUp).Row

With Worksheets("Catégorie")
Set Plage = .Range(.Cells(2, Colonne), .Cells(Ligne, Colonne)) 'mise en memoire
Set Cellule = Cells(1, Colonne)
End With

ActiveWorkbook.Names.Add Name:=Replace(Cellule.Value, " ", ""), RefersToR1C1:=Plage 'Renomme la cellule

Colonne = Colonne + 1
Ligne = Ligne + 1

Wend

End Sub
0
f894009 Messages postés 17413 Statut Membre 1 715
 
Bonjour,
Deja pourquoi ceci: Replace(Cellule.Value, " ", "")
0
Louloude74 Messages postés 62 Statut Membre 1
 
Bonjour à toi,

Tout d'abord merci de te pencher sur mon problème et qui plus est de au pied levé !

J'utilise replace() pour enlever les espaces entre chaque mot car les mots composés ne sont pas admis pour renommer les cellules ou plage de cellule.
0
f894009 Messages postés 17413 Statut Membre 1 715
 
Re,

Certes, certes, alors ne mettez pas de Blanc...........

Si vous tenez a vos Blancs

Sub NommerPlageDescription()
    Dim Plage As Range
    Dim Cellule
    Dim Ligne As Integer
    Dim Colonne As Integer
    Dim ColonneFin As Integer

    ColonneFin = Worksheets("Catégorie").Cells(1, Cells.Columns.Count).End(xlToLeft).Column
    Colonne = 2
    While Colonne <= ColonneFin
        With Worksheets("Catégorie")
            Ligne = .Cells(65536, Colonne).End(xlUp).Row
            Set Plage = .Range(.Cells(2, Colonne), .Cells(Ligne, Colonne)) 'mise en memoire
            Cellule = Replace(.Cells(1, Colonne), " ", "")
        End With
        ActiveWorkbook.Names.Add Name:=Cellule, RefersToR1C1:=Plage 'Renomme la cellule
        Colonne = Colonne + 1
        Ligne = Ligne + 1
    Wend
End Sub
0