Re: Recherche valeur.
#11
Aspirant XLPages

Inscription: 20/05/2010

Messages: 21

Système d'exploitation:
PC
Version Excel utilisée:
2003,2007
Posté le : 31-05-2010 19h00
Bonsoir à vous tous,
Toutes mes excuses aux doublons, mais je ne me suis rendu compte que je suis revenu sur un sujet résolu qu'après avoir valide ma demande.
Cordialement
gmh
Hors Ligne
Rapport   Haut 

Re: Recherche valeur.
#12
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 31-05-2010 19h24
C'est entendu gmh, pas de problème, c'était juste un quiproquo malencontreux.

Cela dit, pour tenter de clarifier un peu les usages du présent forum :

- sache que tu peux toujours revenir sur un sujet même s'il est déjà [résolu]. Il suffit simplement de reposter dans l'ancien sujet et d'utiliser l'indicateur "Réactivé" en validant ton nouveau post :


Au terme de ce nouveau problème, il ne faudra pas oublier, bien sûr, de remettre le fameux [résolu] comme attendu.

- Et pour finir, bien évidemment, si le nouveau problème en question n'est pas directement lié au sujet précédent ou ne découle pas de celui-ci, il vaut mieux créer un nouveau sujet. Dans le doute, crée un nouveau sujet et mets un lien pointant sur le fil précédent pour aider les intervenants à comprendre.

Comme tu vois, c'est selon...

Cordialement,

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Recherche valeur.
#13
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 463

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 31-05-2010 19h56
Bonjour groupe et gmh,

Dans le classeur original Recap.xls les données de la feuille Données, s’agissant des en-têtes disposée verticalement avec répétition (Pourquoi? Contrainte d’importation à partir d’une autre source? Autre chose? Mystère!), sont placées en B3 et s’étendent par paquet de trois (Pourquoi? Chépas!) où une ligne vide est intercalée entre chaque paquet. Bon.

C’est à partir de ce tableau doté de lignes creuses que tu veux extraire les données pour les représenter de façon convenable sous forme de tableau bien formé avec en-têtes sans redite dans la première ligne et les valeurs associées dans les lignes suivantes.

Je persiste à penser que c’est se donner beaucoup de mal pour rien mais poursuivons.

Dans le classeur Recap2.xls les données de la feuille Données sont positionnées ailleurs en A8 (Pourquoi? Nouvelle contrainte, goût du moment, caprice? Nul ne sait.)

Tu pourras aussi te rendre compte du déplacement (Encore pourquoi?) des plages cibles dans la feuille Récap de B3  dans Recap.xls à AU7 dans Recap2.xls. (Pourquoi encore et encore?)

Pour arriver à ramasser correctement la source des données (feuille Données) et à transposer ces données tout aussi correctement dans la feuille cible (Récap) il faut d’abord aligner nos mirettes et ne pas disposer les données n’importe où.

Si tu désires une procédure VBA qui puisse prendre en compte cette grande variabilité dans la position des plages source et cible il faudra nous remuer les méninges dans le code. Ce qui n'est pas à la portée d'un débutant. Le mot débutant ne portant ici aucun sens péjoratif, va sans dire. Pour l’heure et compte tenu de ton peu d'expérience en codage, contentons-nous de ne présenter ces plages que toujours au même endroit.

Voilà pour ce petit laïus structurel.

Question importante :
Où voudras-tu poser l’origine des plages source (en feuille Données) et cible (en feuille Récap)?

Aussi, comme tu le constates y'a plein de monde pour se pencher sur ton problème : dan, michel_m, myDearFriend, moi-même en plus de quelques autres qui suivent ici les péripéties de ce fil et qui ont, j'en suis sûr, hâte de s'y joindre.

Ne nous décourageons pas.

Cordialement,

Guy


Edité par Guy le 31/05/2010 22:20:09

Hors Ligne
Rapport   Haut 

Re: Recherche valeur.
#14
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 463

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 01-06-2010 19h23
Bonjour tout le monde,

