Trouver "x" et avoir sa colonne

Bonjour, (EN VBA)

Je voudrais avoir le numéro de colonne de la cellule qui contient "x" pour la ligne 12 de la colonne X à AI (il y a qu'un seul "x" pour la ligne)

Sachant que ce "x" vient d'une liste déroulante mais je ne sais pas si cela change quelque chose

Merci pour votre aide

Bonjour

=EQUIV("x";X12:AI12;0)+COLONNES(A12:W12)

Cordialement

Bonjour,

Il me le faudrait en VBA, j'ai oublié de précisé sorry..

Bonjour,

Il me le faudrait en VBA, j'ai oublié de précisé sorry..

Bonjour,

Une possibilité :

Colonne = Range("X12:AI12").Find("x", LookIn:=xlValues, LookAt:=xlWhole).Column

Bonjour,

Comme Tu pars de X pour aller à AI

reste à savoir si tu veux compter le numéro de colonne à partir de la colonne X ( = 1 ) ?

ou si tu considères que la colonne X est la 24ème dans excel ?

Dans le premier cas en formule matriciel ( à valider par ctrl + Maj + enter )

=MAX(NON(ESTVIDE(X12:AI12))*COLONNE(X12:AI12))

Dans le premier cas en formule matriciel ( à valider par ctrl + Maj + enter )

=MAX(NON(ESTVIDE(X12:AI12))*COLONNE(X12:AI12)-23)

Bonjour,

Merci pour la réactivité mais cela ne fonctionne toujours pas...

Dim y as Long

y = Range(Cells(n, 24).Cells(n, 36)).Find("x", LookIn:=xlValues, LookAt:=xlWhole).Column

erreur d'exécution '1004':

Le message d'erreur : "la méthode 'range' de l'objet'_Global a échoué"

Une idée? merci d'avance

Cordialement

Re,

Si plus aucune donnée après la colonne AI

Alors :

Dim DX As Long
With Sheets("FEUIL1")
    .Activate
    DX = .Range("X12").End(xlUp).Column

Chiffre = DX

oops nan çà marche pas non plus il reste à 24

Bonjour le fil,

Merci pour la réactivité mais cela ne fonctionne toujours pas...

Dim y as Long

y = Range(Cells(n, 24).[Cells(n, 36)).Find("x", LookIn:=xlValues, LookAt:=xlWhole).Column

erreur d'exécution '1004':
y = Range(Cells(12, 24), Cells(12, 35)).Find("x", LookIn:=xlValues, LookAt:=xlWhole).Column

n = 12
y = Range(Cells(n, 24), Cells(n, 35)).Find("x", LookIn:=xlValues, LookAt:=xlWhole).Column

Pourquoi ne pas avoir utilisé le code de Pedro22 ?

Colonne = Range("X12:AI12").Find("x", LookIn:=xlValues, LookAt:=xlWhole).Column

Cordialement,

Bonjour,

je précise que j'ai déjà mis n=12 désolé j'ai oublié de préciser, donc mon problème persiste...

Cordialement

Re,

je précise que j'ai déjà mis n=12

Oui, mais tu as mis un point au lieu d'une virgule entre les 2 cells....

y = Range(Cells(n, 24).[Cells(n, 36)).Find("x", LookIn:=xlValues, LookAt:=xlWhole).Column

[quote=xorsankukai post_id=735630 time=1550073407 user_id=30818]

Re,

je précise que j'ai déjà mis n=12

Oui, mais tu as mis un point au lieu d'une virgule entre les 2 cells....

y = Range(Cells(n, 24).[Cells(n, 36)).Find("x", LookIn:=xlValues, LookAt:=xlWhole).Column

[/quote]

Re,

merci!! mais maintenant il y a un autre message d'erreur..

"Variable Objet ou variable de bloc with non définie" pour la même ligne

Bonjour le fil,

Il manque le Set devant la ligne de code :

Set y = Range(Cells(n, 24).[Cells(n, 36)).Find("x", LookIn:=xlValues, LookAt:=xlWhole).Column 

D'ailleurs pourquoi y as Long ?

Pourquoi pas :

Dim y as Range
Set y = Range(Cells(n, 24).[Cells(n, 36)).Find("x", LookIn:=xlValues, LookAt:=xlWhole)
MsgBox y.Column 

A dispo!

Re,

As-tu correctement déclarer tes variables ?

Essaies de mettre Set y

Cordialement,

Re-

Bon du coup j'insiste, le y As Long génère une erreur "Objet Requis" chez moi

Je crois pas que se soit possible d'utiliser la fonction Find avec une variable de Type Long.

Donc il vaux mieux utiliser le code ci-dessous :

Sub xxx()
Dim c As Range
Set c = Range("X12:AI12").Find("x")
MsgBox c.Column
End Sub

Et si tu veux vraiment mettre le numéro de colonne dans une variable alors :

Sub xxx()
Dim c As Range, y as long
Set c = Range("X12:AI12").Find("x")
y = c.Column
MsgBox y
End Sub

A dispo

Je crois pas que se soit possible d'utiliser la fonction Find avec une variable de Type Long.

Salut Juice,

C'est possible si l'on est sûr d'avoir une correspondance. Find renvoie un objet range sur lequel on peut donc chercher le n° de colonne grâce à la propriété .column (auquel cas la valeur dans la variable est bien un nombre entier).

Le problème est dans le cas où "x" n'est pas trouvé, et que find renvoie "nothing", sur lequel ".column" ne s'applique pas.

Pour mieux comprendre où ce situe le problème, il nous faudrait au minimum le code complet (et pas un extrait), et idéalement le fichier sur lequel il doit s'appliquer (ou au moins un fichier représentatif !).

Je crois pas que se soit possible d'utiliser la fonction Find avec une variable de Type Long.

Salut Juice,

C'est possible si l'on est sûr d'avoir une correspondance. Find renvoie un objet range sur lequel on peut donc chercher le n° de colonne grâce à la propriété .column (auquel cas la valeur dans la variable est bien un nombre entier).

Le problème est dans le cas où "x" n'est pas trouvé, et que find renvoie "nothing", sur lequel ".column" ne s'applique pas.

Pour mieux comprendre où ce situe le problème, il nous faudrait au minimum le code complet (et pas un extrait), et idéalement le fichier sur lequel il doit s'appliquer (ou au moins un fichier représentatif !).

Voici le code :

Sub Calendrier()

Dim n As Long

Dim i As Long

Dim NbLignes As Long

Dim rg As Range

Dim y As Long

With Sheets("Customer Group")

NbLignes = .Range("T12").End(xlDown).Row

i = 4

For n = 12 To NbLignes

If .Cells(n, 21) = "Yes" Then

Set rg = Range(Cells(n, 24), Cells(n, 35)).Find("x")

y = rg.Column

Sheets("Planning Cust Exp").Cells(i, y) = "Impact Centre" & vbCrLf & Sheets("Customer Group").Cells(n, 2) & vbCrLf & Sheets("Customer Group").Cells(n, 1)

Sheets("Planning Cust Exp").Cells(i, y).Interior.Color = RGB(94, 2, 78)

Sheets("Planning Cust Exp").Cells(i, y).Font.Color = RGB(255, 255, 255)

Sheets("Planning Cust Exp").Cells(i, y).Font.Bold = True

Sheets("Planning Cust Exp").Cells(i, y).HorizontalAlignment = xlCenter

i = i + 1

Else

End If

Next

End With

End Sub

Toute la partie en bleu est OK mais la partie en rouge n'est pas bonne. Le but est lorsque la condition du "Yes" est rempli, on doit chercher sur une ligne le "x" pour l'afficher sur la ligne et la COLONNE(qui pose problème) sur la page du planning

ça ne fonctionne toujours pas donc merci d'avance...

PS : Si le "Yes" est rempli on trouve forcément "x"

Sur quelle feuille se trouve cette plage ? Tu ne le précises pas dans le code, et le résultat risque de dépendre de la feuille depuis laquelle tu éxécute la macro.

Si c'est la feuille "Customer Group", rajoute des points devant les objets :

.Range(.Cells(n, 24), .Cells(n, 35))

Maintenant, Find ne fonctionnera pas de cette manière, car tu omets des arguments (voir ma première proposition).

Sur quelle feuille se trouve cette plage ? Tu ne le précises pas dans le code, et le résultat risque de dépendre de la feuille depuis laquelle tu éxécute la macro.

Si c'est la feuille "Customer Group", rajoute des points devant les objets :

.Range(.Cells(n, 24), .Cells(n, 35))

Maintenant, Find ne fonctionnera pas de cette manière, car tu omets des arguments (voir ma première proposition).

Ok merci !

Donc Find ne peut pas trouver de "x" car ne n'est pas un nombre entier? est-il possible de trouver "x" ou non avec une autre formule?

Cordialement

Donc Find ne peut pas trouver de "x" car ne n'est pas un nombre entier?

Bonjour,

Il n'a jamais été question de ça ! Mais dans ma proposition, je n'avais pas écrit .Find("x"), mais bien .Find("x", LookIn:=xlValues, LookAt:=xlWhole), qui ne sont pas juste des arguments décoratifs !

Tu n'as pas non plus répondu à ma question concernant la localisation de ta plage de recherche dans ton fichier... Quelle feuille est concernée ?

Bonjour,

Effectivement cela fonctionne correctement maintenant merci ! C'est d'ailleurs pour cela que j'ai indiqué le problème comme résolu.

Je cherche maintenant à faire un "if une cellule contient du texte" car je trouve seulement sur les forum "if cellule contient "exemple"" alors que moi je veux juste du texte en général

Cordialement

Rechercher des sujets similaires à "trouver colonne"