Probleme ecriture cellule

bonjour à tous 8
j’ai un petit soucis quoi que j’écris dans ma cellule C8
et me note toujours 15,8
je vous joins un fichier essai
merci pour votre aide
essai recherche plusieurs cellule.xlsm (149,2 Ko)

Hello
n’étant pas habitué au VBA, mais une piste vers cela…
Dans ton code, sauf erreur de ma part, tu n’as pas déclaré les variables et tu mets i=2 donc en i Excel mettra toujours 2 et le résultat de la recherche seras toujours 15,8
Capture d’écran 2023-07-21 120733

Bonsoir
Mon code a été modifié de manière maladroite d’où ta déconvenue
Je l’ai corrigé et maintenant pour moi cela fonctionne
Testes et dis moi

essai recherche plusieurs cellule.xlsm (46,0 Ko)

1 « J'aime »

Bonsoir Taz067

" tu n’as pas déclaré les variables"

Ce code est de ma conception
Par principe je ne ne déclare jamais des variables
Je suis pour de l’efficacité et non un purisme d’écriture qui de mon point de vue n’apporte rien d’intéressant mais que des déboires si celui-ci est erroné
Je codifie depuis des années avec cette philosophie sans la moindre difficulté c’est donc devenue ma devise
Maintenant chacun voit midi à sa porte

Pour la variable i elle est défini pour la nécessité de la boucle Do While Loop qui suit
Au départ une valeur doit lui être déterminée qui évolue ensuite dans les lignes de code de cette boucle et plus précisément celle-ci avant le Loop :

i = i + 1
Loop

La boucle continue tant que la condition de sa première ligne est tenue :

Do While i < Sheets(« Paramètres »).Range(« B » & Rows.Count).End(xlUp).Row + 1

et plus précisément :

i < Sheets(« Paramètres »).Range(« B » & Rows.Count).End(xlUp).Row + 1
valeur de i inférieur au numéro de la dernière ligne+1 de colonne « B » de l’onglet « Paramètres »

dés que la variable i est supérieure la boucle s’arrète

Voilà pour les explications

Bonne soirée

T’inquiète, je n’y connais pas grand-chose en codage VBA, et comme j’ai toujours vu les variables déclarés, je me disais que ça pouvait venir de là, c’est tout

1 « J'aime »

Je ne m’inquiète pas mais tenais à préciser ma position sur le sujet
Ces propos sont les miens et exclusivement les miens
Je concois tout à fait que l’on puisse penser différemment
Il en reste pas moins que les déclarations ou non de variable n empêche en rien le fonctionnement du code qui suit peut-être à le rendre plus rapide mais cela reste à démontrer
Je vais très certainement faire hurler les puristes par tous ces propos mais il faut avoir le courage de ses opinions

Au plaisir d échanger avec toi

1 « J'aime »

bonsoir FFO
j’ai essayer ton fichier, cela ne fonctionne pas
soit je tombe sur 18,2 ou soit il me donne aucun résultat alors que mes cotes dans C8,D8 et E8 existe
sur plusieurs essai il me change le chiffre que j’ai inscrit en C8

je déclare aussi presque jamais mes variables, sauf quand c’est nécessaire comme ici le s doit être un string, certainement pas un chiffre (integer).

Sub Recherche()
     Dim s As String, sh, c, i, Lgne
     If Range("C8") = "" Then
          MsgBox ("Veuillez renseigner la cellules N° Forme avant d'exécuter ce traitement !!!")
          Exit Sub
     End If
     Range("I8", "M8").Value = ""
     
     With Sheets("Paramètres")
          For i = 2 To .Range("B" & Rows.Count).End(xlUp).Row + 1     'boucle ces cellules
               s = .Range("B" & i).Value
               If Len(s) Then                'cellule non vide
                    On Error Resume Next
                    Set sh = Sheets(s)       'essayer à assigner feuille
                    On Error GoTo 0
                    If Not sh Is Nothing Then     'feuille existe
                         Set c = sh.Columns("I:I").Find(What:=Range("C8"), After:=sh.Range("I4"), LookIn:=xlValues, LookAt:=xlWhole)     'rechercher cellule
                         If Not c Is Nothing Then     'cellule trouvé
                              ligne = c.Row
                              Range("C8").Value = sh.Range("C" & ligne).Value
                              Range("I8").Value = sh.Range("I" & ligne).Value
                              Range("J8").Value = sh.Range("J" & ligne).Value
                              Range("K8").Value = sh.Name
                              Range("L8").Value = sh.Range("L" & ligne).Value
                              Range("M8").Value = sh.Range("M" & ligne).Value
                              b = True
                              Exit For
                         End If
                    End If
               End If
          Next
     End With
     If Not b Then MsgBox "erreur"

End Sub


1 « J'aime »

bonsoir Cow18
j’ai les mêmes erreurs que FFO soit 18.2 ou aucun résultat

le but du fichier
c’est que si il y a une concordance en C8 chercher si il y en a une en D8 ainsi de suite
mais toujours dans la même ligne de l’onglet horizontaux
en sachant que E8,F8,G8 et H8 peuvent être vide
et si il y a concordance remplir en I8,J8,K8,L8 et M8
merci pour votre aide

bonjour, ce n’ai aucun idée comment vos données sont organisés, donc un essai, autrement voulez-vous montrer ce que vous voulez exactement ?

Sub Recherche()
     Dim s     As String, sh, c, i, Lgne
     If Range("C8") = "" Then
          MsgBox ("Veuillez renseigner la cellules N° Forme avant d'exécuter ce traitement !!!")
          Exit Sub
     End If
     Range("I8", "M8").Value = ""

     With Sheets("Paramètres")
          For i = 2 To .Range("B" & Rows.Count).End(xlUp).Row + 1     'boucle ces cellules
               s = .Range("B" & i).Value
               If Len(s) Then                'cellule non vide
                    On Error Resume Next
                    Set sh = Sheets(s)       'essayer à assigner feuille
                    On Error GoTo 0
                    If Not sh Is Nothing Then     'feuille existe
                         Set c = sh.Columns("C:C").Find(What:=Range("C8"), After:=sh.Range("I4"), LookIn:=xlValues, LookAt:=xlWhole)     'rechercher cellule
                         If c Is Nothing Then Set c = sh.Columns("D:D").Find(What:=Range("D8"), After:=sh.Range("D4"), LookIn:=xlValues, LookAt:=xlWhole)
                         If c Is Nothing Then Set c = sh.Columns("E:E").Find(What:=Range("E8"), After:=sh.Range("E4"), LookIn:=xlValues, LookAt:=xlWhole)
                         If c Is Nothing Then Set c = sh.Columns("F:F").Find(What:=Range("F8"), After:=sh.Range("F4"), LookIn:=xlValues, LookAt:=xlWhole)
                         If c Is Nothing Then Set c = sh.Columns("G:G").Find(What:=Range("G8"), After:=sh.Range("G4"), LookIn:=xlValues, LookAt:=xlWhole)
                         If c Is Nothing Then Set c = sh.Columns("H:H").Find(What:=Range("H8"), After:=sh.Range("H4"), LookIn:=xlValues, LookAt:=xlWhole)

                         If Not c Is Nothing Then     'cellule trouvé
                              ligne = c.Row
                              Range("C8").Value = sh.Range("C" & ligne).Value
                              Range("I8").Value = sh.Range("I" & ligne).Value
                              Range("J8").Value = sh.Range("J" & ligne).Value
                              Range("K8").Value = sh.Name
                              Range("L8").Value = sh.Range("L" & ligne).Value
                              Range("M8").Value = sh.Range("M" & ligne).Value
                              b = True
                              Exit For
                         End If
                    End If
               End If
          Next
     End With
     If Not b Then MsgBox "erreur"

End Sub


Bonjours
Il faudrait que tu me dise ce que tu cherches à realiser
Quelle donnée tu saisis dans quelle cellule pour obtenir quelles données de quel onglet source et cible
Etayes d’un exemple
La donnée saisie
L’action effectuée
Les données récupérées (de quelle source dans quelle cible)
Plus d’explications pour bien comprendre

voici un fichier avec un exemple
Copie de essai recherche plusieurs cellule.xlsm (149,2 Ko)

Désolé pas très claire

Tu dis ceci :

« la recherche se fait dans les cellule de C8 à H8, le but est de chercher la correspondance dans l’onglet Horizontaux »
« si la valeur de C8 est bonne, rechercher la valeur en D8 et ainsi de suite jusqu’à H8 en sachant que de E à H cela peut etre vide »

une seule cellule à la fois ?

Sinon l’ordre des cellules de recherche : C8 puis D8 puis E8 puis F8 puis G8 et enfin H8 avec une ou plusieurs cellules dans cette ordre ou intégralité de celle-ci ?

La correspondance des colonnes pour chacune d’elle dans l’onglet de recherche « Horizontaux » ?

Dans ton exemple tu fais référence onglet « Horizontaux » aux données de la ligne 15 qui correspond au N° Forme 13 colonne « I »
Pourquoi ne pas rechercher ce N° Forme directement dans cette colonne qui te donnerai le même résultat ?
Testes ton fichier ci-joint avec la donnée 13 en cellule « I8 » qui correspond au N° Forme 13 et tu verras que le résultat souhaitait est obtenu

Merci pour ces précisions

Copie de essai recherche plusieurs cellule.xlsm (46,7 Ko)

Sub Recherche()
     Dim s     As String, sh, c, i, aJoindre, Ligne
     If StrComp("Formulaire de recherche", ActiveSheet.Name, 1) <> 0 Then MsgBox "mauvaise feuille", vbCritical: Exit Sub
     If Range("C8") = "" Then MsgBox "Veuillez renseigner la cellules N° Forme avant d'exécuter ce traitement !!!", vbCritical: Exit Sub

     Range("I8:M8").ClearContents
     With Sheets("Paramètres")
          For i = 2 To .Range("B" & Rows.Count).End(xlUp).Row + 1     'boucle ces cellules
               s = .Range("B" & i).Value
               If Len(s) Then                'cellule non vide (nom de feuille)
                    On Error Resume Next
                    Set sh = Sheets(s)       'essayer à assigner feuille
                    On Error GoTo 0
                    If Not sh Is Nothing Then     'feuille existe
                         i = Application.Max(4, sh.UsedRange.Row + sh.UsedRange.Rows.Count + 1)
                         sh.Range("C4:H" & i).Name = "MyD"
                         aJoindre = Evaluate("offset(myd,,,,1) & ""|"" & offset(myd,,1,,1) & ""|"" & offset(myd,,2,,1) & ""|"" & offset(myd,,3,,1) & ""|"" & offset(myd,,4,,1) & ""|"" & offset(myd,,5,,1)")
                         'Debug.Print Replace(Join(Array([C8], [D8], [E8], [F8], [G8], [H8]), "|"), ",", ".")
                         Ligne = Application.Match(Replace(Join(Array([C8], [D8], [E8], [F8], [G8], [H8]), "|"), ",", "."), aJoindre, 0)

                         If IsNumeric(Ligne) Then     'ligne trouvé
                              Ligne = Ligne + Range("MyD").Row - 1     'ajouter le décalage
                              Range("I8").Resize(, 5).Value = sh.Range("I" & Ligne).Resize(, 5).Value     'coller ces données
                              b = True       'drapeau haut
                              Exit For
                         Else
                              Range("I8").Resize(, 5).Value = "???"
                         End If
                    End If
               End If
          Next
     End With
     
     If Not b Then MsgBox "erreur"           'sans drapeau = message
End Sub

Copie de essai recherche plusieurs cellule.xlsm (56,7 Ko)

En réalité les cellules cde C8 a H8 sont des côte réelle
Donc vers forme commune
Le but est de donner des côte dans chaque cellule et qu’on trouve la forme qui correspond
Donc si C8 est bonne chercher D8 mais sur la même ligne car on peut mettre qu’une seule forme
Donc toutes la ligne doit correspondre sinon si aucune correspond c’est qu’il n’existe pas de forme
Pas pû essayé ton fichier aujourd’hui je ne suis pas chez moi
Je fais un essai demain
Merci

J’ai modifié le code de la macro pour une autre approche
Saisis les données à rechercher dans les cellule « C8 » à « H8 » puis cliques sur le bouton « RECHERCHE »
Si les mêmes données saisies sont trouvée sur une des lignes de l’onglet « Horizontaux » colonnes « C » à « H » dans le même ordre les valeurs pour cette ligne des colonnes « I » à « M » de cet onglet sont intégrée en cellules « I8 » à « M8 »
Attention l’onglet de recherche « Horizontaux » est inscrit en dur dans ce nouveau code
Testes et dis moi

Copie de essai recherche plusieurs cellule.xlsm (46,7 Ko)

1 « J'aime »

sans l’onglet « horizontaux » en dur

Sub Recherche()
     Dim shP, sh
     Sheets("Formulaire de recherche").Select
     données = Join(Array("", Range("C8"), Range("D8"), Range("E8"), Range("F8"), Range("G8"), Range("H8"), ""), "/")
     Range("I8:M8").ClearContents
     Set shP = Sheets("paramètres")
     For i = 2 To shP.Range("B" & Rows.Count).End(xlUp).Row
          On Error Resume Next
          Set sh = Sheets(CStr(shP.Range("B" & i).Value))
          On Error GoTo 0
          If Not sh Is Nothing Then
               For j = 2 To sh.Range("C" & Rows.Count).End(xlUp).Row
                    If données = Join(Array("", sh.Range("C" & j).Value, sh.Range("D" & j).Value, sh.Range("E" & j).Value, sh.Range("F" & j).Value, sh.Range("G" & j).Value, sh.Range("H" & j).Value, ""), "/") Then
                         Range("I8").Resize(, 5).Value = sh.Range("I" & j).Resize(, 5).Value
                         b = True
                         Exit For
                    End If
               Next
          End If
          If b Then Exit For
     Next

     If Not b Then MsgBox "problème"

End Sub
1 « J'aime »

bonjour nickel ca fonctionne parfaitement
merci beaucoup

Bonjour
Super !!!
Merci pour ce retour
N’oublies pas de valider cette dernière proposition un plus sympathique
Au plaisir de t’aider à nouveau

1 « J'aime »