J'ai suivi à la trace le code fournit dans le classeur Recap2(2).xls et l'ai commenté ainsi.

Option Base 1

Sub recapituler()
Dim dercol As Byte, entete As String, cptr As Byte, nbre As Integer
Dim tablo
Dim lig As Integer, donnee As Byte

' La variable dercol devrait porter le numéro de colonne du dernier champ
' On suppose implicitement que la première colonne est en 1 ce qui n'est pas le cas dans ce classeur.
' En effet les champs cibles ont été déplacés en AU7:AW7.
' À noter que la dernière colonne de la ligne 7 est donnée par Cells.Columns.Count pour
' permettre une compatibilité avec toutes les versions d'Excel.
' Pour Excel 2003 et antérieur Cells.Columns.Count = 256
' Pour Excel 2007 Cells.Columns.Count = 16 384
' Dans le cas Excel 2007 il faudrait modifier
donnee As Byte en donnee As Long
' L'instruction originale est commenté donc non exécutée.
' À noter aussi l'utilisation du nom de code pour désigner la feuille visée au lieu
' de Sheets("Récap") ce qui rend le code indépendant du nom d'onglet de cette feuille.
' Nous posons la plage notée ("?????") en fin de ligne 7 et nous examinons la suite.

'dercol = Sheets("Récap").Range("?????").End(xlToLeft).Column
dercol = Feuil2.Cells(7, Cells.Columns.Count).End(xlToLeft).Column

' dercol porte 49 puisque c'est le numéro de la première colonne non vide à droite de la ligne 7
' La suite montrera que le déplacement de la plage cible en AU7:AW7 pose problème.

' La variable entete devrait porter une en-tête toutefois on suppose ici que la
' feuille Cible (Récap) est active ce qui n'est pas nécessairement le cas.
' On devrait plutôt utiliser une référence complète à la cellule "AU7" de la feuille Récap.
' Aussi on suppose que la cellule AU7 porte l'une des en-têtes valides ("Partie 1", "Partie C", "Partie 2A").
' Ce qui n'est pas nécessairement le cas non plus.
entete = Range("AU7")

 With Sheets("données")
    ' La fonction CountIf() provoquera une erreur si d'aventure la variable entete est vide ("")
    ' de plus si entete porte une chaîne de caractères différente d'un nom de champ valide
    ' nbre sera zéro. Très mauvais pour la suite.
    nbre = Application.CountIf(.Columns(1), entete)
   
    ' Le dimensionnement du tableau ne sera valide que si dercol > 1 et nbr > 0
    ' Au vu de ce qui précède il y a  risque d'erreur ici aussi
    ReDim tablo(dercol - 1, nbre)
   
    ' En posant le compte initial à 1 on suppose que la première colonne cible est 1
    ' ce qui dans ce classeur est faux. La première colonne cible valide est la colonne 47 (AU).
    ' Les choses s'enveniment.
    For cptr = 1 To dercol
        ' Quelle valeur portera ici la variable entete lors du premier tour de boucle?
        ' La chaîne de caractères de la cellule A3!
        ' Et dans ce classeur qu'y a-t-il en cellule A3 feuille Récap? Rien! Une chaîne vide plus précisément.
        ' Oh! Nous courrons à la catastrophe.
        entete = Sheets("récap").Cells(3, cptr)
       
        lig = 1
        donnee = 1
       
        ' Ici la variable cptr_donn arrive de nulle part. Par défaut une variable est créée.
        ' Il aurait fallu poser une directive Option Explicit au module. Pour l'instant passons.
       
        ' Il se peut que nbre soit zéro et donc que la boucle ne s'exécute pas.
        For cptr_donn = 1 To nbre
            ' Et si par hasard entete est vide, que ce passera-t-il?
            ' Oui, Badaboum!
'            lig = .Columns(1).Find(entete, .Cells(lig, 2)).Row
           
            ' Comme la variable de boucle initiale a été posée à 1, contrairement au code original,
            ' cptr - 1 = 0. Ennuyeux puisque la directive Option Base 1 a été posée.
            ' Conséquence : il n'y a pas d'index 0 dans la première dimension du tableau.
            ' Re-Badaboum! Erreur d'exécution 9, L'indice n'appartient pas à la sélection.
            tablo(cptr - 1, donnee) = Replace(.Cells(lig, 3), "-", 0)
            donnee = donnee + 1
        Next
    Next
End With

Application.ScreenUpdating = False
With Sheets("récap")
    .Range("AU8").Resize(nbre, dercol - 1) = Application.Transpose(tablo)
    .Activate
End With


End Sub

 
La copie de cette procédure prévue pour un classeur spécifique Recap.xls pose de très nombreux problèmes dans le classeur Recap2(2).xls et constitue pour ce dernier une assise sablonneuse.

La lecture des commentaires dans le code devrait te guider dans la réécriture de celui-ci.
Et aussi la lecture de Formation Excel - VBA Débutant est indiquée.

Cordialement,

Guy


Pièce jointe:
xls Recap2(2)_Commenté.xls   [ Taille: 36.00 Ko - Téléchargements: 571 ]
Edité par Guy le 02/06/2010 04:30:37

Hors Ligne
Rapport   Haut 

Re: Recherche valeur.
#15
Aspirant XLPages

Inscription: 20/05/2010

Messages: 21

Système d'exploitation:
PC
Version Excel utilisée:
2003,2007
Posté le : 02-06-2010 08h53
Bonjour,
Supprimons tous les fichiers reçus jusqu'à maintenant même les codes VBA et reprenons avec le fichier joint avec de nouvelle base. Voir fichier. Il n'y à plus de code.
Le fichier "RecapModif.xls à été épuré pour la cause.

Cordialement
gmh.
Pièce jointe:
xls Recap_Modifié.xls   [ Taille: 26.50 Ko - Téléchargements: 543 ]
Hors Ligne
Rapport   Haut 

Re: Recherche valeur.
#16
Aspirant XLPages

Inscription: 20/05/2010

Messages: 21

Système d'exploitation:
PC
Version Excel utilisée:
2003,2007
Posté le : 02-06-2010 08h57
Bonjour,
Il y à eu erreur sur le nouveau fichir.
Voir plutôt celui ci joint "RecapModif.
Cordialement
gmh
Pièce jointe:
xls RecapModif.xls   [ Taille: 23.00 Ko - Téléchargements: 535 ]
Hors Ligne
Rapport   Haut 

Re: Recherche valeur.
#17
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 463

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 02-06-2010 17h48
Bonjour gmh, le forum,

Petits classeurs portant une procédure de mise en tableau des données.

Un bouton de lancement apparaît en feuille Données.

Suite au traitement et si toutes les hypothèses et contraintes sont respectées le tableau cible porte les valeurs désirées.

Le code peut rouler en Excel 2003 et Excel 2007 (même en Excel 95 je crois) et les classeurs fournis le démontrent.

IMPORTANT : J'ai posé le nom de code des feuilles Données et Récap en Data et Recapitulatif respectivement.

Cordialement,

Guy

Édition : Comment sont saisies, importées ou autrement chargées les données en feuille du même nom?

Pièce jointe:
xls RecapModif_AvecCode.xls   [ Taille: 43.00 Ko - Téléchargements: 520 ]
xlsm RecapModif_AvecCode.xlsm   [ Taille: 25.77 Ko - Téléchargements: 544 ]
Edité par Guy le 02/06/2010 21:24:43

Hors Ligne
Rapport   Haut 

Re: Recherche valeur.
#18
Aspirant XLPages

Inscription: 20/05/2010

Messages: 21

Système d'exploitation:
PC
Version Excel utilisée:
2003,2007
Posté le : 02-06-2010 19h11
Bonsoir, Guy
On recommence?
Non, non.
J'ai testé le fichier, énorme!!!
A la base lorsque j'ai mis le premier fichier "recap" c'était pour aller au plus simple et pour que je puisse compléter le fichier final. J'ai commencé à modifier le fichier et je m'y suis perdu dans les codes.
C'est la final, encore merci.
Cordialement
gmh

Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes